Subversion Repositories svnkaklik

Rev

Rev 658 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log

Rev 658 Rev 659
1
CCS PCH C Compiler, Version 4.090, 47914               15-V-10 23:52
1
CCS PCH C Compiler, Version 4.090, 47914               15-V-10 23:52
2
 
2
 
3
               Filename: D:\svnKaklik\programy\C\PIC_C\mereni\inertial\main.lst
3
               Filename: D:\svnKaklik\programy\C\PIC_C\mereni\inertial\main.lst
4
 
4
 
5
               ROM used: 9694 bytes (30%)
5
               ROM used: 9694 bytes (30%)
6
                         Largest free fragment is 23070
6
                         Largest free fragment is 23070
7
               RAM used: 1650 (81%) at main() level
7
               RAM used: 1650 (81%) at main() level
8
                         1869 (91%) worst case
8
                         1869 (91%) worst case
9
               Stack:    17 worst case (8 in main + 9 for interrupts)
9
               Stack:    17 worst case (8 in main + 9 for interrupts)
10
 
10
 
11
*
11
*
12
0000:  GOTO   1F62
12
0000:  GOTO   1F62
13
*
13
*
14
0008:  MOVWF  05
14
0008:  MOVWF  05
15
000A:  MOVFF  FD8,06
15
000A:  MOVFF  FD8,06
16
000E:  MOVFF  FE0,07
16
000E:  MOVFF  FE0,07
17
0012:  MOVLB  0
17
0012:  MOVLB  0
18
0014:  MOVFF  FE9,0D
18
0014:  MOVFF  FE9,0D
19
0018:  MOVFF  FEA,08
19
0018:  MOVFF  FEA,08
20
001C:  MOVFF  FE1,09
20
001C:  MOVFF  FE1,09
21
0020:  MOVFF  FE2,0A
21
0020:  MOVFF  FE2,0A
22
0024:  MOVFF  FD9,0B
22
0024:  MOVFF  FD9,0B
23
0028:  MOVFF  FDA,0C
23
0028:  MOVFF  FDA,0C
24
002C:  MOVFF  FF3,14
24
002C:  MOVFF  FF3,14
25
0030:  MOVFF  FF4,15
25
0030:  MOVFF  FF4,15
26
0034:  MOVFF  FFA,16
26
0034:  MOVFF  FFA,16
27
0038:  MOVFF  00,0F
27
0038:  MOVFF  00,0F
28
003C:  MOVFF  01,10
28
003C:  MOVFF  01,10
29
0040:  MOVFF  02,11
29
0040:  MOVFF  02,11
30
0044:  MOVFF  03,12
30
0044:  MOVFF  03,12
31
0048:  MOVFF  04,13
31
0048:  MOVFF  04,13
32
004C:  BTFSS  FF2.5
32
004C:  BTFSS  FF2.5
33
004E:  GOTO   0058
33
004E:  GOTO   0058
34
0052:  BTFSC  FF2.2
34
0052:  BTFSC  FF2.2
35
0054:  GOTO   025E
35
0054:  GOTO   025E
36
0058:  BTFSS  FA0.5
36
0058:  BTFSS  FA0.5
37
005A:  GOTO   0064
37
005A:  GOTO   0064
38
005E:  BTFSC  FA1.5
38
005E:  BTFSC  FA1.5
39
0060:  GOTO   1274
39
0060:  GOTO   1274
40
0064:  MOVFF  0F,00
40
0064:  MOVFF  0F,00
41
0068:  MOVFF  10,01
41
0068:  MOVFF  10,01
42
006C:  MOVFF  11,02
42
006C:  MOVFF  11,02
43
0070:  MOVFF  12,03
43
0070:  MOVFF  12,03
44
0074:  MOVFF  13,04
44
0074:  MOVFF  13,04
45
0078:  MOVFF  0D,FE9
45
0078:  MOVFF  0D,FE9
46
007C:  MOVFF  08,FEA
46
007C:  MOVFF  08,FEA
47
0080:  BSF    08.7
47
0080:  BSF    08.7
48
0082:  MOVFF  09,FE1
48
0082:  MOVFF  09,FE1
49
0086:  MOVFF  0A,FE2
49
0086:  MOVFF  0A,FE2
50
008A:  MOVFF  0B,FD9
50
008A:  MOVFF  0B,FD9
51
008E:  MOVFF  0C,FDA
51
008E:  MOVFF  0C,FDA
52
0092:  MOVFF  14,FF3
52
0092:  MOVFF  14,FF3
53
0096:  MOVFF  15,FF4
53
0096:  MOVFF  15,FF4
54
009A:  MOVFF  16,FFA
54
009A:  MOVFF  16,FFA
55
009E:  MOVF   05,W
55
009E:  MOVF   05,W
56
00A0:  MOVFF  07,FE0
56
00A0:  MOVFF  07,FE0
57
00A4:  MOVFF  06,FD8
57
00A4:  MOVFF  06,FD8
58
00A8:  RETFIE 0
58
00A8:  RETFIE 0
59
.................... #include "main.h" 
59
.................... #include "main.h" 
60
.................... #include <18F4550.h> 
60
.................... #include <18F4550.h> 
61
.................... //////// Standard Header file for the PIC18F4550 device //////////////// 
61
.................... //////// Standard Header file for the PIC18F4550 device //////////////// 
62
.................... #device PIC18F4550 
62
.................... #device PIC18F4550 
63
.................... #list 
63
.................... #list 
64
....................  
64
....................  
65
.................... #device adc=10 
65
.................... #device adc=10 
66
....................  
66
....................  
67
.................... #FUSES NOWDT                    //No Watch Dog Timer 
67
.................... #FUSES NOWDT                    //No Watch Dog Timer 
68
.................... #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale 
68
.................... #FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale 
69
.................... #FUSES HSPLL                    //Crystal/Resonator with PLL enabled 
69
.................... #FUSES HSPLL                    //Crystal/Resonator with PLL enabled 
70
.................... #FUSES NOPROTECT                //Code not protected from reading 
70
.................... #FUSES NOPROTECT                //Code not protected from reading 
71
.................... #FUSES NOBROWNOUT               //No brownout reset 
71
.................... #FUSES NOBROWNOUT               //No brownout reset 
72
.................... #FUSES BORV20                   //Brownout reset at 2.0V 
72
.................... #FUSES BORV20                   //Brownout reset at 2.0V 
73
.................... #FUSES NOPUT                    //No Power Up Timer 
73
.................... #FUSES NOPUT                    //No Power Up Timer 
74
.................... #FUSES NOCPD                    //No EE protection 
74
.................... #FUSES NOCPD                    //No EE protection 
75
.................... #FUSES STVREN                   //Stack full/underflow will cause reset 
75
.................... #FUSES STVREN                   //Stack full/underflow will cause reset 
76
.................... #FUSES NODEBUG                  //No Debug mode for ICD 
76
.................... #FUSES NODEBUG                  //No Debug mode for ICD 
77
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
77
.................... #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O 
78
.................... #FUSES NOWRT                    //Program memory not write protected 
78
.................... #FUSES NOWRT                    //Program memory not write protected 
79
.................... #FUSES NOWRTD                   //Data EEPROM not write protected 
79
.................... #FUSES NOWRTD                   //Data EEPROM not write protected 
80
.................... #FUSES IESO                     //Internal External Switch Over mode enabled 
80
.................... #FUSES IESO                     //Internal External Switch Over mode enabled 
81
.................... #FUSES FCMEN                    //Fail-safe clock monitor enabled 
81
.................... #FUSES FCMEN                    //Fail-safe clock monitor enabled 
82
.................... #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET 
82
.................... #FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET 
83
.................... #FUSES NOWRTC                   //configuration not registers write protected 
83
.................... #FUSES NOWRTC                   //configuration not registers write protected 
84
.................... #FUSES NOWRTB                   //Boot block not write protected 
84
.................... #FUSES NOWRTB                   //Boot block not write protected 
85
.................... #FUSES NOEBTR                   //Memory not protected from table reads 
85
.................... #FUSES NOEBTR                   //Memory not protected from table reads 
86
.................... #FUSES NOEBTRB                  //Boot block not protected from table reads 
86
.................... #FUSES NOEBTRB                  //Boot block not protected from table reads 
87
.................... #FUSES NOCPB                    //No Boot Block code protection 
87
.................... #FUSES NOCPB                    //No Boot Block code protection 
88
.................... #FUSES MCLR                     //Master Clear pin enabled 
88
.................... #FUSES MCLR                     //Master Clear pin enabled 
89
.................... #FUSES LPT1OSC                  //Timer1 configured for low-power operation 
89
.................... #FUSES LPT1OSC                  //Timer1 configured for low-power operation 
90
.................... #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode) 
90
.................... #FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode) 
91
.................... #FUSES PLL5                    //Divide By 5(20MHz oscillator input) 
91
.................... #FUSES PLL5                    //Divide By 5(20MHz oscillator input) 
92
.................... #FUSES CPUDIV4                  //System Clock by 4 
92
.................... #FUSES CPUDIV4                  //System Clock by 4 
93
.................... #FUSES USBDIV                   //USB clock source comes from PLL divide by 2 
93
.................... #FUSES USBDIV                   //USB clock source comes from PLL divide by 2 
94
.................... #FUSES VREGEN                   //USB voltage regulator enabled 
94
.................... #FUSES VREGEN                   //USB voltage regulator enabled 
95
.................... #FUSES ICPRT                    //ICPRT enabled 
95
.................... #FUSES ICPRT                    //ICPRT enabled 
96
....................  
96
....................  
97
.................... #use delay(clock=24000000) 
97
.................... #use delay(clock=24000000) 
98
....................  
98
....................  
99
....................  
99
....................  
100
....................  
100
....................  
101
.................... #define REV "$Rev$" 
101
.................... #define REV "$Rev$" 
102
....................  
102
....................  
103
.................... unsigned int32 time;   // pocitadlo preteceni casovace 
103
.................... unsigned int32 time;   // pocitadlo preteceni casovace 
104
....................  
104
....................  
105
.................... #define BUFLEN 100 
105
.................... #define BUFLEN 100 
106
....................  
106
....................  
107
.................... #int_RTCC 
107
.................... #int_RTCC 
108
.................... void  RTCC_isr(void)    // preruseni od pretekleho casovace  
108
.................... void  RTCC_isr(void)    // preruseni od pretekleho casovace  
109
.................... { 
109
.................... { 
110
....................   time++; 
110
....................   time++; 
111
*
111
*
112
025E:  MOVLW  01
112
025E:  MOVLW  01
113
0260:  ADDWF  19,F
113
0260:  ADDWF  19,F
114
0262:  BTFSC  FD8.0
114
0262:  BTFSC  FD8.0
115
0264:  INCF   1A,F
115
0264:  INCF   1A,F
116
0266:  BTFSC  FD8.2
116
0266:  BTFSC  FD8.2
117
0268:  INCF   1B,F
117
0268:  INCF   1B,F
118
026A:  BTFSC  FD8.2
118
026A:  BTFSC  FD8.2
119
026C:  INCF   1C,F
119
026C:  INCF   1C,F
120
.................... } 
120
.................... } 
121
....................  
121
....................  
122
.................... // Includes all USB code and interrupts, as well as the CDC API 
122
.................... // Includes all USB code and interrupts, as well as the CDC API 
123
.................... #include <usb_cdc.h> 
123
.................... #include <usb_cdc.h> 
124
.................... ///////////////////////////////////////////////////////////////////////// 
124
.................... ///////////////////////////////////////////////////////////////////////// 
125
.................... ////                                                                 //// 
125
.................... ////                                                                 //// 
126
.................... ////                            usb_cdc.h                            //// 
126
.................... ////                            usb_cdc.h                            //// 
127
.................... ////                                                                 //// 
127
.................... ////                                                                 //// 
128
.................... //// Library for adding a virtual COM port on your PC over USB using //// 
128
.................... //// Library for adding a virtual COM port on your PC over USB using //// 
129
.................... //// the standard Communication Device Class (CDC) specification.    //// 
129
.................... //// the standard Communication Device Class (CDC) specification.    //// 
130
.................... //// Including this file in your code will add all USB code,         //// 
130
.................... //// Including this file in your code will add all USB code,         //// 
131
.................... //// interrupts, descriptors and handlers required.  No other        //// 
131
.................... //// interrupts, descriptors and handlers required.  No other        //// 
132
.................... //// modifications need to be made.                                  //// 
132
.................... //// modifications need to be made.                                  //// 
133
.................... ////                                                                 //// 
133
.................... ////                                                                 //// 
134
.................... //// This library creates a virtual RS232 link between the PC and    //// 
134
.................... //// This library creates a virtual RS232 link between the PC and    //// 
135
.................... //// the PIC, therefore the library provided will be familiar to     //// 
135
.................... //// the PIC, therefore the library provided will be familiar to     //// 
136
.................... //// anyone with standard UART stream I/O:                           //// 
136
.................... //// anyone with standard UART stream I/O:                           //// 
137
.................... ////                                                                 //// 
137
.................... ////                                                                 //// 
138
.................... //// usb_cdc_kbhit() - Returns TRUE if there is one or more          //// 
138
.................... //// usb_cdc_kbhit() - Returns TRUE if there is one or more          //// 
139
.................... ////      character received and waiting in the receive buffer.      //// 
139
.................... ////      character received and waiting in the receive buffer.      //// 
140
.................... ////                                                                 //// 
140
.................... ////                                                                 //// 
141
.................... //// usb_cdc_getc() - Gets a character from the receive buffer.  If  //// 
141
.................... //// usb_cdc_getc() - Gets a character from the receive buffer.  If  //// 
142
.................... ////      there is no data in the receive buffer it will wait until  //// 
142
.................... ////      there is no data in the receive buffer it will wait until  //// 
143
.................... ////      there is data in the receive buffer.  If you do not want   //// 
143
.................... ////      there is data in the receive buffer.  If you do not want   //// 
144
.................... ////      to wait in an infinit loop, use usb_cdc_kbhit() first to   //// 
144
.................... ////      to wait in an infinit loop, use usb_cdc_kbhit() first to   //// 
145
.................... ////      check if there is data before calling usb_cdc_getc().      //// 
145
.................... ////      check if there is data before calling usb_cdc_getc().      //// 
146
.................... ////                                                                 //// 
146
.................... ////                                                                 //// 
147
.................... //// usb_cdc_putc(char c) - Puts a character into the transmit       //// 
147
.................... //// usb_cdc_putc(char c) - Puts a character into the transmit       //// 
148
.................... ////      buffer.  If the transmit buffer is full it will wait until //// 
148
.................... ////      buffer.  If the transmit buffer is full it will wait until //// 
149
.................... ////      the transmit buffer is not full before putting the char    //// 
149
.................... ////      the transmit buffer is not full before putting the char    //// 
150
.................... ////      into the transmit buffer.  The transmit buffer is read by  //// 
150
.................... ////      into the transmit buffer.  The transmit buffer is read by  //// 
151
.................... ////      the PC very quickly, and therefore the buffer should only  //// 
151
.................... ////      the PC very quickly, and therefore the buffer should only  //// 
152
.................... ////      be full for a few milli-seconds.  If you are concerned     //// 
152
.................... ////      be full for a few milli-seconds.  If you are concerned     //// 
153
.................... ////      and don't want to be stuck in a long or infinite loop,     //// 
153
.................... ////      and don't want to be stuck in a long or infinite loop,     //// 
154
.................... ////      use usb_cdc_putready() to see if there is space in the     //// 
154
.................... ////      use usb_cdc_putready() to see if there is space in the     //// 
155
.................... ////      transmit buffer before putting data into the transmit      //// 
155
.................... ////      transmit buffer before putting data into the transmit      //// 
156
.................... ////      buffer.                                                    //// 
156
.................... ////      buffer.                                                    //// 
157
.................... ////                                                                 //// 
157
.................... ////                                                                 //// 
158
.................... //// usb_cdc_putready() - Returns TRUE if there is room left in the  //// 
158
.................... //// usb_cdc_putready() - Returns TRUE if there is room left in the  //// 
159
.................... ////      transmit buffer for another character.                     //// 
159
.................... ////      transmit buffer for another character.                     //// 
160
.................... ////                                                                 //// 
160
.................... ////                                                                 //// 
161
.................... //// usb_cdc_connected() - Returns TRUE if we received a             //// 
161
.................... //// usb_cdc_connected() - Returns TRUE if we received a             //// 
162
.................... ////      Set_Line_Coding.  On most serial terminal programs (such   //// 
162
.................... ////      Set_Line_Coding.  On most serial terminal programs (such   //// 
163
.................... ////      as Hyperterminal), they will send a Set_Line_Coding        //// 
163
.................... ////      as Hyperterminal), they will send a Set_Line_Coding        //// 
164
.................... ////      message when the program starts and it opens the virtual   //// 
164
.................... ////      message when the program starts and it opens the virtual   //// 
165
.................... ////      COM port.  This is a simple way to determine if the PC     //// 
165
.................... ////      COM port.  This is a simple way to determine if the PC     //// 
166
.................... ////      is ready to display data on a serial terminal program,     //// 
166
.................... ////      is ready to display data on a serial terminal program,     //// 
167
.................... ////      but is not garaunteed to work all the time or on other     //// 
167
.................... ////      but is not garaunteed to work all the time or on other     //// 
168
.................... ////      terminal programs.                                         //// 
168
.................... ////      terminal programs.                                         //// 
169
.................... ////                                                                 //// 
169
.................... ////                                                                 //// 
170
.................... //// usb_cdc_putc_fast(char c) - Similar to usb_cdc_putc(), except   //// 
170
.................... //// usb_cdc_putc_fast(char c) - Similar to usb_cdc_putc(), except   //// 
171
.................... ////      if the transmit buffer is full it will skip the char.      //// 
171
.................... ////      if the transmit buffer is full it will skip the char.      //// 
172
.................... ////                                                                 //// 
172
.................... ////                                                                 //// 
173
.................... //// usb_cdc_line_coding - A structure used for Set_Line_Coding and  //// 
173
.................... //// usb_cdc_line_coding - A structure used for Set_Line_Coding and  //// 
174
.................... ////       Get_Line_Coding.  Most of the time you can ignore this.   //// 
174
.................... ////       Get_Line_Coding.  Most of the time you can ignore this.   //// 
175
.................... ////                                                                 //// 
175
.................... ////                                                                 //// 
176
.................... //// usb_cdc_break - If the PC has sent a break command, this will   //// 
176
.................... //// usb_cdc_break - If the PC has sent a break command, this will   //// 
177
.................... ////       hold the break time (in milli-seconds).  If the PC sends  //// 
177
.................... ////       hold the break time (in milli-seconds).  If the PC sends  //// 
178
.................... ////       a value of 0xFFFF the device is supposed to hold the      //// 
178
.................... ////       a value of 0xFFFF the device is supposed to hold the      //// 
179
.................... ////       break until it sends a value of 0                         //// 
179
.................... ////       break until it sends a value of 0                         //// 
180
.................... ////                                                                 //// 
180
.................... ////                                                                 //// 
181
.................... //// usb_cdc_carrier - Where Set_Control_Line_State value is stored. //// 
181
.................... //// usb_cdc_carrier - Where Set_Control_Line_State value is stored. //// 
182
.................... ////       Of most relevance is the field dte_present, which is the  //// 
182
.................... ////       Of most relevance is the field dte_present, which is the  //// 
183
.................... ////       DTR setting.                                              //// 
183
.................... ////       DTR setting.                                              //// 
184
.................... ////                                                                 //// 
184
.................... ////                                                                 //// 
185
.................... //// The following functions are also provided, and are ports of the //// 
185
.................... //// The following functions are also provided, and are ports of the //// 
186
.................... //// I/O functions in input.c.  See input.c and the CCS manual for   //// 
186
.................... //// I/O functions in input.c.  See input.c and the CCS manual for   //// 
187
.................... //// documentation:                                                  //// 
187
.................... //// documentation:                                                  //// 
188
.................... ////   get_float_usb() - Read a float number from the user           //// 
188
.................... ////   get_float_usb() - Read a float number from the user           //// 
189
.................... ////   get_long_usb() - Read a long number from the user             //// 
189
.................... ////   get_long_usb() - Read a long number from the user             //// 
190
.................... ////   get_int_usb() - Read an integer number from the user          //// 
190
.................... ////   get_int_usb() - Read an integer number from the user          //// 
191
.................... ////   get_string_usb(char *s, int max) - Read a string from the user. //// 
191
.................... ////   get_string_usb(char *s, int max) - Read a string from the user. //// 
192
.................... ////   gethex_usb() - Read a byte, in HEX, from the user             //// 
192
.................... ////   gethex_usb() - Read a byte, in HEX, from the user             //// 
193
.................... ////   gethex1_usb() - Read a HEX character                          //// 
193
.................... ////   gethex1_usb() - Read a HEX character                          //// 
194
.................... ////                                                                 //// 
194
.................... ////                                                                 //// 
195
.................... //// This driver will load all the rest of the USB code, and a set   //// 
195
.................... //// This driver will load all the rest of the USB code, and a set   //// 
196
.................... //// of descriptors that will properly describe a CDC device for a   //// 
196
.................... //// of descriptors that will properly describe a CDC device for a   //// 
197
.................... //// virtual COM port (usb_desc_cdc.h)                               //// 
197
.................... //// virtual COM port (usb_desc_cdc.h)                               //// 
198
.................... ////                                                                 //// 
198
.................... ////                                                                 //// 
199
.................... //// An .INF file is provided (cdc_NTXP.inf) that will load the      //// 
199
.................... //// An .INF file is provided (cdc_NTXP.inf) that will load the      //// 
200
.................... //// standard CDC drivers for a virtual COM port in Windows          //// 
200
.................... //// standard CDC drivers for a virtual COM port in Windows          //// 
201
.................... //// NT/2000/XP and above.                                           //// 
201
.................... //// NT/2000/XP and above.                                           //// 
202
.................... ////                                                                 //// 
202
.................... ////                                                                 //// 
203
.................... ///////////////////////////////////////////////////////////////////////// 
203
.................... ///////////////////////////////////////////////////////////////////////// 
204
.................... ////                                                                 //// 
204
.................... ////                                                                 //// 
205
.................... //// VERSION HISTORY                                                 //// 
205
.................... //// VERSION HISTORY                                                 //// 
206
.................... ////                                                                 //// 
206
.................... ////                                                                 //// 
207
.................... //// March 5th, 2009:                                                //// 
207
.................... //// March 5th, 2009:                                                //// 
208
.................... ////   Cleanup for Wizard.                                           //// 
208
.................... ////   Cleanup for Wizard.                                           //// 
209
.................... ////   PIC24 Initial release.                                        //// 
209
.................... ////   PIC24 Initial release.                                        //// 
210
.................... ////                                                                 //// 
210
.................... ////                                                                 //// 
211
.................... //// Nov 26th, 2007:                                                 //// 
211
.................... //// Nov 26th, 2007:                                                 //// 
212
.................... ////              usb_cdc_put_buffer_free() should be more stable.   //// 
212
.................... ////              usb_cdc_put_buffer_free() should be more stable.   //// 
213
.................... ////              Fixed a hang-up that would happen if you sent      //// 
213
.................... ////              Fixed a hang-up that would happen if you sent      //// 
214
.................... ////                 exactly 64 bytes.                               //// 
214
.................... ////                 exactly 64 bytes.                               //// 
215
.................... ////                                                                 //// 
215
.................... ////                                                                 //// 
216
.................... //// Nov 6th, 2007:                                                  //// 
216
.................... //// Nov 6th, 2007:                                                  //// 
217
.................... ////              Compatabible with latest pic18_usb.h, which        //// 
217
.................... ////              Compatabible with latest pic18_usb.h, which        //// 
218
.................... ////                 reduces RAM footprint of USB driver.            //// 
218
.................... ////                 reduces RAM footprint of USB driver.            //// 
219
.................... ////              This driver now fits on 18F4450/2450 PICs.         //// 
219
.................... ////              This driver now fits on 18F4450/2450 PICs.         //// 
220
.................... ////                                                                 //// 
220
.................... ////                                                                 //// 
221
.................... //// October 27th, 2005: Changed the way incoming packets are        //// 
221
.................... //// October 27th, 2005: Changed the way incoming packets are        //// 
222
.................... ////               handled in that CDC driver will not flush         //// 
222
.................... ////               handled in that CDC driver will not flush         //// 
223
.................... ////               endpoint until user has handled all data.  This   //// 
223
.................... ////               endpoint until user has handled all data.  This   //// 
224
.................... ////               will prevent overflows as the USB will NAK        //// 
224
.................... ////               will prevent overflows as the USB will NAK        //// 
225
.................... ////               incoming packets until it is ready to receive     //// 
225
.................... ////               incoming packets until it is ready to receive     //// 
226
.................... ////               more.                                             //// 
226
.................... ////               more.                                             //// 
227
.................... ////            When using 18F4550 family, the RX buffer is          //// 
227
.................... ////            When using 18F4550 family, the RX buffer is          //// 
228
.................... ////               mapped directly to the endpoint buffer - this     //// 
228
.................... ////               mapped directly to the endpoint buffer - this     //// 
229
.................... ////               saves a chunk of RAM.                             //// 
229
.................... ////               saves a chunk of RAM.                             //// 
230
.................... ////            When using the 18F4550 family, you can increase      //// 
230
.................... ////            When using the 18F4550 family, you can increase      //// 
231
.................... ////               the TX and RX size over 64 bytes.                 //// 
231
.................... ////               the TX and RX size over 64 bytes.                 //// 
232
.................... ////            No longer send 0len packets in the TBE interrupt.    //// 
232
.................... ////            No longer send 0len packets in the TBE interrupt.    //// 
233
.................... ////            Hopefully fixed bugs that caused random crashes      //// 
233
.................... ////            Hopefully fixed bugs that caused random crashes      //// 
234
.................... ////               if you tried sending more than 64 bytes.          //// 
234
.................... ////               if you tried sending more than 64 bytes.          //// 
235
.................... ////                                                                 //// 
235
.................... ////                                                                 //// 
236
.................... //// July 6th, 2005: Global interrupts disabled when writing to TX   //// 
236
.................... //// July 6th, 2005: Global interrupts disabled when writing to TX   //// 
237
.................... ////                   buffer.                                       //// 
237
.................... ////                   buffer.                                       //// 
238
.................... ////                                                                 //// 
238
.................... ////                                                                 //// 
239
.................... //// July 1st, 2005: Initial Release.                                //// 
239
.................... //// July 1st, 2005: Initial Release.                                //// 
240
.................... ////                                                                 //// 
240
.................... ////                                                                 //// 
241
.................... ///////////////////////////////////////////////////////////////////////// 
241
.................... ///////////////////////////////////////////////////////////////////////// 
242
.................... ////        (C) Copyright 1996,2005 Custom Computer Services         //// 
242
.................... ////        (C) Copyright 1996,2005 Custom Computer Services         //// 
243
.................... //// This source code may only be used by licensed users of the CCS  //// 
243
.................... //// This source code may only be used by licensed users of the CCS  //// 
244
.................... //// C compiler.  This source code may only be distributed to other  //// 
244
.................... //// C compiler.  This source code may only be distributed to other  //// 
245
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
245
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
246
.................... //// reproduction or distribution is permitted without written       //// 
246
.................... //// reproduction or distribution is permitted without written       //// 
247
.................... //// permission.  Derivative programs created using this software    //// 
247
.................... //// permission.  Derivative programs created using this software    //// 
248
.................... //// in object code form are not restricted in any way.              //// 
248
.................... //// in object code form are not restricted in any way.              //// 
249
.................... ///////////////////////////////////////////////////////////////////////// 
249
.................... ///////////////////////////////////////////////////////////////////////// 
250
....................  
250
....................  
251
....................  
251
....................  
252
.................... //api for the user: 
252
.................... //api for the user: 
253
.................... #define usb_cdc_kbhit() (usb_cdc_get_buffer_status.got) 
253
.................... #define usb_cdc_kbhit() (usb_cdc_get_buffer_status.got) 
254
.................... #define usb_cdc_putready() (usb_cdc_put_buffer_nextin<USB_CDC_DATA_IN_SIZE) 
254
.................... #define usb_cdc_putready() (usb_cdc_put_buffer_nextin<USB_CDC_DATA_IN_SIZE) 
255
.................... #define usb_cdc_connected() (usb_cdc_got_set_line_coding) 
255
.................... #define usb_cdc_connected() (usb_cdc_got_set_line_coding) 
256
026E:  BCF    FF2.2
256
026E:  BCF    FF2.2
257
0270:  GOTO   0064
257
0270:  GOTO   0064
258
.................... void usb_cdc_putc_fast(char c); 
258
.................... void usb_cdc_putc_fast(char c); 
259
.................... char usb_cdc_getc(void); 
259
.................... char usb_cdc_getc(void); 
260
.................... void usb_cdc_putc(char c); 
260
.................... void usb_cdc_putc(char c); 
261
....................  
261
....................  
262
.................... //input.c ported to use CDC: 
262
.................... //input.c ported to use CDC: 
263
.................... float get_float_usb(); 
263
.................... float get_float_usb(); 
264
.................... signed long get_long_usb(); 
264
.................... signed long get_long_usb(); 
265
.................... signed int get_int_usb(); 
265
.................... signed int get_int_usb(); 
266
.................... void get_string_usb(char* s, unsigned int max); 
266
.................... void get_string_usb(char* s, unsigned int max); 
267
.................... BYTE gethex_usb(); 
267
.................... BYTE gethex_usb(); 
268
.................... BYTE gethex1_usb(); 
268
.................... BYTE gethex1_usb(); 
269
....................  
269
....................  
270
.................... //functions automatically called by USB handler code 
270
.................... //functions automatically called by USB handler code 
271
.................... void usb_isr_tkn_cdc(void); 
271
.................... void usb_isr_tkn_cdc(void); 
272
.................... void usb_cdc_init(void); 
272
.................... void usb_cdc_init(void); 
273
.................... void usb_isr_tok_out_cdc_control_dne(void); 
273
.................... void usb_isr_tok_out_cdc_control_dne(void); 
274
.................... void usb_isr_tok_in_cdc_data_dne(void); 
274
.................... void usb_isr_tok_in_cdc_data_dne(void); 
275
.................... void usb_isr_tok_out_cdc_data_dne(void); 
275
.................... void usb_isr_tok_out_cdc_data_dne(void); 
276
....................  
276
....................  
277
.................... void usb_cdc_flush_out_buffer(void); 
277
.................... void usb_cdc_flush_out_buffer(void); 
278
....................  
278
....................  
279
.................... ///////////////////////////////////////////////////////////////////////////// 
279
.................... ///////////////////////////////////////////////////////////////////////////// 
280
.................... // 
280
.................... // 
281
.................... // Include the CCS USB Libraries.  See the comments at the top of these 
281
.................... // Include the CCS USB Libraries.  See the comments at the top of these 
282
.................... // files for more information 
282
.................... // files for more information 
283
.................... // 
283
.................... // 
284
.................... ///////////////////////////////////////////////////////////////////////////// 
284
.................... ///////////////////////////////////////////////////////////////////////////// 
285
.................... #ifndef __USB_PIC_PERIF__ 
285
.................... #ifndef __USB_PIC_PERIF__ 
286
.................... #define __USB_PIC_PERIF__   1 
286
.................... #define __USB_PIC_PERIF__   1 
287
.................... #endif 
287
.................... #endif 
288
....................  
288
....................  
289
.................... #if __USB_PIC_PERIF__ 
289
.................... #if __USB_PIC_PERIF__ 
290
....................    #if defined(__PCH__) 
290
....................    #if defined(__PCH__) 
291
....................     #include <pic18_usb.h>   //Microchip 18Fxx5x hardware layer for usb.c 
291
....................     #include <pic18_usb.h>   //Microchip 18Fxx5x hardware layer for usb.c 
292
.................... ///////////////////////////////////////////////////////////////////////// 
292
.................... ///////////////////////////////////////////////////////////////////////// 
293
.................... ////                          pic18_usb.h                            //// 
293
.................... ////                          pic18_usb.h                            //// 
294
.................... ////                                                                 //// 
294
.................... ////                                                                 //// 
295
.................... //// Hardware layer for CCS's USB library.  This hardware layer      //// 
295
.................... //// Hardware layer for CCS's USB library.  This hardware layer      //// 
296
.................... //// supports the USB peripheral on the PIC18 family chips.  Current //// 
296
.................... //// supports the USB peripheral on the PIC18 family chips.  Current //// 
297
.................... //// supported families are:                                         //// 
297
.................... //// supported families are:                                         //// 
298
.................... ////     PIC18F2455/2550/4455/4550                                   //// 
298
.................... ////     PIC18F2455/2550/4455/4550                                   //// 
299
.................... ////     PIC18F2450/4450                                             //// 
299
.................... ////     PIC18F2450/4450                                             //// 
300
.................... ////     PIC18F2458/2553/4458/4553                                   //// 
300
.................... ////     PIC18F2458/2553/4458/4553                                   //// 
301
.................... ////     PIC18F13K50/14K50                                           //// 
301
.................... ////     PIC18F13K50/14K50                                           //// 
302
.................... ////     PIC18F65J50/66J50/66J55/67J50/85J50/86J50/86J55/87J50       //// 
302
.................... ////     PIC18F65J50/66J50/66J55/67J50/85J50/86J50/86J55/87J50       //// 
303
.................... ////                                                                 //// 
303
.................... ////                                                                 //// 
304
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H      //// 
304
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H      //// 
305
.................... //// for more documentation and a list of examples.                  //// 
305
.................... //// for more documentation and a list of examples.                  //// 
306
.................... ////                                                                 //// 
306
.................... ////                                                                 //// 
307
.................... //// See the section labeled EXTRA USER FUNCTIONS for functions      //// 
307
.................... //// See the section labeled EXTRA USER FUNCTIONS for functions      //// 
308
.................... //// that are specific to only this HW peripheral that you may       //// 
308
.................... //// that are specific to only this HW peripheral that you may       //// 
309
.................... //// find useful to use in your application.                         //// 
309
.................... //// find useful to use in your application.                         //// 
310
.................... ////                                                                 //// 
310
.................... ////                                                                 //// 
311
.................... ////   *********** NOTE ABOUT 18F2450/4450 LIMITATIONS **********    //// 
311
.................... ////   *********** NOTE ABOUT 18F2450/4450 LIMITATIONS **********    //// 
312
.................... ////  Due to the limited USB RAM of this family, a limitation of     //// 
312
.................... ////  Due to the limited USB RAM of this family, a limitation of     //// 
313
.................... ////  this driver is that there are only 3 endpoints (0, 1 and 2).   //// 
313
.................... ////  this driver is that there are only 3 endpoints (0, 1 and 2).   //// 
314
.................... ////  The HW actually supports more endpoints, but to simplify       //// 
314
.................... ////  The HW actually supports more endpoints, but to simplify       //// 
315
.................... ////  driver development this driver will only support the first 3   //// 
315
.................... ////  driver development this driver will only support the first 3   //// 
316
.................... ////  so there is an easier memory block to work with.               //// 
316
.................... ////  so there is an easier memory block to work with.               //// 
317
.................... ////                                                                 //// 
317
.................... ////                                                                 //// 
318
.................... ////  USB_MAX_EP0_PACKET_LENGTH will also be set to 8 regardless     //// 
318
.................... ////  USB_MAX_EP0_PACKET_LENGTH will also be set to 8 regardless     //// 
319
.................... ////  of USB speed, to save RAM.                                     //// 
319
.................... ////  of USB speed, to save RAM.                                     //// 
320
.................... ////                                                                 //// 
320
.................... ////                                                                 //// 
321
.................... ////   ************** NOTE ABOUT HW REQUIREMENTS ****************    //// 
321
.................... ////   ************** NOTE ABOUT HW REQUIREMENTS ****************    //// 
322
.................... ////  If you are not using internal pullups, you will need to put    //// 
322
.................... ////  If you are not using internal pullups, you will need to put    //// 
323
.................... ////  an internal pullup resistor on D+ or D+ depending on if you    //// 
323
.................... ////  an internal pullup resistor on D+ or D+ depending on if you    //// 
324
.................... ////  want to use slow speed or full speed.  This code configures    //// 
324
.................... ////  want to use slow speed or full speed.  This code configures    //// 
325
.................... ////  the device to use internal pullups, see usb_init() if you      //// 
325
.................... ////  the device to use internal pullups, see usb_init() if you      //// 
326
.................... ////  want to change that.                                           //// 
326
.................... ////  want to change that.                                           //// 
327
.................... ////                                                                 //// 
327
.................... ////                                                                 //// 
328
.................... ////  You need approximately 470nF cap on Vusb, even if you are      //// 
328
.................... ////  You need approximately 470nF cap on Vusb, even if you are      //// 
329
.................... ////  using the internal 3.3V USB regulator.                         //// 
329
.................... ////  using the internal 3.3V USB regulator.                         //// 
330
.................... ////                                                                 //// 
330
.................... ////                                                                 //// 
331
.................... ////  To run at full speed, you must use the oscillator              //// 
331
.................... ////  To run at full speed, you must use the oscillator              //// 
332
.................... ////  configuration (PLLx) to set the PLL divide to 4MHz.  You can   //// 
332
.................... ////  configuration (PLLx) to set the PLL divide to 4MHz.  You can   //// 
333
.................... ////  configure the MCU clock to any speed (up to 48MHz) but the     //// 
333
.................... ////  configure the MCU clock to any speed (up to 48MHz) but the     //// 
334
.................... ////  PLL must run at 4Mhz to provide the USB peripheral with a      //// 
334
.................... ////  PLL must run at 4Mhz to provide the USB peripheral with a      //// 
335
.................... ////  96MHz clock.  See the datasheet for details.                   //// 
335
.................... ////  96MHz clock.  See the datasheet for details.                   //// 
336
.................... ////                                                                 //// 
336
.................... ////                                                                 //// 
337
.................... ////  To run at slow speed you must configure your MCU to run at     //// 
337
.................... ////  To run at slow speed you must configure your MCU to run at     //// 
338
.................... ////  24Mhz.  See the datasheet for details.                         //// 
338
.................... ////  24Mhz.  See the datasheet for details.                         //// 
339
.................... ////                                                                 //// 
339
.................... ////                                                                 //// 
340
.................... ////   ****************  NOTE ABOUT INTERRUPTS  ******************   //// 
340
.................... ////   ****************  NOTE ABOUT INTERRUPTS  ******************   //// 
341
.................... //// This driver uses INT_USB.  It requires INT_USB to interrupt the //// 
341
.................... //// This driver uses INT_USB.  It requires INT_USB to interrupt the //// 
342
.................... //// PIC when an event has happened on the USB Bus.  Therfore        //// 
342
.................... //// PIC when an event has happened on the USB Bus.  Therfore        //// 
343
.................... //// this code enables interrupts.  A user modification can be made  //// 
343
.................... //// this code enables interrupts.  A user modification can be made  //// 
344
.................... //// to poll the USB interrupt flag instead of relying on an         //// 
344
.................... //// to poll the USB interrupt flag instead of relying on an         //// 
345
.................... //// interrupt.                                                      //// 
345
.................... //// interrupt.                                                      //// 
346
.................... ////                                                                 //// 
346
.................... ////                                                                 //// 
347
.................... ///////////////////////////////////////////////////////////////////////// 
347
.................... ///////////////////////////////////////////////////////////////////////// 
348
.................... ////                                                                 //// 
348
.................... ////                                                                 //// 
349
.................... //// Version History:                                                //// 
349
.................... //// Version History:                                                //// 
350
.................... ////                                                                 //// 
350
.................... ////                                                                 //// 
351
.................... //// March 5th, 2009:                                                //// 
351
.................... //// March 5th, 2009:                                                //// 
352
.................... ////   18F14K50 family added.                                        //// 
352
.................... ////   18F14K50 family added.                                        //// 
353
.................... ////   Cleanup for Wizard.                                           //// 
353
.................... ////   Cleanup for Wizard.                                           //// 
354
.................... ////   PIC24 Initial release.                                        //// 
354
.................... ////   PIC24 Initial release.                                        //// 
355
.................... ////                                                                 //// 
355
.................... ////                                                                 //// 
356
.................... //// Nov 3rd, 2008:                                                  //// 
356
.................... //// Nov 3rd, 2008:                                                  //// 
357
.................... ////  * 4553 family added.                                           //// 
357
.................... ////  * 4553 family added.                                           //// 
358
.................... ////                                                                 //// 
358
.................... ////                                                                 //// 
359
.................... //// Dec 18, 2007:                                                   //// 
359
.................... //// Dec 18, 2007:                                                   //// 
360
.................... ////  * usb_kbhit() moved to device driver.                          //// 
360
.................... ////  * usb_kbhit() moved to device driver.                          //// 
361
.................... ////  * USB Token handler changed to workaround a flaw in the USB    //// 
361
.................... ////  * USB Token handler changed to workaround a flaw in the USB    //// 
362
.................... ////     peripheral to prevent the USB peripheral from               //// 
362
.................... ////     peripheral to prevent the USB peripheral from               //// 
363
.................... ////     inadvertantly STALLing the endpoint.  Happened most often   //// 
363
.................... ////     inadvertantly STALLing the endpoint.  Happened most often   //// 
364
.................... ////     in bulk demo applications, especially CDC.                  //// 
364
.................... ////     in bulk demo applications, especially CDC.                  //// 
365
.................... ////                                                                 //// 
365
.................... ////                                                                 //// 
366
.................... ////   11-6-07:  Fixed a bug where usb_data_buffer[] was reserving   //// 
366
.................... ////   11-6-07:  Fixed a bug where usb_data_buffer[] was reserving   //// 
367
.................... ////                 too much RAM.                                   //// 
367
.................... ////                 too much RAM.                                   //// 
368
.................... ////             USB_MAX_EP0_PACKET_LENGTH value can be overwritten. ////  
368
.................... ////             USB_MAX_EP0_PACKET_LENGTH value can be overwritten. ////  
369
.................... ////                 For the 18F4450/2450 family this should be 8    //// 
369
.................... ////                 For the 18F4450/2450 family this should be 8    //// 
370
.................... ////                 because of limited RAM.  Reducing this value    ////  
370
.................... ////                 because of limited RAM.  Reducing this value    ////  
371
.................... ////                 frees RAM for application.                      //// 
371
.................... ////                 frees RAM for application.                      //// 
372
.................... ////             Based upon which endpoints have been configured for //// 
372
.................... ////             Based upon which endpoints have been configured for //// 
373
.................... ////                 use, will free up unused USB data RAM for       //// 
373
.................... ////                 use, will free up unused USB data RAM for       //// 
374
.................... ////                 application dynamically.  This should free up   //// 
374
.................... ////                 application dynamically.  This should free up   //// 
375
.................... ////                 at least 128 bytes of RAM.                      //// 
375
.................... ////                 at least 128 bytes of RAM.                      //// 
376
.................... ////             CDC now fits on a 18F4450/2450                      //// 
376
.................... ////             CDC now fits on a 18F4450/2450                      //// 
377
.................... ////                                                                 //// 
377
.................... ////                                                                 //// 
378
.................... ////   09-19-07: Fixed problems with 18F4450 family.                 //// 
378
.................... ////   09-19-07: Fixed problems with 18F4450 family.                 //// 
379
.................... ////                                                                 //// 
379
.................... ////                                                                 //// 
380
.................... ////   07-17-07: Added 18F4450,2450 support                          //// 
380
.................... ////   07-17-07: Added 18F4450,2450 support                          //// 
381
.................... ////                                                                 //// 
381
.................... ////                                                                 //// 
382
.................... ////   07-13-07: Added 87J50 family support                          //// 
382
.................... ////   07-13-07: Added 87J50 family support                          //// 
383
.................... ////                                                                 //// 
383
.................... ////                                                                 //// 
384
.................... ////   11-01-05: usb_detach(), usb_attach() and usb_init_cs()        //// 
384
.................... ////   11-01-05: usb_detach(), usb_attach() and usb_init_cs()        //// 
385
.................... ////               changed for the better.                           //// 
385
.................... ////               changed for the better.                           //// 
386
.................... ////                                                                 //// 
386
.................... ////                                                                 //// 
387
.................... ////   10-28-05: Added usb_rx_packet_size()                          //// 
387
.................... ////   10-28-05: Added usb_rx_packet_size()                          //// 
388
.................... ////                                                                 //// 
388
.................... ////                                                                 //// 
389
.................... ////   07-13-05: usb_put_packet() changed for 16bit packet sizes     //// 
389
.................... ////   07-13-05: usb_put_packet() changed for 16bit packet sizes     //// 
390
.................... ////             usb_flush_in() changed for 16bit packet sizes       //// 
390
.................... ////             usb_flush_in() changed for 16bit packet sizes       //// 
391
.................... ////             usb_get_packet() changed for 16bit packet sizes     //// 
391
.................... ////             usb_get_packet() changed for 16bit packet sizes     //// 
392
.................... ////             usb_flush_out() changed for 16bit packet sizes      //// 
392
.................... ////             usb_flush_out() changed for 16bit packet sizes      //// 
393
.................... ////             usb_set_configured() changed for 16bit packet sizes //// 
393
.................... ////             usb_set_configured() changed for 16bit packet sizes //// 
394
.................... ////                                                                 //// 
394
.................... ////                                                                 //// 
395
.................... ////   06-30-05: usb_tbe() added                                     //// 
395
.................... ////   06-30-05: usb_tbe() added                                     //// 
396
.................... ////             The way endpoint 0 DTS is set has been changed.     //// 
396
.................... ////             The way endpoint 0 DTS is set has been changed.     //// 
397
.................... ////                                                                 //// 
397
.................... ////                                                                 //// 
398
.................... ////   06-20-05: Initial Release                                     //// 
398
.................... ////   06-20-05: Initial Release                                     //// 
399
.................... ////                                                                 //// 
399
.................... ////                                                                 //// 
400
.................... ////   05-13-05: Beta Release (Full Speed works)                     //// 
400
.................... ////   05-13-05: Beta Release (Full Speed works)                     //// 
401
.................... ////                                                                 //// 
401
.................... ////                                                                 //// 
402
.................... ////   03-21-05: Initial Alpha Release                               //// 
402
.................... ////   03-21-05: Initial Alpha Release                               //// 
403
.................... ////                                                                 //// 
403
.................... ////                                                                 //// 
404
.................... ///////////////////////////////////////////////////////////////////////// 
404
.................... ///////////////////////////////////////////////////////////////////////// 
405
.................... ////        (C) Copyright 1996,2005 Custom Computer Services         //// 
405
.................... ////        (C) Copyright 1996,2005 Custom Computer Services         //// 
406
.................... //// This source code may only be used by licensed users of the CCS  //// 
406
.................... //// This source code may only be used by licensed users of the CCS  //// 
407
.................... //// C compiler.  This source code may only be distributed to other  //// 
407
.................... //// C compiler.  This source code may only be distributed to other  //// 
408
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
408
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
409
.................... //// reproduction or distribution is permitted without written       //// 
409
.................... //// reproduction or distribution is permitted without written       //// 
410
.................... //// permission.  Derivative programs created using this software    //// 
410
.................... //// permission.  Derivative programs created using this software    //// 
411
.................... //// in object code form are not restricted in any way.              //// 
411
.................... //// in object code form are not restricted in any way.              //// 
412
.................... ///////////////////////////////////////////////////////////////////////// 
412
.................... ///////////////////////////////////////////////////////////////////////// 
413
....................  
413
....................  
414
.................... #IFNDEF __PIC18_USB_H__ 
414
.................... #IFNDEF __PIC18_USB_H__ 
415
.................... #DEFINE __PIC18_USB_H__ 
415
.................... #DEFINE __PIC18_USB_H__ 
416
....................  
416
....................  
417
.................... #DEFINE __USB_HARDWARE__ 
417
.................... #DEFINE __USB_HARDWARE__ 
418
....................  
418
....................  
419
.................... //let the USB Stack know that we are using a PIC with internal USB peripheral 
419
.................... //let the USB Stack know that we are using a PIC with internal USB peripheral 
420
.................... #DEFINE __PIC__   1 
420
.................... #DEFINE __PIC__   1 
421
....................  
421
....................  
422
.................... #ifndef USB_USE_FULL_SPEED 
422
.................... #ifndef USB_USE_FULL_SPEED 
423
....................  #define USB_USE_FULL_SPEED   TRUE 
423
....................  #define USB_USE_FULL_SPEED   TRUE 
424
.................... #endif 
424
.................... #endif 
425
....................  
425
....................  
426
.................... #ifndef USB_MAX_EP0_PACKET_LENGTH 
426
.................... #ifndef USB_MAX_EP0_PACKET_LENGTH 
427
.................... #if ((getenv("DEVICE")=="PIC18F2450") || (getenv("DEVICE")=="PIC18F4450")) 
427
.................... #if ((getenv("DEVICE")=="PIC18F2450") || (getenv("DEVICE")=="PIC18F4450")) 
428
....................    //due to limited ram, force max packet length to 8 for this chip 
428
....................    //due to limited ram, force max packet length to 8 for this chip 
429
....................    #define USB_MAX_EP0_PACKET_LENGTH   8 
429
....................    #define USB_MAX_EP0_PACKET_LENGTH   8 
430
.................... #else 
430
.................... #else 
431
....................    #if USB_USE_FULL_SPEED==FALSE 
431
....................    #if USB_USE_FULL_SPEED==FALSE 
432
....................       //slow speed requires 8byte max packet size for endpoint 0 
432
....................       //slow speed requires 8byte max packet size for endpoint 0 
433
....................       #DEFINE USB_MAX_EP0_PACKET_LENGTH   8 
433
....................       #DEFINE USB_MAX_EP0_PACKET_LENGTH   8 
434
....................    #else 
434
....................    #else 
435
....................       //for full speed you can still use 8bytes, but 64 will be faster 
435
....................       //for full speed you can still use 8bytes, but 64 will be faster 
436
....................       #DEFINE USB_MAX_EP0_PACKET_LENGTH   64 
436
....................       #DEFINE USB_MAX_EP0_PACKET_LENGTH   64 
437
....................    #endif 
437
....................    #endif 
438
.................... #endif 
438
.................... #endif 
439
.................... #endif 
439
.................... #endif 
440
....................  
440
....................  
441
.................... #if (!USB_USE_FULL_SPEED && (USB_MAX_EP0_PACKET_LENGTH!=8)) 
441
.................... #if (!USB_USE_FULL_SPEED && (USB_MAX_EP0_PACKET_LENGTH!=8)) 
442
....................  #error Slow speed devices must use a max packet size of 8 for endpoint 0! 
442
....................  #error Slow speed devices must use a max packet size of 8 for endpoint 0! 
443
.................... #endif 
443
.................... #endif 
444
....................  
444
....................  
445
.................... #if USB_MAX_EP0_PACKET_LENGTH < 8 
445
.................... #if USB_MAX_EP0_PACKET_LENGTH < 8 
446
....................  #error Max Endpoint 0 length can't be less than 8! 
446
....................  #error Max Endpoint 0 length can't be less than 8! 
447
.................... #endif 
447
.................... #endif 
448
....................  
448
....................  
449
.................... #if USB_MAX_EP0_PACKET_LENGTH > 64 
449
.................... #if USB_MAX_EP0_PACKET_LENGTH > 64 
450
....................  #error Max Endpoint 0 length can't be greater than 64! 
450
....................  #error Max Endpoint 0 length can't be greater than 64! 
451
.................... #endif 
451
.................... #endif 
452
....................  
452
....................  
453
.................... #include <usb_hw_layer.h> 
453
.................... #include <usb_hw_layer.h> 
454
.................... /////////////////////////////////////////////////////////////////////////// 
454
.................... /////////////////////////////////////////////////////////////////////////// 
455
.................... ////                         usb_hw_layer.h                            //// 
455
.................... ////                         usb_hw_layer.h                            //// 
456
.................... ////                                                                   //// 
456
.................... ////                                                                   //// 
457
.................... //// HW Layer for the USB Stack.                                       //// 
457
.................... //// HW Layer for the USB Stack.                                       //// 
458
.................... ////                                                                   //// 
458
.................... ////                                                                   //// 
459
.................... //// HW drivers for the USB stack must support this API.               //// 
459
.................... //// HW drivers for the USB stack must support this API.               //// 
460
.................... ////                                                                   //// 
460
.................... ////                                                                   //// 
461
.................... //// The HW driver must also have a token handler that will call       //// 
461
.................... //// The HW driver must also have a token handler that will call       //// 
462
.................... //// usb_token_reset() when the device is init/reset, will call        //// 
462
.................... //// usb_token_reset() when the device is init/reset, will call        //// 
463
.................... //// usb_isr_tok_setup_dne() when it receives a setup packet,          //// 
463
.................... //// usb_isr_tok_setup_dne() when it receives a setup packet,          //// 
464
.................... //// will call usb_isr_tok_out_dne() when a new packet is received,    //// 
464
.................... //// will call usb_isr_tok_out_dne() when a new packet is received,    //// 
465
.................... //// and will call usb_isr_tok_in_dne() when a new packet is sent.     //// 
465
.................... //// and will call usb_isr_tok_in_dne() when a new packet is sent.     //// 
466
.................... //// See usb.h for documentation of these functions.                   //// 
466
.................... //// See usb.h for documentation of these functions.                   //// 
467
.................... ////                                                                   //// 
467
.................... ////                                                                   //// 
468
.................... /////////////////////////////////////////////////////////////////////////// 
468
.................... /////////////////////////////////////////////////////////////////////////// 
469
.................... ////                                                                   //// 
469
.................... ////                                                                   //// 
470
.................... //// Version History:                                                  //// 
470
.................... //// Version History:                                                  //// 
471
.................... ////                                                                   //// 
471
.................... ////                                                                   //// 
472
.................... //// March 5th, 2009:                                                  //// 
472
.................... //// March 5th, 2009:                                                  //// 
473
.................... ////   Cleanup for Wizard.                                             //// 
473
.................... ////   Cleanup for Wizard.                                             //// 
474
.................... ////   PIC24 Initial release.                                          //// 
474
.................... ////   PIC24 Initial release.                                          //// 
475
.................... ////                                                                   //// 
475
.................... ////                                                                   //// 
476
.................... /////////////////////////////////////////////////////////////////////////// 
476
.................... /////////////////////////////////////////////////////////////////////////// 
477
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
477
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
478
.................... //// This source code may only be used by licensed users of the CCS    //// 
478
.................... //// This source code may only be used by licensed users of the CCS    //// 
479
.................... //// C compiler.  This source code may only be distributed to other    //// 
479
.................... //// C compiler.  This source code may only be distributed to other    //// 
480
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
480
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
481
.................... //// reproduction or distribution is permitted without written         //// 
481
.................... //// reproduction or distribution is permitted without written         //// 
482
.................... //// permission.  Derivative programs created using this software      //// 
482
.................... //// permission.  Derivative programs created using this software      //// 
483
.................... //// in object code form are not restricted in any way.                //// 
483
.................... //// in object code form are not restricted in any way.                //// 
484
.................... /////////////////////////////////////////////////////////////////////////// 
484
.................... /////////////////////////////////////////////////////////////////////////// 
485
....................  
485
....................  
486
.................... #ifndef __USB_HW_LAYER_H__ 
486
.................... #ifndef __USB_HW_LAYER_H__ 
487
.................... #define __USB_HW_LAYER_H__ 
487
.................... #define __USB_HW_LAYER_H__ 
488
....................  
488
....................  
489
.................... enum USB_DTS_BIT {USB_DTS_DATA1=1, USB_DTS_TOGGLE=2, USB_DTS_DATA0=0, 
489
.................... enum USB_DTS_BIT {USB_DTS_DATA1=1, USB_DTS_TOGGLE=2, USB_DTS_DATA0=0, 
490
....................                    USB_DTS_STALL=3, USB_DTS_USERX=4}; 
490
....................                    USB_DTS_STALL=3, USB_DTS_USERX=4}; 
491
....................  
491
....................  
492
....................  
492
....................  
493
.................... // USER LEVEL FUNCTIONS: 
493
.................... // USER LEVEL FUNCTIONS: 
494
....................  
494
....................  
495
.................... /***************************************************************************** 
495
.................... /***************************************************************************** 
496
.................... /* usb_init() 
496
.................... /* usb_init() 
497
.................... /* 
497
.................... /* 
498
.................... /* Summary: See API section of USB.H for documentation. 
498
.................... /* Summary: See API section of USB.H for documentation. 
499
.................... /* 
499
.................... /* 
500
.................... /*****************************************************************************/ 
500
.................... /*****************************************************************************/ 
501
.................... void usb_init(void); 
501
.................... void usb_init(void); 
502
....................  
502
....................  
503
.................... /***************************************************************************** 
503
.................... /***************************************************************************** 
504
.................... /* usb_init_cs() 
504
.................... /* usb_init_cs() 
505
.................... /* 
505
.................... /* 
506
.................... /* Summary: See API section of USB.H for documentation. 
506
.................... /* Summary: See API section of USB.H for documentation. 
507
.................... /* 
507
.................... /* 
508
.................... /*****************************************************************************/ 
508
.................... /*****************************************************************************/ 
509
.................... void usb_init_cs(void); 
509
.................... void usb_init_cs(void); 
510
....................  
510
....................  
511
.................... /***************************************************************************** 
511
.................... /***************************************************************************** 
512
.................... /* usb_task() 
512
.................... /* usb_task() 
513
.................... /* 
513
.................... /* 
514
.................... /* Summary: See API section of USB.H for documentation. 
514
.................... /* Summary: See API section of USB.H for documentation. 
515
.................... /* 
515
.................... /* 
516
.................... /*****************************************************************************/ 
516
.................... /*****************************************************************************/ 
517
.................... void usb_task(void); 
517
.................... void usb_task(void); 
518
....................  
518
....................  
519
.................... /****************************************************************************** 
519
.................... /****************************************************************************** 
520
.................... /* usb_attach() 
520
.................... /* usb_attach() 
521
.................... /* 
521
.................... /* 
522
.................... /* Summary: Attach the D+/D- lines to the USB bus.  Enable the USB peripheral. 
522
.................... /* Summary: Attach the D+/D- lines to the USB bus.  Enable the USB peripheral. 
523
.................... /* 
523
.................... /* 
524
.................... /* You should wait until UCON_SE0 is clear before enabling reset/idle interrupt. 
524
.................... /* You should wait until UCON_SE0 is clear before enabling reset/idle interrupt. 
525
.................... /*  
525
.................... /*  
526
.................... /* Shouldn't be called by user, let usb_task() handle this. 
526
.................... /* Shouldn't be called by user, let usb_task() handle this. 
527
.................... /* 
527
.................... /* 
528
.................... /* NOTE: If you are writing a new HW driver, this routine should call  
528
.................... /* NOTE: If you are writing a new HW driver, this routine should call  
529
.................... /*       usb_token_reset() to reset the CH9 stack. 
529
.................... /*       usb_token_reset() to reset the CH9 stack. 
530
.................... /* 
530
.................... /* 
531
.................... /*****************************************************************************/ 
531
.................... /*****************************************************************************/ 
532
.................... void usb_attach(void); 
532
.................... void usb_attach(void); 
533
....................  
533
....................  
534
.................... /****************************************************************************** 
534
.................... /****************************************************************************** 
535
.................... /* usb_detach() 
535
.................... /* usb_detach() 
536
.................... /* 
536
.................... /* 
537
.................... /* Summary: Remove the D+/D- lines from the USB bus.  Basically, disable USB. 
537
.................... /* Summary: Remove the D+/D- lines from the USB bus.  Basically, disable USB. 
538
.................... /* 
538
.................... /* 
539
.................... /* Shouldn't be called by user, let usb_task() handle this. 
539
.................... /* Shouldn't be called by user, let usb_task() handle this. 
540
.................... /* 
540
.................... /* 
541
.................... /* If the user does call this function while USB is connected, the USB  
541
.................... /* If the user does call this function while USB is connected, the USB  
542
.................... /* peripheral will be disabled only momentarily because usb_task() will 
542
.................... /* peripheral will be disabled only momentarily because usb_task() will 
543
.................... /* reconnect.  But this is a great way to cause the PC/HOST to cause a USB 
543
.................... /* reconnect.  But this is a great way to cause the PC/HOST to cause a USB 
544
.................... /* reset of the device. 
544
.................... /* reset of the device. 
545
.................... /* 
545
.................... /* 
546
.................... /* NOTE: If you are writing a new HW driver, this routine should call  
546
.................... /* NOTE: If you are writing a new HW driver, this routine should call  
547
.................... /*       usb_token_reset() to reset the CH9 stack. 
547
.................... /*       usb_token_reset() to reset the CH9 stack. 
548
.................... /* 
548
.................... /* 
549
.................... /*****************************************************************************/ 
549
.................... /*****************************************************************************/ 
550
.................... void usb_detach(void); 
550
.................... void usb_detach(void); 
551
....................  
551
....................  
552
.................... /****************************************************************************** 
552
.................... /****************************************************************************** 
553
.................... /* usb_put_packet() 
553
.................... /* usb_put_packet() 
554
.................... /* 
554
.................... /* 
555
.................... /* Input: endpoint - endpoint to send packet to (0..15). 
555
.................... /* Input: endpoint - endpoint to send packet to (0..15). 
556
.................... /*        ptr - points to data to send. 
556
.................... /*        ptr - points to data to send. 
557
.................... /*        len - amount of data to send. 
557
.................... /*        len - amount of data to send. 
558
.................... /*        toggle - whether to send data with a DATA0 pid, a DATA1 pid,  
558
.................... /*        toggle - whether to send data with a DATA0 pid, a DATA1 pid,  
559
.................... /*                 or toggle from the last DATAx pid. 
559
.................... /*                 or toggle from the last DATAx pid. 
560
.................... /* 
560
.................... /* 
561
.................... /* Output: TRUE if data was sent correctly, FALSE if it was not.  The only  
561
.................... /* Output: TRUE if data was sent correctly, FALSE if it was not.  The only  
562
.................... /*         reason it will return FALSE is if because the TX buffer is still full  
562
.................... /*         reason it will return FALSE is if because the TX buffer is still full  
563
.................... /*         from the last time it tried to send a packet. 
563
.................... /*         from the last time it tried to send a packet. 
564
.................... /* 
564
.................... /* 
565
.................... /* Summary: Sends one packet out the EP to the host.  Notice that there is a  
565
.................... /* Summary: Sends one packet out the EP to the host.  Notice that there is a  
566
.................... /*          difference between a packet and a message.  If you wanted to send a  
566
.................... /*          difference between a packet and a message.  If you wanted to send a  
567
.................... /*          512 byte message on an endpoint that only supported 64 byte packets, 
567
.................... /*          512 byte message on an endpoint that only supported 64 byte packets, 
568
.................... /*          this would be accomplished this by sending 8 64-byte packets,  
568
.................... /*          this would be accomplished this by sending 8 64-byte packets,  
569
.................... /*          followed by a 0 length packet.  If the last (or only packet) being  
569
.................... /*          followed by a 0 length packet.  If the last (or only packet) being  
570
.................... /*          sent is less than the max packet size defined in your descriptor  
570
.................... /*          sent is less than the max packet size defined in your descriptor  
571
.................... /*          then you do not need to send a 0 length packet to identify 
571
.................... /*          then you do not need to send a 0 length packet to identify 
572
.................... /*          an end of message. 
572
.................... /*          an end of message. 
573
.................... /* 
573
.................... /* 
574
.................... /*          usb_puts() (provided in usb.c) will send a multi-packet message  
574
.................... /*          usb_puts() (provided in usb.c) will send a multi-packet message  
575
.................... /*          correctly and know if a 0 lenght packet needs to be sent. 
575
.................... /*          correctly and know if a 0 lenght packet needs to be sent. 
576
.................... /* 
576
.................... /* 
577
.................... /* The result will be invalid if the specified input has not been configured for 
577
.................... /* The result will be invalid if the specified input has not been configured for 
578
.................... /* use by the API with USB_EPx_TX_SIZE 
578
.................... /* use by the API with USB_EPx_TX_SIZE 
579
.................... /* 
579
.................... /* 
580
.................... /*****************************************************************************/ 
580
.................... /*****************************************************************************/ 
581
.................... int1 usb_put_packet(int8 endpoint, int8 * ptr, unsigned int16 len, USB_DTS_BIT tgl); 
581
.................... int1 usb_put_packet(int8 endpoint, int8 * ptr, unsigned int16 len, USB_DTS_BIT tgl); 
582
....................  
582
....................  
583
.................... /******************************************************************************* 
583
.................... /******************************************************************************* 
584
.................... /* usb_get_packet(endpoint, *ptr, max) 
584
.................... /* usb_get_packet(endpoint, *ptr, max) 
585
.................... /* 
585
.................... /* 
586
.................... /* Input: endpoint - endpoint to get data from 
586
.................... /* Input: endpoint - endpoint to get data from 
587
.................... /*        ptr - where to save data to local PIC RAM 
587
.................... /*        ptr - where to save data to local PIC RAM 
588
.................... /*        max - max amount of data to receive from buffer 
588
.................... /*        max - max amount of data to receive from buffer 
589
.................... /* 
589
.................... /* 
590
.................... /* Output: the amount of data taken from the buffer and saved to ptr. 
590
.................... /* Output: the amount of data taken from the buffer and saved to ptr. 
591
.................... /* 
591
.................... /* 
592
.................... /*         NOTE - IF THERE IS NO PACKET TO GET YOU WILL GET INVALID RESULTS! 
592
.................... /*         NOTE - IF THERE IS NO PACKET TO GET YOU WILL GET INVALID RESULTS! 
593
.................... /*                VERIFY WITH USB_KBHIT() BEFORE YOU CALL USB_GET_PACKET()! 
593
.................... /*                VERIFY WITH USB_KBHIT() BEFORE YOU CALL USB_GET_PACKET()! 
594
.................... /* 
594
.................... /* 
595
.................... /* Summary: Gets a packet of data from the USB endpoint buffer. 
595
.................... /* Summary: Gets a packet of data from the USB endpoint buffer. 
596
.................... /*          Until this is called, if there is data in the receive buffer the 
596
.................... /*          Until this is called, if there is data in the receive buffer the 
597
.................... /*          PC/HOST will be prevented from sending more data.  Upon completion 
597
.................... /*          PC/HOST will be prevented from sending more data.  Upon completion 
598
.................... /*          of this call, the endpoint will be freed and the PC/HOST will be 
598
.................... /*          of this call, the endpoint will be freed and the PC/HOST will be 
599
.................... /*          allowed to send a new packet.  Only receives one packet, if you need  
599
.................... /*          allowed to send a new packet.  Only receives one packet, if you need  
600
.................... /*          to receive multiple packets or handle 0-length terminator packets, 
600
.................... /*          to receive multiple packets or handle 0-length terminator packets, 
601
.................... /*          then use usb_gets(). 
601
.................... /*          then use usb_gets(). 
602
.................... /* 
602
.................... /* 
603
.................... /* The result will be invalid if the specified input has not been configured for 
603
.................... /* The result will be invalid if the specified input has not been configured for 
604
.................... /* use by the API with USB_EPx_RX_SIZE 
604
.................... /* use by the API with USB_EPx_RX_SIZE 
605
.................... /* 
605
.................... /* 
606
.................... /********************************************************************************/ 
606
.................... /********************************************************************************/ 
607
.................... unsigned int16 usb_get_packet(int8 endpoint, int8 * ptr, unsigned int16 max); 
607
.................... unsigned int16 usb_get_packet(int8 endpoint, int8 * ptr, unsigned int16 max); 
608
....................  
608
....................  
609
.................... /**************************************************************************** 
609
.................... /**************************************************************************** 
610
.................... /* usb_kbhit(endpoint) 
610
.................... /* usb_kbhit(endpoint) 
611
.................... /* 
611
.................... /* 
612
.................... /* Input: endpoint - endpoint to check (0..15) 
612
.................... /* Input: endpoint - endpoint to check (0..15) 
613
.................... /* 
613
.................... /* 
614
.................... /* Output: TRUE if there is new data in RX buffer, FALSE if there is not. 
614
.................... /* Output: TRUE if there is new data in RX buffer, FALSE if there is not. 
615
.................... /* 
615
.................... /* 
616
.................... /* Summary: Similar to kbhit(), sees if there is new data in the RX USB buffers. 
616
.................... /* Summary: Similar to kbhit(), sees if there is new data in the RX USB buffers. 
617
.................... /*          See API section of USB.H for more information. 
617
.................... /*          See API section of USB.H for more information. 
618
.................... /* 
618
.................... /* 
619
.................... /* The result will be invalid if the specified input has not been configured for 
619
.................... /* The result will be invalid if the specified input has not been configured for 
620
.................... /* use by the API with USB_EPx_RX_SIZE 
620
.................... /* use by the API with USB_EPx_RX_SIZE 
621
.................... /* 
621
.................... /* 
622
.................... /*****************************************************************************/ 
622
.................... /*****************************************************************************/ 
623
.................... int1 usb_kbhit(int8 en); 
623
.................... int1 usb_kbhit(int8 en); 
624
....................  
624
....................  
625
.................... /****************************************************************************** 
625
.................... /****************************************************************************** 
626
.................... /* usb_tbe(endpoint) 
626
.................... /* usb_tbe(endpoint) 
627
.................... /* 
627
.................... /* 
628
.................... /* Input: endpoint - endpoint to check 
628
.................... /* Input: endpoint - endpoint to check 
629
.................... /*        ptr - where to save data to local PIC RAM 
629
.................... /*        ptr - where to save data to local PIC RAM 
630
.................... /*        max - max amount of data to receive from buffer 
630
.................... /*        max - max amount of data to receive from buffer 
631
.................... /* 
631
.................... /* 
632
.................... /* Output: returns TRUE if this endpoint's IN buffer (PIC-PC) is empty and ready 
632
.................... /* Output: returns TRUE if this endpoint's IN buffer (PIC-PC) is empty and ready 
633
.................... /*         returns FALSE if this endpoint's IN buffer is still processing the last 
633
.................... /*         returns FALSE if this endpoint's IN buffer is still processing the last 
634
.................... /*         transmit or if this endpoint is invalid. 
634
.................... /*         transmit or if this endpoint is invalid. 
635
.................... /* 
635
.................... /* 
636
.................... /* The result will be invalid if the specified input has not been configured for 
636
.................... /* The result will be invalid if the specified input has not been configured for 
637
.................... /* use by the API with USB_EPx_TX_SIZE 
637
.................... /* use by the API with USB_EPx_TX_SIZE 
638
.................... /* 
638
.................... /* 
639
.................... /*****************************************************************************/ 
639
.................... /*****************************************************************************/ 
640
.................... int1 usb_tbe(int8 en); 
640
.................... int1 usb_tbe(int8 en); 
641
....................  
641
....................  
642
.................... //////////////// END USER LEVEL FUNCTIONS ///////////////////////////////////// 
642
.................... //////////////// END USER LEVEL FUNCTIONS ///////////////////////////////////// 
643
....................  
643
....................  
644
....................  
644
....................  
645
.................... /// 
645
.................... /// 
646
.................... /// BEGIN STACK LEVEL FUNCTIONS: These functions are meant to be called by 
646
.................... /// BEGIN STACK LEVEL FUNCTIONS: These functions are meant to be called by 
647
.................... ///            the USB stack, and are not meant to be called by the  
647
.................... ///            the USB stack, and are not meant to be called by the  
648
.................... ///            user/application. 
648
.................... ///            user/application. 
649
.................... /// 
649
.................... /// 
650
....................  
650
....................  
651
.................... /***************************************************************************** 
651
.................... /***************************************************************************** 
652
.................... /* usb_stall_ep() 
652
.................... /* usb_stall_ep() 
653
.................... /* 
653
.................... /* 
654
.................... /* Input: endpoint - endpoint to stall. 
654
.................... /* Input: endpoint - endpoint to stall. 
655
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
655
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
656
.................... /* 
656
.................... /* 
657
.................... /* Summary: Stalls specified endpoint.  If endpoint is stalled it will 
657
.................... /* Summary: Stalls specified endpoint.  If endpoint is stalled it will 
658
.................... /*          send STALL packet if the host tries to access this endpoint's  
658
.................... /*          send STALL packet if the host tries to access this endpoint's  
659
.................... /*          buffer. 
659
.................... /*          buffer. 
660
.................... /* 
660
.................... /* 
661
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
661
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
662
.................... /*       CALLING THIS ROUTINE. 
662
.................... /*       CALLING THIS ROUTINE. 
663
.................... /* 
663
.................... /* 
664
.................... /*****************************************************************************/ 
664
.................... /*****************************************************************************/ 
665
.................... void usb_stall_ep(int8 endpoint); 
665
.................... void usb_stall_ep(int8 endpoint); 
666
....................  
666
....................  
667
....................  
667
....................  
668
.................... /***************************************************************************** 
668
.................... /***************************************************************************** 
669
.................... /* usb_unstall_ep(endpoint, direction) 
669
.................... /* usb_unstall_ep(endpoint, direction) 
670
.................... /* 
670
.................... /* 
671
.................... /* Input: endpoint - endpoint to un-stall. 
671
.................... /* Input: endpoint - endpoint to un-stall. 
672
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
672
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
673
.................... /* 
673
.................... /* 
674
.................... /* Summary: Un-stalls endpoint. 
674
.................... /* Summary: Un-stalls endpoint. 
675
.................... /* 
675
.................... /* 
676
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
676
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
677
.................... /*       CALLING THIS ROUTINE. 
677
.................... /*       CALLING THIS ROUTINE. 
678
.................... /* 
678
.................... /* 
679
.................... /*****************************************************************************/ 
679
.................... /*****************************************************************************/ 
680
.................... void usb_unstall_ep(int8 endpoint); 
680
.................... void usb_unstall_ep(int8 endpoint); 
681
....................  
681
....................  
682
.................... /***************************************************************************** 
682
.................... /***************************************************************************** 
683
.................... /* usb_endpoint_stalled() 
683
.................... /* usb_endpoint_stalled() 
684
.................... /* 
684
.................... /* 
685
.................... /* Input: endpoint - endpoint to check 
685
.................... /* Input: endpoint - endpoint to check 
686
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
686
.................... /*                   top most bit indicates direction (set is IN, clear is OUT) 
687
.................... /* 
687
.................... /* 
688
.................... /* Output: returns a TRUE if endpoint is stalled, FALSE if it is not. 
688
.................... /* Output: returns a TRUE if endpoint is stalled, FALSE if it is not. 
689
.................... /* 
689
.................... /* 
690
.................... /* Summary: Looks to see if an endpoint is stalled, or not.  Does not look to 
690
.................... /* Summary: Looks to see if an endpoint is stalled, or not.  Does not look to 
691
.................... /*          see if endpoint has been issued a STALL, just whether or not it is 
691
.................... /*          see if endpoint has been issued a STALL, just whether or not it is 
692
.................... /*          configured to STALL on the next packet.  See Set_Feature and  
692
.................... /*          configured to STALL on the next packet.  See Set_Feature and  
693
.................... /*          Clear_Feature Chapter 9 requests. 
693
.................... /*          Clear_Feature Chapter 9 requests. 
694
.................... /* 
694
.................... /* 
695
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
695
.................... /* NOTE: WE ASSUME ENDPOINT IS VALID.  USB.C SHOULD CHECK IF VALID BEFORE 
696
.................... /*       CALLING THIS ROUTINE. 
696
.................... /*       CALLING THIS ROUTINE. 
697
.................... /* 
697
.................... /* 
698
.................... /*****************************************************************************/ 
698
.................... /*****************************************************************************/ 
699
.................... int1 usb_endpoint_stalled(int8 endpoint); 
699
.................... int1 usb_endpoint_stalled(int8 endpoint); 
700
....................  
700
....................  
701
.................... /***************************************************************************** 
701
.................... /***************************************************************************** 
702
.................... /* usb_set_address(address) 
702
.................... /* usb_set_address(address) 
703
.................... /* 
703
.................... /* 
704
.................... /* Input: address - address the host specified that we use 
704
.................... /* Input: address - address the host specified that we use 
705
.................... /* 
705
.................... /* 
706
.................... /* Summary: Configures the USB Peripheral for the specified device address.   
706
.................... /* Summary: Configures the USB Peripheral for the specified device address.   
707
.................... /*          The host will now talk to use with the following address. 
707
.................... /*          The host will now talk to use with the following address. 
708
.................... /* 
708
.................... /* 
709
.................... /*****************************************************************************/ 
709
.................... /*****************************************************************************/ 
710
.................... void usb_set_address(int8 address); 
710
.................... void usb_set_address(int8 address); 
711
....................  
711
....................  
712
.................... /****************************************************************************** 
712
.................... /****************************************************************************** 
713
.................... /* usb_set_configured() 
713
.................... /* usb_set_configured() 
714
.................... /* 
714
.................... /* 
715
.................... /* Input: config - Configuration to use.  0 to uncofigure device. 
715
.................... /* Input: config - Configuration to use.  0 to uncofigure device. 
716
.................... /* 
716
.................... /* 
717
.................... /* Summary: Configures or unconfigures device.  If configuring device it will 
717
.................... /* Summary: Configures or unconfigures device.  If configuring device it will 
718
.................... /*          enable all the endpoints the user specified for this configuration. 
718
.................... /*          enable all the endpoints the user specified for this configuration. 
719
.................... /*          If un-configuring device it will disable all endpoints. 
719
.................... /*          If un-configuring device it will disable all endpoints. 
720
.................... /* 
720
.................... /* 
721
.................... /*          NOTE: CCS only provides code to handle 1 configuration. 
721
.................... /*          NOTE: CCS only provides code to handle 1 configuration. 
722
.................... /* 
722
.................... /* 
723
.................... /*****************************************************************************/ 
723
.................... /*****************************************************************************/ 
724
.................... void usb_set_configured(int8 config); 
724
.................... void usb_set_configured(int8 config); 
725
....................  
725
....................  
726
.................... /****************************************************************************** 
726
.................... /****************************************************************************** 
727
.................... /* usb_disable_endpoints() 
727
.................... /* usb_disable_endpoints() 
728
.................... /* 
728
.................... /* 
729
.................... /* Summary: Disables endpoints (all endpoints but 0) 
729
.................... /* Summary: Disables endpoints (all endpoints but 0) 
730
.................... /* 
730
.................... /* 
731
.................... /*****************************************************************************/ 
731
.................... /*****************************************************************************/ 
732
.................... void usb_disable_endpoints(void); 
732
.................... void usb_disable_endpoints(void); 
733
....................  
733
....................  
734
....................  
734
....................  
735
.................... /******************************************************************************* 
735
.................... /******************************************************************************* 
736
.................... /* usb_disable_endpoint() 
736
.................... /* usb_disable_endpoint() 
737
.................... /* 
737
.................... /* 
738
.................... /* Input: Endpoint to disable (0..15) 
738
.................... /* Input: Endpoint to disable (0..15) 
739
.................... /* 
739
.................... /* 
740
.................... /* Summary: Disables specified endpoint 
740
.................... /* Summary: Disables specified endpoint 
741
.................... /* 
741
.................... /* 
742
.................... /********************************************************************************/ 
742
.................... /********************************************************************************/ 
743
.................... void usb_disable_endpoint(int8 en); 
743
.................... void usb_disable_endpoint(int8 en); 
744
....................  
744
....................  
745
.................... /************************************************************** 
745
.................... /************************************************************** 
746
.................... /* usb_request_send_response(len) 
746
.................... /* usb_request_send_response(len) 
747
.................... /* usb_request_get_data() 
747
.................... /* usb_request_get_data() 
748
.................... /* usb_request_stall() 
748
.................... /* usb_request_stall() 
749
.................... /* 
749
.................... /* 
750
.................... /* Input: len - size of packet to send 
750
.................... /* Input: len - size of packet to send 
751
.................... /* 
751
.................... /* 
752
.................... /* Summary: One of these 3 functions will be called by the USB stack after 
752
.................... /* Summary: One of these 3 functions will be called by the USB stack after 
753
.................... /*          handling a SETUP packet. 
753
.................... /*          handling a SETUP packet. 
754
.................... /*           
754
.................... /*           
755
.................... /*          After we process a SETUP request, we have 1 of three responses: 
755
.................... /*          After we process a SETUP request, we have 1 of three responses: 
756
.................... /*            1.) send a response IN packet 
756
.................... /*            1.) send a response IN packet 
757
.................... /*            2.) wait for followup OUT packet(s) with data 
757
.................... /*            2.) wait for followup OUT packet(s) with data 
758
.................... /*            3.) stall because we don't support that SETUP request 
758
.................... /*            3.) stall because we don't support that SETUP request 
759
.................... /* 
759
.................... /* 
760
.................... /*          If we are sending data, the array usb_ep0_tx_buffer[] will hold 
760
.................... /*          If we are sending data, the array usb_ep0_tx_buffer[] will hold 
761
.................... /*          the response and the USB Request handler code will call 
761
.................... /*          the response and the USB Request handler code will call 
762
.................... /*          usb_request_send_response() to let us know how big the packet is. 
762
.................... /*          usb_request_send_response() to let us know how big the packet is. 
763
.................... /* 
763
.................... /* 
764
.................... /*          If we are waiting for more data, usb_request_get_data() will 
764
.................... /*          If we are waiting for more data, usb_request_get_data() will 
765
.................... /*          be called by the USB request handler code to configure the EP0 OUT 
765
.................... /*          be called by the USB request handler code to configure the EP0 OUT 
766
.................... /*          endpoint to be ready for more data 
766
.................... /*          endpoint to be ready for more data 
767
.................... /* 
767
.................... /* 
768
.................... /*          If we don't support a request, usb_request_stall() will be called 
768
.................... /*          If we don't support a request, usb_request_stall() will be called 
769
.................... /*          by the USB request handler code to stall the endpoint 0. 
769
.................... /*          by the USB request handler code to stall the endpoint 0. 
770
.................... /* 
770
.................... /* 
771
.................... /*          The operation of these functions depends on how SETUP packets 
771
.................... /*          The operation of these functions depends on how SETUP packets 
772
.................... /*          are handled in the hardware layer. 
772
.................... /*          are handled in the hardware layer. 
773
.................... /* 
773
.................... /* 
774
.................... /***************************************************************/ 
774
.................... /***************************************************************/ 
775
.................... void usb_request_send_response(unsigned int8 len); 
775
.................... void usb_request_send_response(unsigned int8 len); 
776
.................... void usb_request_get_data(void); 
776
.................... void usb_request_get_data(void); 
777
.................... void usb_request_stall(void); 
777
.................... void usb_request_stall(void); 
778
....................  
778
....................  
779
....................  
779
....................  
780
.................... #endif 
780
.................... #endif 
781
....................  
781
....................  
782
....................  
782
....................  
783
.................... //////////////////////// EXTRA USER FUNCTIONS ///////////////////////////////// 
783
.................... //////////////////////// EXTRA USER FUNCTIONS ///////////////////////////////// 
784
....................  
784
....................  
785
.................... /************************************************************** 
785
.................... /************************************************************** 
786
.................... /* usb_flush_in() 
786
.................... /* usb_flush_in() 
787
.................... /* 
787
.................... /* 
788
.................... /* Input: endpoint - which endpoint to mark for transfer 
788
.................... /* Input: endpoint - which endpoint to mark for transfer 
789
.................... /*        len - length of data that is being tramsferred 
789
.................... /*        len - length of data that is being tramsferred 
790
.................... /*        tgl - Data toggle synchronization for this packet 
790
.................... /*        tgl - Data toggle synchronization for this packet 
791
.................... /* 
791
.................... /* 
792
.................... /* Output: TRUE if success, FALSE if error (we don't control the endpoint) 
792
.................... /* Output: TRUE if success, FALSE if error (we don't control the endpoint) 
793
.................... /* 
793
.................... /* 
794
.................... /* Summary: Marks the endpoint ready for transmission.  You must 
794
.................... /* Summary: Marks the endpoint ready for transmission.  You must 
795
.................... /*          have already loaded the endpoint buffer with data. 
795
.................... /*          have already loaded the endpoint buffer with data. 
796
.................... /*          (IN is PIC -> PC). 
796
.................... /*          (IN is PIC -> PC). 
797
.................... /*          This routine is useful if you want to setup an endpoint by 
797
.................... /*          This routine is useful if you want to setup an endpoint by 
798
.................... /*          writing to the buffer directly. 
798
.................... /*          writing to the buffer directly. 
799
.................... /*          This routine is not necessary if you use usb_put_packet(). 
799
.................... /*          This routine is not necessary if you use usb_put_packet(). 
800
.................... /***************************************************************/ 
800
.................... /***************************************************************/ 
801
.................... int1 usb_flush_in(int8 endpoint, int16 len, USB_DTS_BIT tgl); 
801
.................... int1 usb_flush_in(int8 endpoint, int16 len, USB_DTS_BIT tgl); 
802
....................  
802
....................  
803
.................... /************************************************************** 
803
.................... /************************************************************** 
804
.................... /* usb_flush_out() 
804
.................... /* usb_flush_out() 
805
.................... /* 
805
.................... /* 
806
.................... /* Input: endpoint - which endpoint to mark for release 
806
.................... /* Input: endpoint - which endpoint to mark for release 
807
.................... /*        tgl - Data toggle synchronization to expect in the next packet 
807
.................... /*        tgl - Data toggle synchronization to expect in the next packet 
808
.................... /* 
808
.................... /* 
809
.................... /* Output: NONE 
809
.................... /* Output: NONE 
810
.................... /* 
810
.................... /* 
811
.................... /* Summary: Clears the previously received packet, and then marks this 
811
.................... /* Summary: Clears the previously received packet, and then marks this 
812
.................... /*          endpoint's receive buffer as ready for more data. 
812
.................... /*          endpoint's receive buffer as ready for more data. 
813
.................... /*          (OUT is PC -> PIC).  This routine is useful if you do not 
813
.................... /*          (OUT is PC -> PIC).  This routine is useful if you do not 
814
.................... /*          want to use usb_get_packet(), instead you want to handle with 
814
.................... /*          want to use usb_get_packet(), instead you want to handle with 
815
.................... /*          the endpoint buffer directly.  Also see usb_rx_packet_size(). 
815
.................... /*          the endpoint buffer directly.  Also see usb_rx_packet_size(). 
816
.................... /*          This routine is not necessary if you use usb_get_packet(). 
816
.................... /*          This routine is not necessary if you use usb_get_packet(). 
817
.................... /***************************************************************/ 
817
.................... /***************************************************************/ 
818
.................... void usb_flush_out(int8 endpoint, USB_DTS_BIT tgl); 
818
.................... void usb_flush_out(int8 endpoint, USB_DTS_BIT tgl); 
819
....................  
819
....................  
820
.................... /************************************************************** 
820
.................... /************************************************************** 
821
.................... /* usb_rx_packet_size() 
821
.................... /* usb_rx_packet_size() 
822
.................... /* 
822
.................... /* 
823
.................... /* Input: endpoint - which endpoint to mark to check 
823
.................... /* Input: endpoint - which endpoint to mark to check 
824
.................... /* 
824
.................... /* 
825
.................... /* Output: Returns the number of bytes in the endpoint's receive buffer. 
825
.................... /* Output: Returns the number of bytes in the endpoint's receive buffer. 
826
.................... /* 
826
.................... /* 
827
.................... /* Summary: Read the number of data stored in the receive buffer.  When you 
827
.................... /* Summary: Read the number of data stored in the receive buffer.  When you 
828
.................... /*    have handled the data, use usb_flush_out() to clear the buffer.  The 
828
.................... /*    have handled the data, use usb_flush_out() to clear the buffer.  The 
829
.................... /*    result may be invalid if usb_kbhit() returns false for this endpoint. 
829
.................... /*    result may be invalid if usb_kbhit() returns false for this endpoint. 
830
.................... /*    This routine is not necessary if you use usb_get_packet(). 
830
.................... /*    This routine is not necessary if you use usb_get_packet(). 
831
.................... /***************************************************************/ 
831
.................... /***************************************************************/ 
832
.................... int16 usb_rx_packet_size(int8 endpoint); 
832
.................... int16 usb_rx_packet_size(int8 endpoint); 
833
....................  
833
....................  
834
.................... #ENDIF 
834
.................... #ENDIF 
835
....................  
835
....................  
836
....................    #else 
836
....................    #else 
837
....................     #include <pic24_usb.h>   //Microchip 18Fxx5x hardware layer for usb.c 
837
....................     #include <pic24_usb.h>   //Microchip 18Fxx5x hardware layer for usb.c 
838
....................    #endif 
838
....................    #endif 
839
.................... #else 
839
.................... #else 
840
....................    #include <usbn960x.h> 
840
....................    #include <usbn960x.h> 
841
.................... #endif 
841
.................... #endif 
842
.................... #include <usb_desc_cdc.h>   //USB Configuration and Device descriptors for this UBS device 
842
.................... #include <usb_desc_cdc.h>   //USB Configuration and Device descriptors for this UBS device 
843
.................... /////////////////////////////////////////////////////////////////////////// 
843
.................... /////////////////////////////////////////////////////////////////////////// 
844
.................... ////                         usb_desc_cdc.h                            //// 
844
.................... ////                         usb_desc_cdc.h                            //// 
845
.................... ////                                                                   //// 
845
.................... ////                                                                   //// 
846
.................... //// An example set of device / configuration descriptors for use with //// 
846
.................... //// An example set of device / configuration descriptors for use with //// 
847
.................... //// CCS's CDC Virtual COM Port driver (see usb_cdc.h)                 //// 
847
.................... //// CCS's CDC Virtual COM Port driver (see usb_cdc.h)                 //// 
848
.................... ////                                                                   //// 
848
.................... ////                                                                   //// 
849
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H        //// 
849
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H        //// 
850
.................... //// for more documentation and a list of examples.                    //// 
850
.................... //// for more documentation and a list of examples.                    //// 
851
.................... ////                                                                   //// 
851
.................... ////                                                                   //// 
852
.................... /////////////////////////////////////////////////////////////////////////// 
852
.................... /////////////////////////////////////////////////////////////////////////// 
853
.................... ////                                                                   //// 
853
.................... ////                                                                   //// 
854
.................... //// Version History:                                                  //// 
854
.................... //// Version History:                                                  //// 
855
.................... ////                                                                   //// 
855
.................... ////                                                                   //// 
856
.................... //// March 5th, 2009:                                                  //// 
856
.................... //// March 5th, 2009:                                                  //// 
857
.................... ////   Cleanup for Wizard.                                             //// 
857
.................... ////   Cleanup for Wizard.                                             //// 
858
.................... ////   PIC24 Initial release.                                          //// 
858
.................... ////   PIC24 Initial release.                                          //// 
859
.................... ////                                                                   //// 
859
.................... ////                                                                   //// 
860
.................... //// 10/28/05:                                                         //// 
860
.................... //// 10/28/05:                                                         //// 
861
.................... ////    Bulk endpoint sizes updated to allow more than 255 byte        //// 
861
.................... ////    Bulk endpoint sizes updated to allow more than 255 byte        //// 
862
.................... ////    packets.                                                       //// 
862
.................... ////    packets.                                                       //// 
863
.................... ////    Changed device to USB 1.10                                     //// 
863
.................... ////    Changed device to USB 1.10                                     //// 
864
.................... ////                                                                   //// 
864
.................... ////                                                                   //// 
865
.................... /////////////////////////////////////////////////////////////////////////// 
865
.................... /////////////////////////////////////////////////////////////////////////// 
866
.................... ////        (C) Copyright 1996,2005 Custom Computer Services           //// 
866
.................... ////        (C) Copyright 1996,2005 Custom Computer Services           //// 
867
.................... //// This source code may only be used by licensed users of the CCS    //// 
867
.................... //// This source code may only be used by licensed users of the CCS    //// 
868
.................... //// C compiler.  This source code may only be distributed to other    //// 
868
.................... //// C compiler.  This source code may only be distributed to other    //// 
869
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
869
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
870
.................... //// reproduction or distribution is permitted without written         //// 
870
.................... //// reproduction or distribution is permitted without written         //// 
871
.................... //// permission.  Derivative programs created using this software      //// 
871
.................... //// permission.  Derivative programs created using this software      //// 
872
.................... //// in object code form are not restricted in any way.                //// 
872
.................... //// in object code form are not restricted in any way.                //// 
873
.................... /////////////////////////////////////////////////////////////////////////// 
873
.................... /////////////////////////////////////////////////////////////////////////// 
874
....................  
874
....................  
875
.................... #IFNDEF __USB_DESCRIPTORS__ 
875
.................... #IFNDEF __USB_DESCRIPTORS__ 
876
.................... #DEFINE __USB_DESCRIPTORS__ 
876
.................... #DEFINE __USB_DESCRIPTORS__ 
877
....................  
877
....................  
878
.................... ///////// config options, although it's best to leave alone for this demo ///// 
878
.................... ///////// config options, although it's best to leave alone for this demo ///// 
879
.................... #define  USB_CONFIG_PID       0x0033 
879
.................... #define  USB_CONFIG_PID       0x0033 
880
.................... #define  USB_CONFIG_VID       0x0461 
880
.................... #define  USB_CONFIG_VID       0x0461 
881
.................... #define  USB_CONFIG_BUS_POWER 100   //100mA  (range is 0..500) 
881
.................... #define  USB_CONFIG_BUS_POWER 100   //100mA  (range is 0..500) 
882
.................... #define  USB_CONFIG_VERSION   0x0100      //01.00  //range is 00.00 to 99.99 
882
.................... #define  USB_CONFIG_VERSION   0x0100      //01.00  //range is 00.00 to 99.99 
883
.................... //////// end config /////////////////////////////////////////////////////////// 
883
.................... //////// end config /////////////////////////////////////////////////////////// 
884
....................  
884
....................  
885
.................... #DEFINE USB_HID_DEVICE  FALSE 
885
.................... #DEFINE USB_HID_DEVICE  FALSE 
886
.................... #DEFINE USB_CDC_DEVICE  TRUE 
886
.................... #DEFINE USB_CDC_DEVICE  TRUE 
887
....................  
887
....................  
888
.................... #define USB_CDC_COMM_IN_ENDPOINT       1 
888
.................... #define USB_CDC_COMM_IN_ENDPOINT       1 
889
.................... #define USB_CDC_COMM_IN_SIZE           8 
889
.................... #define USB_CDC_COMM_IN_SIZE           8 
890
.................... #define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT 
890
.................... #define USB_EP1_TX_ENABLE  USB_ENABLE_INTERRUPT 
891
.................... #define USB_EP1_TX_SIZE  USB_CDC_COMM_IN_SIZE 
891
.................... #define USB_EP1_TX_SIZE  USB_CDC_COMM_IN_SIZE 
892
....................  
892
....................  
893
.................... //pic to pc endpoint config 
893
.................... //pic to pc endpoint config 
894
.................... #define USB_CDC_DATA_IN_ENDPOINT       2 
894
.................... #define USB_CDC_DATA_IN_ENDPOINT       2 
895
.................... #define USB_CDC_DATA_IN_SIZE           64 
895
.................... #define USB_CDC_DATA_IN_SIZE           64 
896
.................... #define USB_EP2_TX_ENABLE  USB_ENABLE_BULK 
896
.................... #define USB_EP2_TX_ENABLE  USB_ENABLE_BULK 
897
.................... #define USB_EP2_TX_SIZE  USB_CDC_DATA_IN_SIZE 
897
.................... #define USB_EP2_TX_SIZE  USB_CDC_DATA_IN_SIZE 
898
....................  
898
....................  
899
.................... //pc to pic endpoint config 
899
.................... //pc to pic endpoint config 
900
.................... #define USB_CDC_DATA_OUT_ENDPOINT       2 
900
.................... #define USB_CDC_DATA_OUT_ENDPOINT       2 
901
.................... #define USB_CDC_DATA_OUT_SIZE           64 
901
.................... #define USB_CDC_DATA_OUT_SIZE           64 
902
.................... #define USB_EP2_RX_ENABLE  USB_ENABLE_BULK 
902
.................... #define USB_EP2_RX_ENABLE  USB_ENABLE_BULK 
903
.................... #define USB_EP2_RX_SIZE  USB_CDC_DATA_OUT_SIZE 
903
.................... #define USB_EP2_RX_SIZE  USB_CDC_DATA_OUT_SIZE 
904
....................  
904
....................  
905
.................... #include <usb.h> 
905
.................... #include <usb.h> 
906
.................... /////////////////////////////////////////////////////////////////////////// 
906
.................... /////////////////////////////////////////////////////////////////////////// 
907
.................... ////                              usb.h                                //// 
907
.................... ////                              usb.h                                //// 
908
.................... ////                                                                   //// 
908
.................... ////                                                                   //// 
909
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
909
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
910
.................... ////                                                                   //// 
910
.................... ////                                                                   //// 
911
.................... //// This file is part of CCS's USB driver code                        //// 
911
.................... //// This file is part of CCS's USB driver code                        //// 
912
.................... ////                                                                   //// 
912
.................... ////                                                                   //// 
913
.................... //// The following USB examples are provided by CCS:                   //// 
913
.................... //// The following USB examples are provided by CCS:                   //// 
914
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
914
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
915
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
915
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
916
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
916
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
917
.................... ////                      interfaces.                                  //// 
917
.................... ////                      interfaces.                                  //// 
918
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
918
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
919
.................... ////                      HID Reports.                                 //// 
919
.................... ////                      HID Reports.                                 //// 
920
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
920
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
921
.................... ////                    protocol requiring custom Windows drivers.     //// 
921
.................... ////                    protocol requiring custom Windows drivers.     //// 
922
.................... ////   ex_usb_serial.c -                                               //// 
922
.................... ////   ex_usb_serial.c -                                               //// 
923
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
923
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
924
.................... ////     a virtual COM port.                                           //// 
924
.................... ////     a virtual COM port.                                           //// 
925
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
925
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
926
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
926
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
927
.................... ////        compatible with ex_usb_mouse.c.                            //// 
927
.................... ////        compatible with ex_usb_mouse.c.                            //// 
928
.................... ////                                                                   //// 
928
.................... ////                                                                   //// 
929
.................... ////        ********************** API *********************           //// 
929
.................... ////        ********************** API *********************           //// 
930
.................... ////                                                                   //// 
930
.................... ////                                                                   //// 
931
.................... //// These are the functions that are meant to be called by the user:  //// 
931
.................... //// These are the functions that are meant to be called by the user:  //// 
932
.................... ////                                                                   //// 
932
.................... ////                                                                   //// 
933
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
933
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
934
.................... ////              attaches the unit to the usb bus.  Enables           //// 
934
.................... ////              attaches the unit to the usb bus.  Enables           //// 
935
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
935
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
936
.................... ////              the device enumerates - if you are using             //// 
936
.................... ////              the device enumerates - if you are using             //// 
937
.................... ////              connection sense or if the processor should run      //// 
937
.................... ////              connection sense or if the processor should run      //// 
938
.................... ////              even if it's not connected to USB then use           //// 
938
.................... ////              even if it's not connected to USB then use           //// 
939
.................... ////              usb_init_cs() instead.                               //// 
939
.................... ////              usb_init_cs() instead.                               //// 
940
.................... ////                                                                   //// 
940
.................... ////                                                                   //// 
941
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
941
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
942
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
942
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
943
.................... ////              not attach to the USB, you must periodically call    //// 
943
.................... ////              not attach to the USB, you must periodically call    //// 
944
.................... ////              usb_task().  See usb_task() for more information.    //// 
944
.................... ////              usb_task().  See usb_task() for more information.    //// 
945
.................... ////                                                                   //// 
945
.................... ////                                                                   //// 
946
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
946
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
947
.................... ////        peripheral, usb_task() should then be called periodically  //// 
947
.................... ////        peripheral, usb_task() should then be called periodically  //// 
948
.................... ////        to check the connection sense pin.  If the connection      //// 
948
.................... ////        to check the connection sense pin.  If the connection      //// 
949
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
949
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
950
.................... ////        is not attached, this will attach the USB peripheral       //// 
950
.................... ////        is not attached, this will attach the USB peripheral       //// 
951
.................... ////        so the PC can start the enumeration process (and it        //// 
951
.................... ////        so the PC can start the enumeration process (and it        //// 
952
.................... ////        will enable interrupts).  If the connection sense pin      //// 
952
.................... ////        will enable interrupts).  If the connection sense pin      //// 
953
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
953
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
954
.................... ////        running, this will reset the USB peripheral and wait       //// 
954
.................... ////        running, this will reset the USB peripheral and wait       //// 
955
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
955
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
956
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
956
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
957
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
957
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
958
.................... ////        connected.                                                 //// 
958
.................... ////        connected.                                                 //// 
959
.................... ////                                                                   //// 
959
.................... ////                                                                   //// 
960
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
960
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
961
.................... ////                  USB cable.  A macro that looks at the defined    //// 
961
.................... ////                  USB cable.  A macro that looks at the defined    //// 
962
.................... ////                  connection sense pin.  If this returns TRUE      //// 
962
.................... ////                  connection sense pin.  If this returns TRUE      //// 
963
.................... ////                  it does not mean the PC has connected to it,     //// 
963
.................... ////                  it does not mean the PC has connected to it,     //// 
964
.................... ////                  you need to use usb_enumerated() to check this.  //// 
964
.................... ////                  you need to use usb_enumerated() to check this.  //// 
965
.................... ////                                                                   //// 
965
.................... ////                                                                   //// 
966
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
966
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
967
.................... ////                    (configured) by host, FALSE if it has not.     //// 
967
.................... ////                    (configured) by host, FALSE if it has not.     //// 
968
.................... ////                    Do not try to use the USB peripheral for       //// 
968
.................... ////                    Do not try to use the USB peripheral for       //// 
969
.................... ////                    sending and receiving packets until you        //// 
969
.................... ////                    sending and receiving packets until you        //// 
970
.................... ////                    are enumerated.                                //// 
970
.................... ////                    are enumerated.                                //// 
971
.................... ////                                                                   //// 
971
.................... ////                                                                   //// 
972
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
972
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
973
.................... ////                              is enumerated.                       //// 
973
.................... ////                              is enumerated.                       //// 
974
.................... ////                                                                   //// 
974
.................... ////                                                                   //// 
975
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
975
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
976
.................... ////     is free and ready to accept a new packet for transmission.    //// 
976
.................... ////     is free and ready to accept a new packet for transmission.    //// 
977
.................... ////                                                                   //// 
977
.................... ////                                                                   //// 
978
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
978
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
979
.................... ////                    host.  If you need to send a message that      //// 
979
.................... ////                    host.  If you need to send a message that      //// 
980
.................... ////                    spans more than one packet then use            //// 
980
.................... ////                    spans more than one packet then use            //// 
981
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
981
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
982
.................... ////                    see usb_hw_layer.h                             //// 
982
.................... ////                    see usb_hw_layer.h                             //// 
983
.................... ////                                                                   //// 
983
.................... ////                                                                   //// 
984
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
984
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
985
.................... ////     message to the host.  If you only need to send one packet,    //// 
985
.................... ////     message to the host.  If you only need to send one packet,    //// 
986
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
986
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
987
.................... ////     documented in more detail above the prototype in USB.H.       //// 
987
.................... ////     documented in more detail above the prototype in USB.H.       //// 
988
.................... ////                                                                   //// 
988
.................... ////                                                                   //// 
989
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
989
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
990
.................... ////               from host.  This will remain TRUE until             //// 
990
.................... ////               from host.  This will remain TRUE until             //// 
991
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
991
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
992
.................... ////               This function will return an invalid response       //// 
992
.................... ////               This function will return an invalid response       //// 
993
.................... ////               if specified endpoint is not enabled for            //// 
993
.................... ////               if specified endpoint is not enabled for            //// 
994
.................... ////               receiving data.                                     //// 
994
.................... ////               receiving data.                                     //// 
995
.................... ////                                                                   //// 
995
.................... ////                                                                   //// 
996
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
996
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
997
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
997
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
998
.................... ////        call this routine or your data may not be valid.  This     //// 
998
.................... ////        call this routine or your data may not be valid.  This     //// 
999
.................... ////        only receives one packet, if you are trying to receive a   ////  
999
.................... ////        only receives one packet, if you are trying to receive a   ////  
1000
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
1000
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
1001
.................... ////        documentation see usb_hw_layer.h.                          //// 
1001
.................... ////        documentation see usb_hw_layer.h.                          //// 
1002
.................... ////                                                                   //// 
1002
.................... ////                                                                   //// 
1003
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
1003
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
1004
.................... ////        packets from the host, you would use this instead          //// 
1004
.................... ////        packets from the host, you would use this instead          //// 
1005
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
1005
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
1006
.................... ////        messages.  This is documented in more detail above the     //// 
1006
.................... ////        messages.  This is documented in more detail above the     //// 
1007
.................... ////        prototype in USB.H.                                        //// 
1007
.................... ////        prototype in USB.H.                                        //// 
1008
.................... ////                                                                   //// 
1008
.................... ////                                                                   //// 
1009
.................... ////                                                                   //// 
1009
.................... ////                                                                   //// 
1010
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
1010
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
1011
.................... ////                                                                   //// 
1011
.................... ////                                                                   //// 
1012
.................... //// The following definitions are declared here, but can be           //// 
1012
.................... //// The following definitions are declared here, but can be           //// 
1013
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
1013
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
1014
.................... //// to default value.  If confused about a definition read the        //// 
1014
.................... //// to default value.  If confused about a definition read the        //// 
1015
.................... //// comments at each defintion                                        //// 
1015
.................... //// comments at each defintion                                        //// 
1016
.................... ////                                                                   //// 
1016
.................... ////                                                                   //// 
1017
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
1017
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
1018
.................... ////                            Set_Idle HID class request.  Set to    //// 
1018
.................... ////                            Set_Idle HID class request.  Set to    //// 
1019
.................... ////                            False if you do not (device will       //// 
1019
.................... ////                            False if you do not (device will       //// 
1020
.................... ////                            send a Wrong-state if computer         //// 
1020
.................... ////                            send a Wrong-state if computer         //// 
1021
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
1021
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
1022
.................... ////                            NOTE: If you set to TRUE you must      //// 
1022
.................... ////                            NOTE: If you set to TRUE you must      //// 
1023
.................... ////                            provide your own code.  See            //// 
1023
.................... ////                            provide your own code.  See            //// 
1024
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
1024
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
1025
.................... ////                            usb.c                                  //// 
1025
.................... ////                            usb.c                                  //// 
1026
.................... ////                                                                   //// 
1026
.................... ////                                                                   //// 
1027
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
1027
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
1028
.................... ////                            Set_Protocl HID class request. Set to  //// 
1028
.................... ////                            Set_Protocl HID class request. Set to  //// 
1029
.................... ////                            False if you do not (device will       //// 
1029
.................... ////                            False if you do not (device will       //// 
1030
.................... ////                            send a Wrong-state if computer         //// 
1030
.................... ////                            send a Wrong-state if computer         //// 
1031
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
1031
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
1032
.................... ////                            command).                              //// 
1032
.................... ////                            command).                              //// 
1033
.................... ////                            NOTE: If you set to TRUE you must      //// 
1033
.................... ////                            NOTE: If you set to TRUE you must      //// 
1034
.................... ////                            provide your own code in the           //// 
1034
.................... ////                            provide your own code in the           //// 
1035
.................... ////                            application that properly send boot    //// 
1035
.................... ////                            application that properly send boot    //// 
1036
.................... ////                            or HID packets.                        //// 
1036
.................... ////                            or HID packets.                        //// 
1037
.................... ////                                                                   //// 
1037
.................... ////                                                                   //// 
1038
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
1038
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
1039
.................... ////                            The hardware level driver (ex          //// 
1039
.................... ////                            The hardware level driver (ex          //// 
1040
.................... ////                            pic18_usb.h will define this value if  //// 
1040
.................... ////                            pic18_usb.h will define this value if  //// 
1041
.................... ////                            not already overwritten).  Increasing  //// 
1041
.................... ////                            not already overwritten).  Increasing  //// 
1042
.................... ////                            this size will speed up the            //// 
1042
.................... ////                            this size will speed up the            //// 
1043
.................... ////                            enumeration process.                   //// 
1043
.................... ////                            enumeration process.                   //// 
1044
.................... ////                                                                   //// 
1044
.................... ////                                                                   //// 
1045
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
1045
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
1046
.................... ////                         endpoint number. Change this define       //// 
1046
.................... ////                         endpoint number. Change this define       //// 
1047
.................... ////                         to specify what kind of transfer method   //// 
1047
.................... ////                         to specify what kind of transfer method   //// 
1048
.................... ////                         this RX (PC to device) endpoint uses.     //// 
1048
.................... ////                         this RX (PC to device) endpoint uses.     //// 
1049
.................... ////                       Here is the list of valid transfer methods: //// 
1049
.................... ////                       Here is the list of valid transfer methods: //// 
1050
.................... ////                             USB_ENABLE_CONTROL                    //// 
1050
.................... ////                             USB_ENABLE_CONTROL                    //// 
1051
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
1051
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
1052
.................... ////                             USB_ENABLE_BULK                       //// 
1052
.................... ////                             USB_ENABLE_BULK                       //// 
1053
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
1053
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
1054
.................... ////                             USB_ENABLE_DISABLED                   //// 
1054
.................... ////                             USB_ENABLE_DISABLED                   //// 
1055
.................... ////                        Don't forget that you must specify the     //// 
1055
.................... ////                        Don't forget that you must specify the     //// 
1056
.................... ////                        transfer method properly in your endpoint  //// 
1056
.................... ////                        transfer method properly in your endpoint  //// 
1057
.................... ////                        descriptor, too.                           //// 
1057
.................... ////                        descriptor, too.                           //// 
1058
.................... ////                                                                   //// 
1058
.................... ////                                                                   //// 
1059
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
1059
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
1060
.................... ////                       how much memory to reserve for receiving    //// 
1060
.................... ////                       how much memory to reserve for receiving    //// 
1061
.................... ////                       packets.                                    //// 
1061
.................... ////                       packets.                                    //// 
1062
.................... ////                                                                   //// 
1062
.................... ////                                                                   //// 
1063
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
1063
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
1064
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
1064
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
1065
.................... ////               endpoint.                                           //// 
1065
.................... ////               endpoint.                                           //// 
1066
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
1066
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
1067
.................... ////                                                                   //// 
1067
.................... ////                                                                   //// 
1068
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
1068
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
1069
.................... ////                         endpoint number. Change this define       //// 
1069
.................... ////                         endpoint number. Change this define       //// 
1070
.................... ////                         to specify what kind of transfer method   //// 
1070
.................... ////                         to specify what kind of transfer method   //// 
1071
.................... ////                         this TX (device to PC) endpoint uses.     //// 
1071
.................... ////                         this TX (device to PC) endpoint uses.     //// 
1072
.................... ////                       Here is the list of valid transfer methods: //// 
1072
.................... ////                       Here is the list of valid transfer methods: //// 
1073
.................... ////                             USB_ENABLE_CONTROL                    //// 
1073
.................... ////                             USB_ENABLE_CONTROL                    //// 
1074
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
1074
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
1075
.................... ////                             USB_ENABLE_BULK                       //// 
1075
.................... ////                             USB_ENABLE_BULK                       //// 
1076
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
1076
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
1077
.................... ////                             USB_ENABLE_DISABLED                   //// 
1077
.................... ////                             USB_ENABLE_DISABLED                   //// 
1078
.................... ////                        Don't forget that you must specify the     //// 
1078
.................... ////                        Don't forget that you must specify the     //// 
1079
.................... ////                        transfer method properly in your endpoint  //// 
1079
.................... ////                        transfer method properly in your endpoint  //// 
1080
.................... ////                        descriptor, too.                           //// 
1080
.................... ////                        descriptor, too.                           //// 
1081
.................... ////                                                                   //// 
1081
.................... ////                                                                   //// 
1082
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
1082
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
1083
.................... ////                       how much memory to reserve for transmitting //// 
1083
.................... ////                       how much memory to reserve for transmitting //// 
1084
.................... ////                       packets.                                    //// 
1084
.................... ////                       packets.                                    //// 
1085
.................... ////                                                                   //// 
1085
.................... ////                                                                   //// 
1086
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
1086
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
1087
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
1087
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
1088
.................... ////               endpoint.                                           //// 
1088
.................... ////               endpoint.                                           //// 
1089
.................... ////                                                                   //// 
1089
.................... ////                                                                   //// 
1090
.................... ////                                                                   //// 
1090
.................... ////                                                                   //// 
1091
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
1091
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
1092
.................... ////                         HID requests.  You can disable to save    //// 
1092
.................... ////                         HID requests.  You can disable to save    //// 
1093
.................... ////                         ROM space if you are not using a HID      //// 
1093
.................... ////                         ROM space if you are not using a HID      //// 
1094
.................... ////                         device.  If you are not using a HID       //// 
1094
.................... ////                         device.  If you are not using a HID       //// 
1095
.................... ////                         device you must provide your own O/S      //// 
1095
.................... ////                         device you must provide your own O/S      //// 
1096
.................... ////                         (Windows) driver.                         //// 
1096
.................... ////                         (Windows) driver.                         //// 
1097
.................... ////                                                                   //// 
1097
.................... ////                                                                   //// 
1098
.................... //// The other definitions should not be changed.                      //// 
1098
.................... //// The other definitions should not be changed.                      //// 
1099
.................... ////                                                                   //// 
1099
.................... ////                                                                   //// 
1100
.................... /////////////////////////////////////////////////////////////////////////// 
1100
.................... /////////////////////////////////////////////////////////////////////////// 
1101
.................... ////                                                                   //// 
1101
.................... ////                                                                   //// 
1102
.................... //// Version History:                                                  //// 
1102
.................... //// Version History:                                                  //// 
1103
.................... ////                                                                   //// 
1103
.................... ////                                                                   //// 
1104
.................... //// March 5th, 2009:                                                  //// 
1104
.................... //// March 5th, 2009:                                                  //// 
1105
.................... ////   Cleanup for Wizard.                                             //// 
1105
.................... ////   Cleanup for Wizard.                                             //// 
1106
.................... ////   PIC24 Initial release.                                          //// 
1106
.................... ////   PIC24 Initial release.                                          //// 
1107
.................... ////                                                                   //// 
1107
.................... ////                                                                   //// 
1108
.................... //// July 13th, 2005:                                                  //// 
1108
.................... //// July 13th, 2005:                                                  //// 
1109
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
1109
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
1110
.................... ////                                                                   //// 
1110
.................... ////                                                                   //// 
1111
.................... //// June 20th, 2005:                                                  //// 
1111
.................... //// June 20th, 2005:                                                  //// 
1112
.................... ////  Initial 18fxx5x release                                          //// 
1112
.................... ////  Initial 18fxx5x release                                          //// 
1113
.................... ////                                                                   //// 
1113
.................... ////                                                                   //// 
1114
.................... //// May 13th, 2005:                                                   //// 
1114
.................... //// May 13th, 2005:                                                   //// 
1115
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
1115
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
1116
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
1116
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
1117
.................... ////   will have to be changed, see examples)                          //// 
1117
.................... ////   will have to be changed, see examples)                          //// 
1118
.................... ////                                                                   //// 
1118
.................... ////                                                                   //// 
1119
.................... //// Mar 21st, 2005:                                                   //// 
1119
.................... //// Mar 21st, 2005:                                                   //// 
1120
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
1120
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
1121
.................... ////   WITH 18F4550)                                                   //// 
1121
.................... ////   WITH 18F4550)                                                   //// 
1122
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
1122
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
1123
.................... ////                                                                   //// 
1123
.................... ////                                                                   //// 
1124
.................... //// June 24th, 2004:                                                  //// 
1124
.................... //// June 24th, 2004:                                                  //// 
1125
.................... ////  Optimization and cleanup.                                        //// 
1125
.................... ////  Optimization and cleanup.                                        //// 
1126
.................... ////                The following definitions changed:                 //// 
1126
.................... ////                The following definitions changed:                 //// 
1127
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
1127
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
1128
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
1128
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
1129
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
1129
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
1130
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
1130
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
1131
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
1131
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
1132
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
1132
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
1133
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
1133
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
1134
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
1134
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
1135
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
1135
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
1136
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
1136
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
1137
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
1137
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
1138
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
1138
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
1139
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
1139
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
1140
.................... ////        variables moved into struct USB_stack_status               //// 
1140
.................... ////        variables moved into struct USB_stack_status               //// 
1141
.................... ////                                                                   //// 
1141
.................... ////                                                                   //// 
1142
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
1142
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
1143
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
1143
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
1144
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
1144
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
1145
.................... ////         interface is in.  It is your applications job to send     //// 
1145
.................... ////         interface is in.  It is your applications job to send     //// 
1146
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
1146
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
1147
.................... ////                                                                   //// 
1147
.................... ////                                                                   //// 
1148
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
1148
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
1149
.................... ////                                                                   //// 
1149
.................... ////                                                                   //// 
1150
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
1150
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
1151
.................... ////                                                                   //// 
1151
.................... ////                                                                   //// 
1152
.................... //// August 2nd, 2002: Initial Public Release                          //// 
1152
.................... //// August 2nd, 2002: Initial Public Release                          //// 
1153
.................... ////                                                                   //// 
1153
.................... ////                                                                   //// 
1154
.................... /////////////////////////////////////////////////////////////////////////// 
1154
.................... /////////////////////////////////////////////////////////////////////////// 
1155
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
1155
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
1156
.................... //// This source code may only be used by licensed users of the CCS    //// 
1156
.................... //// This source code may only be used by licensed users of the CCS    //// 
1157
.................... //// C compiler.  This source code may only be distributed to other    //// 
1157
.................... //// C compiler.  This source code may only be distributed to other    //// 
1158
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
1158
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
1159
.................... //// reproduction or distribution is permitted without written         //// 
1159
.................... //// reproduction or distribution is permitted without written         //// 
1160
.................... //// permission.  Derivative programs created using this software      //// 
1160
.................... //// permission.  Derivative programs created using this software      //// 
1161
.................... //// in object code form are not restricted in any way.                //// 
1161
.................... //// in object code form are not restricted in any way.                //// 
1162
.................... /////////////////////////////////////////////////////////////////////////// 
1162
.................... /////////////////////////////////////////////////////////////////////////// 
1163
....................  
1163
....................  
1164
.................... #IFNDEF __USB_PROTOTYPES__ 
1164
.................... #IFNDEF __USB_PROTOTYPES__ 
1165
.................... #DEFINE __USB_PROTOTYPES__ 
1165
.................... #DEFINE __USB_PROTOTYPES__ 
1166
....................  
1166
....................  
1167
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
1167
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
1168
....................  
1168
....................  
1169
.................... #ifndef USB_CON_SENSE_PIN 
1169
.................... #ifndef USB_CON_SENSE_PIN 
1170
....................  #define USB_CON_SENSE_PIN  0 
1170
....................  #define USB_CON_SENSE_PIN  0 
1171
.................... #endif 
1171
.................... #endif 
1172
....................  
1172
....................  
1173
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
1173
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
1174
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
1174
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
1175
.................... #ENDIF 
1175
.................... #ENDIF 
1176
....................  
1176
....................  
1177
.................... #IFNDEF USB_HID_IDLE 
1177
.................... #IFNDEF USB_HID_IDLE 
1178
....................    #DEFINE USB_HID_IDLE FALSE 
1178
....................    #DEFINE USB_HID_IDLE FALSE 
1179
.................... #ENDIF 
1179
.................... #ENDIF 
1180
....................  
1180
....................  
1181
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
1181
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
1182
.................... #IFNDEF USB_HID_DEVICE 
1182
.................... #IFNDEF USB_HID_DEVICE 
1183
....................    #DEFINE USB_HID_DEVICE TRUE 
1183
....................    #DEFINE USB_HID_DEVICE TRUE 
1184
.................... #ENDIF 
1184
.................... #ENDIF 
1185
....................  
1185
....................  
1186
.................... #IFNDEF USB_CDC_DEVICE 
1186
.................... #IFNDEF USB_CDC_DEVICE 
1187
....................    #DEFINE USB_CDC_DEVICE FALSE 
1187
....................    #DEFINE USB_CDC_DEVICE FALSE 
1188
.................... #ENDIF 
1188
.................... #ENDIF 
1189
....................  
1189
....................  
1190
.................... //set to false to opt for less RAM, true to opt for less ROM 
1190
.................... //set to false to opt for less RAM, true to opt for less ROM 
1191
.................... #ifndef USB_OPT_FOR_ROM 
1191
.................... #ifndef USB_OPT_FOR_ROM 
1192
....................    #define USB_OPT_FOR_ROM TRUE 
1192
....................    #define USB_OPT_FOR_ROM TRUE 
1193
.................... #endif 
1193
.................... #endif 
1194
....................  
1194
....................  
1195
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
1195
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
1196
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
1196
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
1197
.................... #ENDIF 
1197
.................... #ENDIF 
1198
....................  
1198
....................  
1199
....................  
1199
....................  
1200
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
1200
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
1201
....................  
1201
....................  
1202
.................... /************************************************************** 
1202
.................... /************************************************************** 
1203
.................... /* usb_enumerated() 
1203
.................... /* usb_enumerated() 
1204
.................... /* 
1204
.................... /* 
1205
.................... /* Input: Global variable USB_Curr_Config 
1205
.................... /* Input: Global variable USB_Curr_Config 
1206
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
1206
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
1207
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
1207
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
1208
.................... /* 
1208
.................... /* 
1209
.................... /* Summary: See API section of USB.H for more documentation. 
1209
.................... /* Summary: See API section of USB.H for more documentation. 
1210
.................... /***************************************************************/ 
1210
.................... /***************************************************************/ 
1211
.................... int1 usb_enumerated(void); 
1211
.................... int1 usb_enumerated(void); 
1212
....................  
1212
....................  
1213
.................... /************************************************************** 
1213
.................... /************************************************************** 
1214
.................... /* usb_wait_for_enumeration() 
1214
.................... /* usb_wait_for_enumeration() 
1215
.................... /* 
1215
.................... /* 
1216
.................... /* Input: Global variable USB_Curr_Config 
1216
.................... /* Input: Global variable USB_Curr_Config 
1217
.................... /* 
1217
.................... /* 
1218
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
1218
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
1219
.................... /*          See API section of USB.H for more information. 
1219
.................... /*          See API section of USB.H for more information. 
1220
.................... /***************************************************************/ 
1220
.................... /***************************************************************/ 
1221
.................... void usb_wait_for_enumeration(void); 
1221
.................... void usb_wait_for_enumeration(void); 
1222
....................  
1222
....................  
1223
.................... /**************************************************************************** 
1223
.................... /**************************************************************************** 
1224
.................... /* usb_gets(endpoint, ptr, max, timeout) 
1224
.................... /* usb_gets(endpoint, ptr, max, timeout) 
1225
.................... /* 
1225
.................... /* 
1226
.................... /* Input: endpoint - endpoint to get data from 
1226
.................... /* Input: endpoint - endpoint to get data from 
1227
.................... /*        ptr - place / array to store data to 
1227
.................... /*        ptr - place / array to store data to 
1228
.................... /*        max - max amount of data to get from USB and store into ptr 
1228
.................... /*        max - max amount of data to get from USB and store into ptr 
1229
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
1229
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
1230
.................... /*                   timeout.  set to 0 for no timeout. 
1230
.................... /*                   timeout.  set to 0 for no timeout. 
1231
.................... /* 
1231
.................... /* 
1232
.................... /* Output: Amount of data returned.  It may be less than max. 
1232
.................... /* Output: Amount of data returned.  It may be less than max. 
1233
.................... /* 
1233
.................... /* 
1234
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
1234
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
1235
.................... /*          and finish when either it receives a 0-len packet or a packet 
1235
.................... /*          and finish when either it receives a 0-len packet or a packet 
1236
.................... /*          of less size than maximum. 
1236
.................... /*          of less size than maximum. 
1237
.................... /* 
1237
.................... /* 
1238
.................... /*****************************************************************************/ 
1238
.................... /*****************************************************************************/ 
1239
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
1239
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
1240
....................  
1240
....................  
1241
.................... /**************************************************************************** 
1241
.................... /**************************************************************************** 
1242
.................... /* usb_puts() 
1242
.................... /* usb_puts() 
1243
.................... /* 
1243
.................... /* 
1244
.................... /* Inputs: endpoint - endpoint to send data out 
1244
.................... /* Inputs: endpoint - endpoint to send data out 
1245
.................... /*         ptr - points to array of data to send 
1245
.................... /*         ptr - points to array of data to send 
1246
.................... /*         len - amount of data to send 
1246
.................... /*         len - amount of data to send 
1247
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
1247
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
1248
.................... /*                   timeout.  set to 0 for no timeout. 
1248
.................... /*                   timeout.  set to 0 for no timeout. 
1249
.................... /* 
1249
.................... /* 
1250
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
1250
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
1251
.................... /*    sent before timeout period expired. 
1251
.................... /*    sent before timeout period expired. 
1252
.................... /* 
1252
.................... /* 
1253
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
1253
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
1254
.................... /*       function can still be used to send messages consiting of only one  
1254
.................... /*       function can still be used to send messages consiting of only one  
1255
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
1255
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
1256
.................... /*       multiple packet messages or 0-lenght packets are needed. 
1256
.................... /*       multiple packet messages or 0-lenght packets are needed. 
1257
.................... /* 
1257
.................... /* 
1258
.................... /*****************************************************************************/ 
1258
.................... /*****************************************************************************/ 
1259
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
1259
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
1260
....................  
1260
....................  
1261
.................... /****************************************************************************** 
1261
.................... /****************************************************************************** 
1262
.................... /* usb_attached() 
1262
.................... /* usb_attached() 
1263
.................... /* 
1263
.................... /* 
1264
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
1264
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
1265
.................... /*          See the API section of USB.H for more documentation. 
1265
.................... /*          See the API section of USB.H for more documentation. 
1266
.................... /* 
1266
.................... /* 
1267
.................... /*****************************************************************************/ 
1267
.................... /*****************************************************************************/ 
1268
.................... #if USB_CON_SENSE_PIN 
1268
.................... #if USB_CON_SENSE_PIN 
1269
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
1269
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
1270
.................... #else 
1270
.................... #else 
1271
....................  #define usb_attached() TRUE 
1271
....................  #define usb_attached() TRUE 
1272
.................... #endif 
1272
.................... #endif 
1273
....................  
1273
....................  
1274
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
1274
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
1275
....................  
1275
....................  
1276
....................  
1276
....................  
1277
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
1277
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
1278
....................  
1278
....................  
1279
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
1279
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
1280
....................  
1280
....................  
1281
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
1281
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
1282
....................  
1282
....................  
1283
.................... #if USB_OPT_FOR_ROM 
1283
.................... #if USB_OPT_FOR_ROM 
1284
.................... typedef struct { 
1284
.................... typedef struct { 
1285
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
1285
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
1286
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
1286
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
1287
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
1287
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
1288
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
1288
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
1289
.................... } TYPE_USB_STACK_STATUS; 
1289
.................... } TYPE_USB_STACK_STATUS; 
1290
.................... #else 
1290
.................... #else 
1291
.................... typedef struct { 
1291
.................... typedef struct { 
1292
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
1292
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
1293
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
1293
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
1294
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
1294
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
1295
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
1295
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
1296
.................... } TYPE_USB_STACK_STATUS; 
1296
.................... } TYPE_USB_STACK_STATUS; 
1297
.................... #endif 
1297
.................... #endif 
1298
....................  
1298
....................  
1299
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
1299
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
1300
....................  
1300
....................  
1301
.................... /************************************************************** 
1301
.................... /************************************************************** 
1302
.................... /* usb_token_reset() 
1302
.................... /* usb_token_reset() 
1303
.................... /* 
1303
.................... /* 
1304
.................... /* Output:  No output (but many global registers are modified) 
1304
.................... /* Output:  No output (but many global registers are modified) 
1305
.................... /* 
1305
.................... /* 
1306
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
1306
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
1307
.................... /***************************************************************/ 
1307
.................... /***************************************************************/ 
1308
.................... void usb_token_reset(void); 
1308
.................... void usb_token_reset(void); 
1309
....................  
1309
....................  
1310
.................... /************************************************************** 
1310
.................... /************************************************************** 
1311
.................... /* usb_isr_tok_setup_dne() 
1311
.................... /* usb_isr_tok_setup_dne() 
1312
.................... /* 
1312
.................... /* 
1313
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
1313
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
1314
.................... /* 
1314
.................... /* 
1315
.................... /* Output: None (many globals are changed) 
1315
.................... /* Output: None (many globals are changed) 
1316
.................... /* 
1316
.................... /* 
1317
.................... /* Summary: This function is that handles the setup token. 
1317
.................... /* Summary: This function is that handles the setup token. 
1318
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
1318
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
1319
.................... /*          Get_Descriptor, etc. 
1319
.................... /*          Get_Descriptor, etc. 
1320
.................... /* 
1320
.................... /* 
1321
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
1321
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
1322
.................... /*  following records: 
1322
.................... /*  following records: 
1323
.................... /*  ------------------------------------------------------------------------------------------- 
1323
.................... /*  ------------------------------------------------------------------------------------------- 
1324
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
1324
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
1325
.................... /*                              bit7   (0) host-to-device 
1325
.................... /*                              bit7   (0) host-to-device 
1326
.................... /*                                     (1) device-to-host 
1326
.................... /*                                     (1) device-to-host 
1327
.................... /*                              bit6-5 (00) usb standard request; 
1327
.................... /*                              bit6-5 (00) usb standard request; 
1328
.................... /*                                     (01) class request; 
1328
.................... /*                                     (01) class request; 
1329
.................... /*                                     (10) vendor request 
1329
.................... /*                                     (10) vendor request 
1330
.................... /*                                     (11) reserved 
1330
.................... /*                                     (11) reserved 
1331
.................... /*                              bit4-0 (0000) device 
1331
.................... /*                              bit4-0 (0000) device 
1332
.................... /*                                     (0001) interface 
1332
.................... /*                                     (0001) interface 
1333
.................... /*                                     (0010) endpoint 
1333
.................... /*                                     (0010) endpoint 
1334
.................... /*                                     (0011) other element 
1334
.................... /*                                     (0011) other element 
1335
.................... /*                                     (0100) to (1111) reserved 
1335
.................... /*                                     (0100) to (1111) reserved 
1336
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
1336
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
1337
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
1337
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
1338
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
1338
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
1339
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
1339
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
1340
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
1340
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
1341
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
1341
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
1342
.................... /***************************************************************/ 
1342
.................... /***************************************************************/ 
1343
.................... void usb_isr_tok_setup_dne(void); 
1343
.................... void usb_isr_tok_setup_dne(void); 
1344
....................  
1344
....................  
1345
.................... /************************************************************** 
1345
.................... /************************************************************** 
1346
.................... /* usb_isr_tok_out_dne() 
1346
.................... /* usb_isr_tok_out_dne() 
1347
.................... /* 
1347
.................... /* 
1348
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
1348
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
1349
.................... /* 
1349
.................... /* 
1350
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
1350
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
1351
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
1351
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
1352
.................... /*          data is received it is left in the buffer (user would use 
1352
.................... /*          data is received it is left in the buffer (user would use 
1353
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
1353
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
1354
.................... /*          libraries (like CDC) have to answer setup packets. 
1354
.................... /*          libraries (like CDC) have to answer setup packets. 
1355
.................... /*           
1355
.................... /*           
1356
.................... /***************************************************************/ 
1356
.................... /***************************************************************/ 
1357
.................... void usb_isr_tok_out_dne(int8 endpoint); 
1357
.................... void usb_isr_tok_out_dne(int8 endpoint); 
1358
....................  
1358
....................  
1359
.................... /************************************************************** 
1359
.................... /************************************************************** 
1360
.................... /* usb_isr_tok_in_dne(endpoint) 
1360
.................... /* usb_isr_tok_in_dne(endpoint) 
1361
.................... /* 
1361
.................... /* 
1362
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
1362
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
1363
.................... /* 
1363
.................... /* 
1364
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
1364
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
1365
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
1365
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
1366
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
1366
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
1367
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
1367
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
1368
.................... /*    like CDC which handles the CDC protocl). 
1368
.................... /*    like CDC which handles the CDC protocl). 
1369
.................... /* 
1369
.................... /* 
1370
.................... /***************************************************************/ 
1370
.................... /***************************************************************/ 
1371
.................... void usb_isr_tok_in_dne(int8 endpoint); 
1371
.................... void usb_isr_tok_in_dne(int8 endpoint); 
1372
....................  
1372
....................  
1373
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
1373
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
1374
....................  
1374
....................  
1375
....................  
1375
....................  
1376
.................... //CCS only supports one configuration at this time 
1376
.................... //CCS only supports one configuration at this time 
1377
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
1377
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
1378
....................  
1378
....................  
1379
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
1379
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
1380
.................... #define PID_IN       0x09  //device to host transactions 
1380
.................... #define PID_IN       0x09  //device to host transactions 
1381
.................... #define PID_OUT      0x01  //host to device transactions 
1381
.................... #define PID_OUT      0x01  //host to device transactions 
1382
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
1382
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
1383
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
1383
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
1384
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
1384
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
1385
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
1385
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
1386
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
1386
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
1387
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
1387
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
1388
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
1388
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
1389
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
1389
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
1390
....................  
1390
....................  
1391
.................... //Key which identifies descritpors 
1391
.................... //Key which identifies descritpors 
1392
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
1392
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
1393
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
1393
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
1394
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
1394
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
1395
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
1395
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
1396
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
1396
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
1397
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
1397
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
1398
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
1398
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
1399
....................  
1399
....................  
1400
.................... //The length of each descriptor 
1400
.................... //The length of each descriptor 
1401
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
1401
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
1402
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
1402
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
1403
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
1403
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
1404
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
1404
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
1405
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
1405
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
1406
....................  
1406
....................  
1407
.................... //Standard USB Setup bRequest Codes 
1407
.................... //Standard USB Setup bRequest Codes 
1408
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
1408
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
1409
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
1409
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
1410
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
1410
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
1411
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
1411
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
1412
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
1412
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
1413
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
1413
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
1414
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
1414
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
1415
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
1415
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
1416
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
1416
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
1417
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
1417
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
1418
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
1418
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
1419
....................  
1419
....................  
1420
.................... //HID Class Setup bRequest Codes 
1420
.................... //HID Class Setup bRequest Codes 
1421
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
1421
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
1422
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
1422
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
1423
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
1423
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
1424
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
1424
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
1425
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
1425
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
1426
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
1426
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
1427
....................  
1427
....................  
1428
.................... //types of endpoints as defined in the descriptor 
1428
.................... //types of endpoints as defined in the descriptor 
1429
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
1429
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
1430
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
1430
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
1431
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
1431
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
1432
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
1432
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
1433
....................  
1433
....................  
1434
.................... //types of endpoints used internally in this api 
1434
.................... //types of endpoints used internally in this api 
1435
.................... #define USB_ENABLE_DISABLED     -1 
1435
.................... #define USB_ENABLE_DISABLED     -1 
1436
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
1436
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
1437
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
1437
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
1438
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
1438
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
1439
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
1439
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
1440
....................  
1440
....................  
1441
....................  
1441
....................  
1442
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
1442
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
1443
....................  
1443
....................  
1444
.................... //--------- endpoint 0 defines ---------- 
1444
.................... //--------- endpoint 0 defines ---------- 
1445
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
1445
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
1446
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
1446
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
1447
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
1447
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
1448
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
1448
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
1449
....................  
1449
....................  
1450
.................... //--------- endpoint 1 defines ---------- 
1450
.................... //--------- endpoint 1 defines ---------- 
1451
.................... #ifndef USB_EP1_TX_ENABLE 
1451
.................... #ifndef USB_EP1_TX_ENABLE 
1452
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
1452
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
1453
.................... #endif 
1453
.................... #endif 
1454
.................... #ifndef USB_EP1_RX_ENABLE 
1454
.................... #ifndef USB_EP1_RX_ENABLE 
1455
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
1455
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
1456
.................... #endif 
1456
.................... #endif 
1457
....................  
1457
....................  
1458
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
1458
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
1459
....................  #ifdef USB_EP1_RX_SIZE 
1459
....................  #ifdef USB_EP1_RX_SIZE 
1460
....................   #undef USB_EP1_RX_SIZE 
1460
....................   #undef USB_EP1_RX_SIZE 
1461
....................  #endif 
1461
....................  #endif 
1462
....................  #define USB_EP1_RX_SIZE 0 
1462
....................  #define USB_EP1_RX_SIZE 0 
1463
.................... #else 
1463
.................... #else 
1464
....................  #ifndef USB_EP1_RX_SIZE 
1464
....................  #ifndef USB_EP1_RX_SIZE 
1465
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
1465
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
1466
....................  #endif 
1466
....................  #endif 
1467
.................... #endif 
1467
.................... #endif 
1468
....................  
1468
....................  
1469
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
1469
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
1470
....................  #ifdef USB_EP1_TX_SIZE 
1470
....................  #ifdef USB_EP1_TX_SIZE 
1471
....................   #undef USB_EP1_TX_SIZE 
1471
....................   #undef USB_EP1_TX_SIZE 
1472
....................  #endif 
1472
....................  #endif 
1473
....................  #define USB_EP1_TX_SIZE 0 
1473
....................  #define USB_EP1_TX_SIZE 0 
1474
.................... #else 
1474
.................... #else 
1475
....................  #ifndef USB_EP1_TX_SIZE 
1475
....................  #ifndef USB_EP1_TX_SIZE 
1476
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
1476
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
1477
....................  #endif 
1477
....................  #endif 
1478
.................... #endif 
1478
.................... #endif 
1479
....................  
1479
....................  
1480
....................  
1480
....................  
1481
.................... //--------- endpoint 2 defines ---------- 
1481
.................... //--------- endpoint 2 defines ---------- 
1482
.................... #ifndef USB_EP2_TX_ENABLE 
1482
.................... #ifndef USB_EP2_TX_ENABLE 
1483
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
1483
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
1484
.................... #endif 
1484
.................... #endif 
1485
.................... #ifndef USB_EP2_RX_ENABLE 
1485
.................... #ifndef USB_EP2_RX_ENABLE 
1486
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
1486
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
1487
.................... #endif 
1487
.................... #endif 
1488
....................  
1488
....................  
1489
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
1489
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
1490
....................  #ifdef USB_EP2_RX_SIZE 
1490
....................  #ifdef USB_EP2_RX_SIZE 
1491
....................   #undef USB_EP2_RX_SIZE 
1491
....................   #undef USB_EP2_RX_SIZE 
1492
....................  #endif 
1492
....................  #endif 
1493
....................  #define USB_EP2_RX_SIZE 0 
1493
....................  #define USB_EP2_RX_SIZE 0 
1494
.................... #else 
1494
.................... #else 
1495
....................  #ifndef USB_EP2_RX_SIZE 
1495
....................  #ifndef USB_EP2_RX_SIZE 
1496
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
1496
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
1497
....................  #endif 
1497
....................  #endif 
1498
.................... #endif 
1498
.................... #endif 
1499
....................  
1499
....................  
1500
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
1500
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
1501
....................  #ifdef USB_EP2_TX_SIZE 
1501
....................  #ifdef USB_EP2_TX_SIZE 
1502
....................   #undef USB_EP2_TX_SIZE 
1502
....................   #undef USB_EP2_TX_SIZE 
1503
....................  #endif 
1503
....................  #endif 
1504
....................  #define USB_EP2_TX_SIZE 0 
1504
....................  #define USB_EP2_TX_SIZE 0 
1505
.................... #else 
1505
.................... #else 
1506
....................  #ifndef USB_EP2_TX_SIZE 
1506
....................  #ifndef USB_EP2_TX_SIZE 
1507
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
1507
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
1508
....................  #endif 
1508
....................  #endif 
1509
.................... #endif 
1509
.................... #endif 
1510
....................  
1510
....................  
1511
....................  
1511
....................  
1512
.................... //--------- endpoint 3 defines ---------- 
1512
.................... //--------- endpoint 3 defines ---------- 
1513
.................... #ifndef USB_EP3_TX_ENABLE 
1513
.................... #ifndef USB_EP3_TX_ENABLE 
1514
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
1514
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
1515
.................... #endif 
1515
.................... #endif 
1516
.................... #ifndef USB_EP3_RX_ENABLE 
1516
.................... #ifndef USB_EP3_RX_ENABLE 
1517
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
1517
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
1518
.................... #endif 
1518
.................... #endif 
1519
....................  
1519
....................  
1520
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
1520
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
1521
....................  #ifdef USB_EP3_RX_SIZE 
1521
....................  #ifdef USB_EP3_RX_SIZE 
1522
....................   #undef USB_EP3_RX_SIZE 
1522
....................   #undef USB_EP3_RX_SIZE 
1523
....................  #endif 
1523
....................  #endif 
1524
....................  #define USB_EP3_RX_SIZE 0 
1524
....................  #define USB_EP3_RX_SIZE 0 
1525
.................... #else 
1525
.................... #else 
1526
....................  #ifndef USB_EP3_RX_SIZE 
1526
....................  #ifndef USB_EP3_RX_SIZE 
1527
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
1527
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
1528
....................  #endif 
1528
....................  #endif 
1529
.................... #endif 
1529
.................... #endif 
1530
....................  
1530
....................  
1531
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
1531
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
1532
....................  #ifdef USB_EP3_TX_SIZE 
1532
....................  #ifdef USB_EP3_TX_SIZE 
1533
....................   #undef USB_EP3_TX_SIZE 
1533
....................   #undef USB_EP3_TX_SIZE 
1534
....................  #endif 
1534
....................  #endif 
1535
....................  #define USB_EP3_TX_SIZE 0 
1535
....................  #define USB_EP3_TX_SIZE 0 
1536
.................... #else 
1536
.................... #else 
1537
....................  #ifndef USB_EP3_TX_SIZE 
1537
....................  #ifndef USB_EP3_TX_SIZE 
1538
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
1538
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
1539
....................  #endif 
1539
....................  #endif 
1540
.................... #endif 
1540
.................... #endif 
1541
....................  
1541
....................  
1542
....................  
1542
....................  
1543
.................... //--------- endpoint 4 defines ---------- 
1543
.................... //--------- endpoint 4 defines ---------- 
1544
.................... #ifndef USB_EP4_TX_ENABLE 
1544
.................... #ifndef USB_EP4_TX_ENABLE 
1545
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
1545
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
1546
.................... #endif 
1546
.................... #endif 
1547
.................... #ifndef USB_EP4_RX_ENABLE 
1547
.................... #ifndef USB_EP4_RX_ENABLE 
1548
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
1548
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
1549
.................... #endif 
1549
.................... #endif 
1550
....................  
1550
....................  
1551
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
1551
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
1552
....................  #ifdef USB_EP4_RX_SIZE 
1552
....................  #ifdef USB_EP4_RX_SIZE 
1553
....................   #undef USB_EP4_RX_SIZE 
1553
....................   #undef USB_EP4_RX_SIZE 
1554
....................  #endif 
1554
....................  #endif 
1555
....................  #define USB_EP4_RX_SIZE 0 
1555
....................  #define USB_EP4_RX_SIZE 0 
1556
.................... #else 
1556
.................... #else 
1557
....................  #ifndef USB_EP4_RX_SIZE 
1557
....................  #ifndef USB_EP4_RX_SIZE 
1558
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
1558
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
1559
....................  #endif 
1559
....................  #endif 
1560
.................... #endif 
1560
.................... #endif 
1561
....................  
1561
....................  
1562
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
1562
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
1563
....................  #ifdef USB_EP4_TX_SIZE 
1563
....................  #ifdef USB_EP4_TX_SIZE 
1564
....................   #undef USB_EP4_TX_SIZE 
1564
....................   #undef USB_EP4_TX_SIZE 
1565
....................  #endif 
1565
....................  #endif 
1566
....................  #define USB_EP4_TX_SIZE 0 
1566
....................  #define USB_EP4_TX_SIZE 0 
1567
.................... #else 
1567
.................... #else 
1568
....................  #ifndef USB_EP4_TX_SIZE 
1568
....................  #ifndef USB_EP4_TX_SIZE 
1569
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
1569
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
1570
....................  #endif 
1570
....................  #endif 
1571
.................... #endif 
1571
.................... #endif 
1572
....................  
1572
....................  
1573
....................  
1573
....................  
1574
.................... //--------- endpoint 5 defines ---------- 
1574
.................... //--------- endpoint 5 defines ---------- 
1575
.................... #ifndef USB_EP5_TX_ENABLE 
1575
.................... #ifndef USB_EP5_TX_ENABLE 
1576
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
1576
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
1577
.................... #endif 
1577
.................... #endif 
1578
.................... #ifndef USB_EP5_RX_ENABLE 
1578
.................... #ifndef USB_EP5_RX_ENABLE 
1579
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
1579
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
1580
.................... #endif 
1580
.................... #endif 
1581
....................  
1581
....................  
1582
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
1582
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
1583
....................  #ifdef USB_EP5_RX_SIZE 
1583
....................  #ifdef USB_EP5_RX_SIZE 
1584
....................   #undef USB_EP5_RX_SIZE 
1584
....................   #undef USB_EP5_RX_SIZE 
1585
....................  #endif 
1585
....................  #endif 
1586
....................  #define USB_EP5_RX_SIZE 0 
1586
....................  #define USB_EP5_RX_SIZE 0 
1587
.................... #else 
1587
.................... #else 
1588
....................  #ifndef USB_EP5_RX_SIZE 
1588
....................  #ifndef USB_EP5_RX_SIZE 
1589
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
1589
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
1590
....................  #endif 
1590
....................  #endif 
1591
.................... #endif 
1591
.................... #endif 
1592
....................  
1592
....................  
1593
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
1593
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
1594
....................  #ifdef USB_EP5_TX_SIZE 
1594
....................  #ifdef USB_EP5_TX_SIZE 
1595
....................   #undef USB_EP5_TX_SIZE 
1595
....................   #undef USB_EP5_TX_SIZE 
1596
....................  #endif 
1596
....................  #endif 
1597
....................  #define USB_EP5_TX_SIZE 0 
1597
....................  #define USB_EP5_TX_SIZE 0 
1598
.................... #else 
1598
.................... #else 
1599
....................  #ifndef USB_EP5_TX_SIZE 
1599
....................  #ifndef USB_EP5_TX_SIZE 
1600
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
1600
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
1601
....................  #endif 
1601
....................  #endif 
1602
.................... #endif 
1602
.................... #endif 
1603
....................  
1603
....................  
1604
....................  
1604
....................  
1605
.................... //--------- endpoint 6 defines ---------- 
1605
.................... //--------- endpoint 6 defines ---------- 
1606
.................... #ifndef USB_EP6_TX_ENABLE 
1606
.................... #ifndef USB_EP6_TX_ENABLE 
1607
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
1607
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
1608
.................... #endif 
1608
.................... #endif 
1609
.................... #ifndef USB_EP6_RX_ENABLE 
1609
.................... #ifndef USB_EP6_RX_ENABLE 
1610
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
1610
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
1611
.................... #endif 
1611
.................... #endif 
1612
....................  
1612
....................  
1613
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
1613
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
1614
....................  #ifdef USB_EP6_RX_SIZE 
1614
....................  #ifdef USB_EP6_RX_SIZE 
1615
....................   #undef USB_EP6_RX_SIZE 
1615
....................   #undef USB_EP6_RX_SIZE 
1616
....................  #endif 
1616
....................  #endif 
1617
....................  #define USB_EP6_RX_SIZE 0 
1617
....................  #define USB_EP6_RX_SIZE 0 
1618
.................... #else 
1618
.................... #else 
1619
....................  #ifndef USB_EP6_RX_SIZE 
1619
....................  #ifndef USB_EP6_RX_SIZE 
1620
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
1620
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
1621
....................  #endif 
1621
....................  #endif 
1622
.................... #endif 
1622
.................... #endif 
1623
....................  
1623
....................  
1624
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
1624
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
1625
....................  #ifdef USB_EP6_TX_SIZE 
1625
....................  #ifdef USB_EP6_TX_SIZE 
1626
....................   #undef USB_EP6_TX_SIZE 
1626
....................   #undef USB_EP6_TX_SIZE 
1627
....................  #endif 
1627
....................  #endif 
1628
....................  #define USB_EP6_TX_SIZE 0 
1628
....................  #define USB_EP6_TX_SIZE 0 
1629
.................... #else 
1629
.................... #else 
1630
....................  #ifndef USB_EP6_TX_SIZE 
1630
....................  #ifndef USB_EP6_TX_SIZE 
1631
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
1631
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
1632
....................  #endif 
1632
....................  #endif 
1633
.................... #endif 
1633
.................... #endif 
1634
....................  
1634
....................  
1635
....................  
1635
....................  
1636
.................... //--------- endpoint 7 defines ---------- 
1636
.................... //--------- endpoint 7 defines ---------- 
1637
.................... #ifndef USB_EP7_TX_ENABLE 
1637
.................... #ifndef USB_EP7_TX_ENABLE 
1638
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
1638
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
1639
.................... #endif 
1639
.................... #endif 
1640
.................... #ifndef USB_EP7_RX_ENABLE 
1640
.................... #ifndef USB_EP7_RX_ENABLE 
1641
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
1641
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
1642
.................... #endif 
1642
.................... #endif 
1643
....................  
1643
....................  
1644
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
1644
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
1645
....................  #ifdef USB_EP7_RX_SIZE 
1645
....................  #ifdef USB_EP7_RX_SIZE 
1646
....................   #undef USB_EP7_RX_SIZE 
1646
....................   #undef USB_EP7_RX_SIZE 
1647
....................  #endif 
1647
....................  #endif 
1648
....................  #define USB_EP7_RX_SIZE 0 
1648
....................  #define USB_EP7_RX_SIZE 0 
1649
.................... #else 
1649
.................... #else 
1650
....................  #ifndef USB_EP7_RX_SIZE 
1650
....................  #ifndef USB_EP7_RX_SIZE 
1651
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
1651
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
1652
....................  #endif 
1652
....................  #endif 
1653
.................... #endif 
1653
.................... #endif 
1654
....................  
1654
....................  
1655
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
1655
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
1656
....................  #ifdef USB_EP7_TX_SIZE 
1656
....................  #ifdef USB_EP7_TX_SIZE 
1657
....................   #undef USB_EP7_TX_SIZE 
1657
....................   #undef USB_EP7_TX_SIZE 
1658
....................  #endif 
1658
....................  #endif 
1659
....................  #define USB_EP7_TX_SIZE 0 
1659
....................  #define USB_EP7_TX_SIZE 0 
1660
.................... #else 
1660
.................... #else 
1661
....................  #ifndef USB_EP7_TX_SIZE 
1661
....................  #ifndef USB_EP7_TX_SIZE 
1662
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
1662
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
1663
....................  #endif 
1663
....................  #endif 
1664
.................... #endif 
1664
.................... #endif 
1665
....................  
1665
....................  
1666
....................  
1666
....................  
1667
.................... //--------- endpoint 8 defines ---------- 
1667
.................... //--------- endpoint 8 defines ---------- 
1668
.................... #ifndef USB_EP8_TX_ENABLE 
1668
.................... #ifndef USB_EP8_TX_ENABLE 
1669
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
1669
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
1670
.................... #endif 
1670
.................... #endif 
1671
.................... #ifndef USB_EP8_RX_ENABLE 
1671
.................... #ifndef USB_EP8_RX_ENABLE 
1672
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
1672
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
1673
.................... #endif 
1673
.................... #endif 
1674
....................  
1674
....................  
1675
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
1675
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
1676
....................  #ifdef USB_EP8_RX_SIZE 
1676
....................  #ifdef USB_EP8_RX_SIZE 
1677
....................   #undef USB_EP8_RX_SIZE 
1677
....................   #undef USB_EP8_RX_SIZE 
1678
....................  #endif 
1678
....................  #endif 
1679
....................  #define USB_EP8_RX_SIZE 0 
1679
....................  #define USB_EP8_RX_SIZE 0 
1680
.................... #else 
1680
.................... #else 
1681
....................  #ifndef USB_EP8_RX_SIZE 
1681
....................  #ifndef USB_EP8_RX_SIZE 
1682
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
1682
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
1683
....................  #endif 
1683
....................  #endif 
1684
.................... #endif 
1684
.................... #endif 
1685
....................  
1685
....................  
1686
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
1686
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
1687
....................  #ifdef USB_EP8_TX_SIZE 
1687
....................  #ifdef USB_EP8_TX_SIZE 
1688
....................   #undef USB_EP8_TX_SIZE 
1688
....................   #undef USB_EP8_TX_SIZE 
1689
....................  #endif 
1689
....................  #endif 
1690
....................  #define USB_EP8_TX_SIZE 0 
1690
....................  #define USB_EP8_TX_SIZE 0 
1691
.................... #else 
1691
.................... #else 
1692
....................  #ifndef USB_EP8_TX_SIZE 
1692
....................  #ifndef USB_EP8_TX_SIZE 
1693
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
1693
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
1694
....................  #endif 
1694
....................  #endif 
1695
.................... #endif 
1695
.................... #endif 
1696
....................  
1696
....................  
1697
....................  
1697
....................  
1698
.................... //--------- endpoint 9 defines ---------- 
1698
.................... //--------- endpoint 9 defines ---------- 
1699
.................... #ifndef USB_EP9_TX_ENABLE 
1699
.................... #ifndef USB_EP9_TX_ENABLE 
1700
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
1700
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
1701
.................... #endif 
1701
.................... #endif 
1702
.................... #ifndef USB_EP9_RX_ENABLE 
1702
.................... #ifndef USB_EP9_RX_ENABLE 
1703
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
1703
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
1704
.................... #endif 
1704
.................... #endif 
1705
....................  
1705
....................  
1706
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
1706
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
1707
....................  #ifdef USB_EP9_RX_SIZE 
1707
....................  #ifdef USB_EP9_RX_SIZE 
1708
....................   #undef USB_EP9_RX_SIZE 
1708
....................   #undef USB_EP9_RX_SIZE 
1709
....................  #endif 
1709
....................  #endif 
1710
....................  #define USB_EP9_RX_SIZE 0 
1710
....................  #define USB_EP9_RX_SIZE 0 
1711
.................... #else 
1711
.................... #else 
1712
....................  #ifndef USB_EP9_RX_SIZE 
1712
....................  #ifndef USB_EP9_RX_SIZE 
1713
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
1713
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
1714
....................  #endif 
1714
....................  #endif 
1715
.................... #endif 
1715
.................... #endif 
1716
....................  
1716
....................  
1717
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
1717
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
1718
....................  #ifdef USB_EP9_TX_SIZE 
1718
....................  #ifdef USB_EP9_TX_SIZE 
1719
....................   #undef USB_EP9_TX_SIZE 
1719
....................   #undef USB_EP9_TX_SIZE 
1720
....................  #endif 
1720
....................  #endif 
1721
....................  #define USB_EP9_TX_SIZE 0 
1721
....................  #define USB_EP9_TX_SIZE 0 
1722
.................... #else 
1722
.................... #else 
1723
....................  #ifndef USB_EP9_TX_SIZE 
1723
....................  #ifndef USB_EP9_TX_SIZE 
1724
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
1724
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
1725
....................  #endif 
1725
....................  #endif 
1726
.................... #endif 
1726
.................... #endif 
1727
....................  
1727
....................  
1728
....................  
1728
....................  
1729
.................... //--------- endpoint 10 defines ---------- 
1729
.................... //--------- endpoint 10 defines ---------- 
1730
.................... #ifndef USB_EP10_TX_ENABLE 
1730
.................... #ifndef USB_EP10_TX_ENABLE 
1731
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
1731
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
1732
.................... #endif 
1732
.................... #endif 
1733
.................... #ifndef USB_EP10_RX_ENABLE 
1733
.................... #ifndef USB_EP10_RX_ENABLE 
1734
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
1734
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
1735
.................... #endif 
1735
.................... #endif 
1736
....................  
1736
....................  
1737
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
1737
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
1738
....................  #ifdef USB_EP10_RX_SIZE 
1738
....................  #ifdef USB_EP10_RX_SIZE 
1739
....................   #undef USB_EP10_RX_SIZE 
1739
....................   #undef USB_EP10_RX_SIZE 
1740
....................  #endif 
1740
....................  #endif 
1741
....................  #define USB_EP10_RX_SIZE 0 
1741
....................  #define USB_EP10_RX_SIZE 0 
1742
.................... #else 
1742
.................... #else 
1743
....................  #ifndef USB_EP10_RX_SIZE 
1743
....................  #ifndef USB_EP10_RX_SIZE 
1744
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
1744
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
1745
....................  #endif 
1745
....................  #endif 
1746
.................... #endif 
1746
.................... #endif 
1747
....................  
1747
....................  
1748
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
1748
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
1749
....................  #ifdef USB_EP10_TX_SIZE 
1749
....................  #ifdef USB_EP10_TX_SIZE 
1750
....................   #undef USB_EP10_TX_SIZE 
1750
....................   #undef USB_EP10_TX_SIZE 
1751
....................  #endif 
1751
....................  #endif 
1752
....................  #define USB_EP10_TX_SIZE 0 
1752
....................  #define USB_EP10_TX_SIZE 0 
1753
.................... #else 
1753
.................... #else 
1754
....................  #ifndef USB_EP10_TX_SIZE 
1754
....................  #ifndef USB_EP10_TX_SIZE 
1755
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
1755
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
1756
....................  #endif 
1756
....................  #endif 
1757
.................... #endif 
1757
.................... #endif 
1758
....................  
1758
....................  
1759
....................  
1759
....................  
1760
.................... //--------- endpoint 11 defines ---------- 
1760
.................... //--------- endpoint 11 defines ---------- 
1761
.................... #ifndef USB_EP11_TX_ENABLE 
1761
.................... #ifndef USB_EP11_TX_ENABLE 
1762
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
1762
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
1763
.................... #endif 
1763
.................... #endif 
1764
.................... #ifndef USB_EP11_RX_ENABLE 
1764
.................... #ifndef USB_EP11_RX_ENABLE 
1765
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
1765
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
1766
.................... #endif 
1766
.................... #endif 
1767
....................  
1767
....................  
1768
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
1768
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
1769
....................  #ifdef USB_EP11_RX_SIZE 
1769
....................  #ifdef USB_EP11_RX_SIZE 
1770
....................   #undef USB_EP11_RX_SIZE 
1770
....................   #undef USB_EP11_RX_SIZE 
1771
....................  #endif 
1771
....................  #endif 
1772
....................  #define USB_EP11_RX_SIZE 0 
1772
....................  #define USB_EP11_RX_SIZE 0 
1773
.................... #else 
1773
.................... #else 
1774
....................  #ifndef USB_EP11_RX_SIZE 
1774
....................  #ifndef USB_EP11_RX_SIZE 
1775
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
1775
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
1776
....................  #endif 
1776
....................  #endif 
1777
.................... #endif 
1777
.................... #endif 
1778
....................  
1778
....................  
1779
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
1779
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
1780
....................  #ifdef USB_EP11_TX_SIZE 
1780
....................  #ifdef USB_EP11_TX_SIZE 
1781
....................   #undef USB_EP11_TX_SIZE 
1781
....................   #undef USB_EP11_TX_SIZE 
1782
....................  #endif 
1782
....................  #endif 
1783
....................  #define USB_EP11_TX_SIZE 0 
1783
....................  #define USB_EP11_TX_SIZE 0 
1784
.................... #else 
1784
.................... #else 
1785
....................  #ifndef USB_EP11_TX_SIZE 
1785
....................  #ifndef USB_EP11_TX_SIZE 
1786
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
1786
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
1787
....................  #endif 
1787
....................  #endif 
1788
.................... #endif 
1788
.................... #endif 
1789
....................  
1789
....................  
1790
....................  
1790
....................  
1791
.................... //--------- endpoint 12 defines ---------- 
1791
.................... //--------- endpoint 12 defines ---------- 
1792
.................... #ifndef USB_EP12_TX_ENABLE 
1792
.................... #ifndef USB_EP12_TX_ENABLE 
1793
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
1793
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
1794
.................... #endif 
1794
.................... #endif 
1795
.................... #ifndef USB_EP12_RX_ENABLE 
1795
.................... #ifndef USB_EP12_RX_ENABLE 
1796
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
1796
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
1797
.................... #endif 
1797
.................... #endif 
1798
....................  
1798
....................  
1799
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
1799
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
1800
....................  #ifdef USB_EP12_RX_SIZE 
1800
....................  #ifdef USB_EP12_RX_SIZE 
1801
....................   #undef USB_EP12_RX_SIZE 
1801
....................   #undef USB_EP12_RX_SIZE 
1802
....................  #endif 
1802
....................  #endif 
1803
....................  #define USB_EP12_RX_SIZE 0 
1803
....................  #define USB_EP12_RX_SIZE 0 
1804
.................... #else 
1804
.................... #else 
1805
....................  #ifndef USB_EP12_RX_SIZE 
1805
....................  #ifndef USB_EP12_RX_SIZE 
1806
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
1806
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
1807
....................  #endif 
1807
....................  #endif 
1808
.................... #endif 
1808
.................... #endif 
1809
....................  
1809
....................  
1810
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
1810
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
1811
....................  #ifdef USB_EP12_TX_SIZE 
1811
....................  #ifdef USB_EP12_TX_SIZE 
1812
....................   #undef USB_EP12_TX_SIZE 
1812
....................   #undef USB_EP12_TX_SIZE 
1813
....................  #endif 
1813
....................  #endif 
1814
....................  #define USB_EP12_TX_SIZE 0 
1814
....................  #define USB_EP12_TX_SIZE 0 
1815
.................... #else 
1815
.................... #else 
1816
....................  #ifndef USB_EP12_TX_SIZE 
1816
....................  #ifndef USB_EP12_TX_SIZE 
1817
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
1817
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
1818
....................  #endif 
1818
....................  #endif 
1819
.................... #endif 
1819
.................... #endif 
1820
....................  
1820
....................  
1821
....................  
1821
....................  
1822
.................... //--------- endpoint 13 defines ---------- 
1822
.................... //--------- endpoint 13 defines ---------- 
1823
.................... #ifndef USB_EP13_TX_ENABLE 
1823
.................... #ifndef USB_EP13_TX_ENABLE 
1824
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
1824
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
1825
.................... #endif 
1825
.................... #endif 
1826
.................... #ifndef USB_EP13_RX_ENABLE 
1826
.................... #ifndef USB_EP13_RX_ENABLE 
1827
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
1827
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
1828
.................... #endif 
1828
.................... #endif 
1829
....................  
1829
....................  
1830
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
1830
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
1831
....................  #ifdef USB_EP13_RX_SIZE 
1831
....................  #ifdef USB_EP13_RX_SIZE 
1832
....................   #undef USB_EP13_RX_SIZE 
1832
....................   #undef USB_EP13_RX_SIZE 
1833
....................  #endif 
1833
....................  #endif 
1834
....................  #define USB_EP13_RX_SIZE 0 
1834
....................  #define USB_EP13_RX_SIZE 0 
1835
.................... #else 
1835
.................... #else 
1836
....................  #ifndef USB_EP13_RX_SIZE 
1836
....................  #ifndef USB_EP13_RX_SIZE 
1837
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
1837
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
1838
....................  #endif 
1838
....................  #endif 
1839
.................... #endif 
1839
.................... #endif 
1840
....................  
1840
....................  
1841
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
1841
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
1842
....................  #ifdef USB_EP13_TX_SIZE 
1842
....................  #ifdef USB_EP13_TX_SIZE 
1843
....................   #undef USB_EP13_TX_SIZE 
1843
....................   #undef USB_EP13_TX_SIZE 
1844
....................  #endif 
1844
....................  #endif 
1845
....................  #define USB_EP13_TX_SIZE 0 
1845
....................  #define USB_EP13_TX_SIZE 0 
1846
.................... #else 
1846
.................... #else 
1847
....................  #ifndef USB_EP13_TX_SIZE 
1847
....................  #ifndef USB_EP13_TX_SIZE 
1848
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
1848
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
1849
....................  #endif 
1849
....................  #endif 
1850
.................... #endif 
1850
.................... #endif 
1851
....................  
1851
....................  
1852
....................  
1852
....................  
1853
.................... //--------- endpoint 14 defines ---------- 
1853
.................... //--------- endpoint 14 defines ---------- 
1854
.................... #ifndef USB_EP14_TX_ENABLE 
1854
.................... #ifndef USB_EP14_TX_ENABLE 
1855
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
1855
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
1856
.................... #endif 
1856
.................... #endif 
1857
.................... #ifndef USB_EP14_RX_ENABLE 
1857
.................... #ifndef USB_EP14_RX_ENABLE 
1858
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
1858
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
1859
.................... #endif 
1859
.................... #endif 
1860
....................  
1860
....................  
1861
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
1861
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
1862
....................  #ifdef USB_EP14_RX_SIZE 
1862
....................  #ifdef USB_EP14_RX_SIZE 
1863
....................   #undef USB_EP14_RX_SIZE 
1863
....................   #undef USB_EP14_RX_SIZE 
1864
....................  #endif 
1864
....................  #endif 
1865
....................  #define USB_EP14_RX_SIZE 0 
1865
....................  #define USB_EP14_RX_SIZE 0 
1866
.................... #else 
1866
.................... #else 
1867
....................  #ifndef USB_EP14_RX_SIZE 
1867
....................  #ifndef USB_EP14_RX_SIZE 
1868
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
1868
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
1869
....................  #endif 
1869
....................  #endif 
1870
.................... #endif 
1870
.................... #endif 
1871
....................  
1871
....................  
1872
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
1872
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
1873
....................  #ifdef USB_EP14_TX_SIZE 
1873
....................  #ifdef USB_EP14_TX_SIZE 
1874
....................   #undef USB_EP14_TX_SIZE 
1874
....................   #undef USB_EP14_TX_SIZE 
1875
....................  #endif 
1875
....................  #endif 
1876
....................  #define USB_EP14_TX_SIZE 0 
1876
....................  #define USB_EP14_TX_SIZE 0 
1877
.................... #else 
1877
.................... #else 
1878
....................  #ifndef USB_EP14_TX_SIZE 
1878
....................  #ifndef USB_EP14_TX_SIZE 
1879
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
1879
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
1880
....................  #endif 
1880
....................  #endif 
1881
.................... #endif 
1881
.................... #endif 
1882
....................  
1882
....................  
1883
....................  
1883
....................  
1884
.................... //--------- endpoint 15 defines ---------- 
1884
.................... //--------- endpoint 15 defines ---------- 
1885
.................... #ifndef USB_EP15_TX_ENABLE 
1885
.................... #ifndef USB_EP15_TX_ENABLE 
1886
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
1886
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
1887
.................... #endif 
1887
.................... #endif 
1888
.................... #ifndef USB_EP15_RX_ENABLE 
1888
.................... #ifndef USB_EP15_RX_ENABLE 
1889
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
1889
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
1890
.................... #endif 
1890
.................... #endif 
1891
....................  
1891
....................  
1892
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
1892
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
1893
....................  #ifdef USB_EP15_RX_SIZE 
1893
....................  #ifdef USB_EP15_RX_SIZE 
1894
....................   #undef USB_EP15_RX_SIZE 
1894
....................   #undef USB_EP15_RX_SIZE 
1895
....................  #endif 
1895
....................  #endif 
1896
....................  #define USB_EP15_RX_SIZE 0 
1896
....................  #define USB_EP15_RX_SIZE 0 
1897
.................... #else 
1897
.................... #else 
1898
....................  #ifndef USB_EP15_RX_SIZE 
1898
....................  #ifndef USB_EP15_RX_SIZE 
1899
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
1899
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
1900
....................  #endif 
1900
....................  #endif 
1901
.................... #endif 
1901
.................... #endif 
1902
....................  
1902
....................  
1903
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
1903
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
1904
....................  #ifdef USB_EP15_TX_SIZE 
1904
....................  #ifdef USB_EP15_TX_SIZE 
1905
....................   #undef USB_EP15_TX_SIZE 
1905
....................   #undef USB_EP15_TX_SIZE 
1906
....................  #endif 
1906
....................  #endif 
1907
....................  #define USB_EP15_TX_SIZE 0 
1907
....................  #define USB_EP15_TX_SIZE 0 
1908
.................... #else 
1908
.................... #else 
1909
....................  #ifndef USB_EP15_TX_SIZE 
1909
....................  #ifndef USB_EP15_TX_SIZE 
1910
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
1910
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
1911
....................  #endif 
1911
....................  #endif 
1912
.................... #endif 
1912
.................... #endif 
1913
....................  
1913
....................  
1914
.................... const int8 usb_ep_tx_type[16]={ 
1914
.................... const int8 usb_ep_tx_type[16]={ 
1915
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
1915
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
1916
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
1916
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
1917
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
1917
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
1918
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
1918
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
1919
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
1919
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
1920
....................   USB_EP15_TX_ENABLE 
1920
....................   USB_EP15_TX_ENABLE 
1921
.................... }; 
1921
.................... }; 
1922
....................  
1922
....................  
1923
.................... const int8 usb_ep_rx_type[16]={ 
1923
.................... const int8 usb_ep_rx_type[16]={ 
1924
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
1924
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
1925
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
1925
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
1926
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
1926
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
1927
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
1927
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
1928
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
1928
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
1929
....................   USB_EP15_RX_ENABLE 
1929
....................   USB_EP15_RX_ENABLE 
1930
.................... }; 
1930
.................... }; 
1931
....................  
1931
....................  
1932
.................... const unsigned int16 usb_ep_tx_size[16]={ 
1932
.................... const unsigned int16 usb_ep_tx_size[16]={ 
1933
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
1933
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
1934
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
1934
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
1935
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
1935
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
1936
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
1936
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
1937
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
1937
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
1938
....................   USB_EP15_TX_SIZE 
1938
....................   USB_EP15_TX_SIZE 
1939
.................... }; 
1939
.................... }; 
1940
....................  
1940
....................  
1941
.................... const unsigned int16 usb_ep_rx_size[16]={ 
1941
.................... const unsigned int16 usb_ep_rx_size[16]={ 
1942
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
1942
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
1943
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
1943
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
1944
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
1944
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
1945
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
1945
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
1946
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
1946
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
1947
....................   USB_EP15_RX_SIZE 
1947
....................   USB_EP15_RX_SIZE 
1948
.................... }; 
1948
.................... }; 
1949
....................  
1949
....................  
1950
.................... #ENDIF 
1950
.................... #ENDIF 
1951
....................  
1951
....................  
1952
....................  
1952
....................  
1953
.................... ////////////////////////////////////////////////////////////////// 
1953
.................... ////////////////////////////////////////////////////////////////// 
1954
.................... /// 
1954
.................... /// 
1955
.................... ///   start config descriptor 
1955
.................... ///   start config descriptor 
1956
.................... ///   right now we only support one configuration descriptor. 
1956
.................... ///   right now we only support one configuration descriptor. 
1957
.................... ///   the config, interface, class, and endpoint goes into this array. 
1957
.................... ///   the config, interface, class, and endpoint goes into this array. 
1958
.................... /// 
1958
.................... /// 
1959
.................... ////////////////////////////////////////////////////////////////// 
1959
.................... ////////////////////////////////////////////////////////////////// 
1960
....................  
1960
....................  
1961
....................    #DEFINE USB_TOTAL_CONFIG_LEN      67  //config+interface+class+endpoint+endpoint (2 endpoints) 
1961
....................    #DEFINE USB_TOTAL_CONFIG_LEN      67  //config+interface+class+endpoint+endpoint (2 endpoints) 
1962
....................  
1962
....................  
1963
....................    const char USB_CONFIG_DESC[] = { 
1963
....................    const char USB_CONFIG_DESC[] = { 
1964
....................    //IN ORDER TO COMPLY WITH WINDOWS HOSTS, THE ORDER OF THIS ARRAY MUST BE: 
1964
....................    //IN ORDER TO COMPLY WITH WINDOWS HOSTS, THE ORDER OF THIS ARRAY MUST BE: 
1965
....................       //    config(s) 
1965
....................       //    config(s) 
1966
....................       //    interface(s) 
1966
....................       //    interface(s) 
1967
....................       //    class(es) 
1967
....................       //    class(es) 
1968
....................       //    endpoint(s) 
1968
....................       //    endpoint(s) 
1969
....................  
1969
....................  
1970
....................    //config_descriptor for config index 1 
1970
....................    //config_descriptor for config index 1 
1971
....................          USB_DESC_CONFIG_LEN, //length of descriptor size          ==0 
1971
....................          USB_DESC_CONFIG_LEN, //length of descriptor size          ==0 
1972
....................          USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (CONFIGURATION 0x02)     ==1 
1972
....................          USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (CONFIGURATION 0x02)     ==1 
1973
....................          USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config      ==2,3 
1973
....................          USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config      ==2,3 
1974
....................          2, //number of interfaces this device supports       ==4 
1974
....................          2, //number of interfaces this device supports       ==4 
1975
....................          0x01, //identifier for this configuration.  (IF we had more than one configurations)      ==5 
1975
....................          0x01, //identifier for this configuration.  (IF we had more than one configurations)      ==5 
1976
....................          0x00, //index of string descriptor for this configuration      ==6 
1976
....................          0x00, //index of string descriptor for this configuration      ==6 
1977
....................         #if USB_CONFIG_BUS_POWER 
1977
....................         #if USB_CONFIG_BUS_POWER 
1978
....................          0x80, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1         ==7 
1978
....................          0x80, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1         ==7 
1979
....................         #else 
1979
....................         #else 
1980
....................          0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1         ==7 
1980
....................          0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 unused and bit7=1         ==7 
1981
....................         #endif 
1981
....................         #endif 
1982
....................          USB_CONFIG_BUS_POWER/2, //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA)   ==8 
1982
....................          USB_CONFIG_BUS_POWER/2, //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA)   ==8 
1983
....................  
1983
....................  
1984
....................  
1984
....................  
1985
....................    //interface descriptor 0 (comm class interface) 
1985
....................    //interface descriptor 0 (comm class interface) 
1986
....................          USB_DESC_INTERFACE_LEN, //length of descriptor      =9 
1986
....................          USB_DESC_INTERFACE_LEN, //length of descriptor      =9 
1987
....................          USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04)       =10 
1987
....................          USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04)       =10 
1988
....................          0x00, //number defining this interface (IF we had more than one interface)    ==11 
1988
....................          0x00, //number defining this interface (IF we had more than one interface)    ==11 
1989
....................          0x00, //alternate setting     ==12 
1989
....................          0x00, //alternate setting     ==12 
1990
....................          1, //number of endpoints   ==13 
1990
....................          1, //number of endpoints   ==13 
1991
....................          0x02, //class code, 02 = Comm Interface Class     ==14 
1991
....................          0x02, //class code, 02 = Comm Interface Class     ==14 
1992
....................          0x02, //subclass code, 2 = Abstract     ==15 
1992
....................          0x02, //subclass code, 2 = Abstract     ==15 
1993
....................          0x01, //protocol code, 1 = v.25ter      ==16 
1993
....................          0x01, //protocol code, 1 = v.25ter      ==16 
1994
....................          0x00, //index of string descriptor for interface      ==17 
1994
....................          0x00, //index of string descriptor for interface      ==17 
1995
....................  
1995
....................  
1996
....................    //class descriptor [functional header] 
1996
....................    //class descriptor [functional header] 
1997
....................          5, //length of descriptor    ==18 
1997
....................          5, //length of descriptor    ==18 
1998
....................          0x24, //dscriptor type (0x24 == )      ==19 
1998
....................          0x24, //dscriptor type (0x24 == )      ==19 
1999
....................          0, //sub type (0=functional header) ==20 
1999
....................          0, //sub type (0=functional header) ==20 
2000
....................          0x10,0x01, //      ==21,22 //cdc version 
2000
....................          0x10,0x01, //      ==21,22 //cdc version 
2001
....................  
2001
....................  
2002
....................    //class descriptor [acm header] 
2002
....................    //class descriptor [acm header] 
2003
....................          4, //length of descriptor    ==23 
2003
....................          4, //length of descriptor    ==23 
2004
....................          0x24, //dscriptor type (0x24 == )      ==24 
2004
....................          0x24, //dscriptor type (0x24 == )      ==24 
2005
....................          2, //sub type (2=ACM)   ==25 
2005
....................          2, //sub type (2=ACM)   ==25 
2006
....................          2, //capabilities    ==26  //we support Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. 
2006
....................          2, //capabilities    ==26  //we support Set_Line_Coding, Set_Control_Line_State, Get_Line_Coding, and the notification Serial_State. 
2007
....................  
2007
....................  
2008
....................    //class descriptor [union header] 
2008
....................    //class descriptor [union header] 
2009
....................          5, //length of descriptor    ==27 
2009
....................          5, //length of descriptor    ==27 
2010
....................          0x24, //dscriptor type (0x24 == )      ==28 
2010
....................          0x24, //dscriptor type (0x24 == )      ==28 
2011
....................          6, //sub type (6=union)    ==29 
2011
....................          6, //sub type (6=union)    ==29 
2012
....................          0, //master intf     ==30  //The interface number of the Communication or Dat a Cl ass interface, designated as the masteror controlling interface for the union. 
2012
....................          0, //master intf     ==30  //The interface number of the Communication or Dat a Cl ass interface, designated as the masteror controlling interface for the union. 
2013
....................          1, //save intf0      ==31  //Interface number of first slave or associated interface in the union. * 
2013
....................          1, //save intf0      ==31  //Interface number of first slave or associated interface in the union. * 
2014
....................  
2014
....................  
2015
....................    //class descriptor [call mgmt header] 
2015
....................    //class descriptor [call mgmt header] 
2016
....................          5, //length of descriptor    ==32 
2016
....................          5, //length of descriptor    ==32 
2017
....................          0x24, //dscriptor type (0x24 == )      ==33 
2017
....................          0x24, //dscriptor type (0x24 == )      ==33 
2018
....................          1, //sub type (1=call mgmt)   ==34 
2018
....................          1, //sub type (1=call mgmt)   ==34 
2019
....................          0, //capabilities          ==35  //device does not handle call management itself 
2019
....................          0, //capabilities          ==35  //device does not handle call management itself 
2020
....................          1, //data interface        ==36  //interface number of data class interface 
2020
....................          1, //data interface        ==36  //interface number of data class interface 
2021
....................  
2021
....................  
2022
....................    //endpoint descriptor 
2022
....................    //endpoint descriptor 
2023
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==37 
2023
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==37 
2024
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==38 
2024
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==38 
2025
....................          USB_CDC_COMM_IN_ENDPOINT | 0x80, //endpoint number and direction 
2025
....................          USB_CDC_COMM_IN_ENDPOINT | 0x80, //endpoint number and direction 
2026
....................          0x03, //transfer type supported (0x03 is interrupt)         ==40 
2026
....................          0x03, //transfer type supported (0x03 is interrupt)         ==40 
2027
....................          USB_CDC_COMM_IN_SIZE,0x00, //maximum packet size supported                  ==41,42 
2027
....................          USB_CDC_COMM_IN_SIZE,0x00, //maximum packet size supported                  ==41,42 
2028
....................          250,  //polling interval, in ms.  (interrupt endpoint cant be smaller than 10 for slow speed devices)      ==43 
2028
....................          250,  //polling interval, in ms.  (interrupt endpoint cant be smaller than 10 for slow speed devices)      ==43 
2029
....................  
2029
....................  
2030
....................    //interface descriptor 1 (data class interface) 
2030
....................    //interface descriptor 1 (data class interface) 
2031
....................          USB_DESC_INTERFACE_LEN, //length of descriptor      =44 
2031
....................          USB_DESC_INTERFACE_LEN, //length of descriptor      =44 
2032
....................          USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04)       =45 
2032
....................          USB_DESC_INTERFACE_TYPE, //constant INTERFACE (INTERFACE 0x04)       =45 
2033
....................          0x01, //number defining this interface (IF we had more than one interface)    ==46 
2033
....................          0x01, //number defining this interface (IF we had more than one interface)    ==46 
2034
....................          0x00, //alternate setting     ==47 
2034
....................          0x00, //alternate setting     ==47 
2035
....................          2, //number of endpoints   ==48 
2035
....................          2, //number of endpoints   ==48 
2036
....................          0x0A, //class code, 0A = Data Interface Class     ==49 
2036
....................          0x0A, //class code, 0A = Data Interface Class     ==49 
2037
....................          0x00, //subclass code      ==50 
2037
....................          0x00, //subclass code      ==50 
2038
....................          0x00, //protocol code      ==51 
2038
....................          0x00, //protocol code      ==51 
2039
....................          0x00, //index of string descriptor for interface      ==52 
2039
....................          0x00, //index of string descriptor for interface      ==52 
2040
....................  
2040
....................  
2041
....................    //endpoint descriptor 
2041
....................    //endpoint descriptor 
2042
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==53 
2042
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==53 
2043
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==54 
2043
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==54 
2044
....................          USB_CDC_DATA_OUT_ENDPOINT, //endpoint number and direction (0x02 = EP2 OUT)       ==55 
2044
....................          USB_CDC_DATA_OUT_ENDPOINT, //endpoint number and direction (0x02 = EP2 OUT)       ==55 
2045
....................          0x02, //transfer type supported (0x02 is bulk)         ==56 
2045
....................          0x02, //transfer type supported (0x02 is bulk)         ==56 
2046
....................          (USB_CDC_DATA_OUT_SIZE+1) & 0xFF, ((USB_CDC_DATA_OUT_SIZE+1) >> 8) & 0xFF, //maximum packet size supported                  ==57, 58 
2046
....................          (USB_CDC_DATA_OUT_SIZE+1) & 0xFF, ((USB_CDC_DATA_OUT_SIZE+1) >> 8) & 0xFF, //maximum packet size supported                  ==57, 58 
2047
....................          1,  //polling interval, in ms.   ==59 
2047
....................          1,  //polling interval, in ms.   ==59 
2048
....................  
2048
....................  
2049
....................    //endpoint descriptor 
2049
....................    //endpoint descriptor 
2050
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==60 
2050
....................          USB_DESC_ENDPOINT_LEN, //length of descriptor                   ==60 
2051
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==61 
2051
....................          USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (ENDPOINT 0x05)          ==61 
2052
....................          USB_CDC_DATA_IN_ENDPOINT | 0x80, //endpoint number and direction (0x82 = EP2 IN)       ==62 
2052
....................          USB_CDC_DATA_IN_ENDPOINT | 0x80, //endpoint number and direction (0x82 = EP2 IN)       ==62 
2053
....................          0x02, //transfer type supported (0x02 is bulk)         ==63 
2053
....................          0x02, //transfer type supported (0x02 is bulk)         ==63 
2054
....................          (USB_CDC_DATA_IN_SIZE+1) & 0xFF, ((USB_CDC_DATA_IN_SIZE+1) >> 8) & 0xFF, //maximum packet size supported                  ==66, 67 
2054
....................          (USB_CDC_DATA_IN_SIZE+1) & 0xFF, ((USB_CDC_DATA_IN_SIZE+1) >> 8) & 0xFF, //maximum packet size supported                  ==66, 67 
2055
....................          1,  //polling interval, in ms.   ==68 
2055
....................          1,  //polling interval, in ms.   ==68 
2056
....................    }; 
2056
....................    }; 
2057
....................  
2057
....................  
2058
....................    //****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ******** 
2058
....................    //****** BEGIN CONFIG DESCRIPTOR LOOKUP TABLES ******** 
2059
....................    //since we can't make pointers to constants in certain pic16s, this is an offset table to find 
2059
....................    //since we can't make pointers to constants in certain pic16s, this is an offset table to find 
2060
....................    //  a specific descriptor in the above table. 
2060
....................    //  a specific descriptor in the above table. 
2061
....................  
2061
....................  
2062
....................    //the maximum number of interfaces seen on any config 
2062
....................    //the maximum number of interfaces seen on any config 
2063
....................    //for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2 
2063
....................    //for example, if config 1 has 1 interface and config 2 has 2 interfaces you must define this as 2 
2064
....................    #define USB_MAX_NUM_INTERFACES   2 
2064
....................    #define USB_MAX_NUM_INTERFACES   2 
2065
....................  
2065
....................  
2066
....................    //define how many interfaces there are per config.  [0] is the first config, etc. 
2066
....................    //define how many interfaces there are per config.  [0] is the first config, etc. 
2067
....................    const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2}; 
2067
....................    const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={2}; 
2068
....................  
2068
....................  
2069
....................    //define where to find class descriptors 
2069
....................    //define where to find class descriptors 
2070
....................    //first dimension is the config number 
2070
....................    //first dimension is the config number 
2071
....................    //second dimension specifies which interface 
2071
....................    //second dimension specifies which interface 
2072
....................    //last dimension specifies which class in this interface to get, but most will only have 1 class per interface 
2072
....................    //last dimension specifies which class in this interface to get, but most will only have 1 class per interface 
2073
....................    //if a class descriptor is not valid, set the value to 0xFFFF 
2073
....................    //if a class descriptor is not valid, set the value to 0xFFFF 
2074
....................    const int8 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_INTERFACES][4]= 
2074
....................    const int8 USB_CLASS_DESCRIPTORS[USB_NUM_CONFIGURATIONS][USB_MAX_NUM_INTERFACES][4]= 
2075
....................    { 
2075
....................    { 
2076
....................    //config 1 
2076
....................    //config 1 
2077
....................       //interface 0 
2077
....................       //interface 0 
2078
....................          //class 1-4 
2078
....................          //class 1-4 
2079
....................          18,23,27,32, 
2079
....................          18,23,27,32, 
2080
....................       //interface 1 
2080
....................       //interface 1 
2081
....................          //no classes for this interface 
2081
....................          //no classes for this interface 
2082
....................          0xFF,0xFF,0xFF,0xFF 
2082
....................          0xFF,0xFF,0xFF,0xFF 
2083
....................    }; 
2083
....................    }; 
2084
....................  
2084
....................  
2085
....................    #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) 
2085
....................    #if (sizeof(USB_CONFIG_DESC) != USB_TOTAL_CONFIG_LEN) 
2086
....................       #error USB_TOTAL_CONFIG_LEN not defined correctly 
2086
....................       #error USB_TOTAL_CONFIG_LEN not defined correctly 
2087
....................    #endif 
2087
....................    #endif 
2088
....................  
2088
....................  
2089
....................  
2089
....................  
2090
.................... ////////////////////////////////////////////////////////////////// 
2090
.................... ////////////////////////////////////////////////////////////////// 
2091
.................... /// 
2091
.................... /// 
2092
.................... ///   start device descriptors 
2092
.................... ///   start device descriptors 
2093
.................... /// 
2093
.................... /// 
2094
.................... ////////////////////////////////////////////////////////////////// 
2094
.................... ////////////////////////////////////////////////////////////////// 
2095
....................  
2095
....................  
2096
....................    const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={ 
2096
....................    const char USB_DEVICE_DESC[USB_DESC_DEVICE_LEN] ={ 
2097
....................       //starts of with device configuration. only one possible 
2097
....................       //starts of with device configuration. only one possible 
2098
....................          USB_DESC_DEVICE_LEN, //the length of this report   ==0 
2098
....................          USB_DESC_DEVICE_LEN, //the length of this report   ==0 
2099
....................          0x01, //the constant DEVICE (DEVICE 0x01)  ==1 
2099
....................          0x01, //the constant DEVICE (DEVICE 0x01)  ==1 
2100
....................          0x10,0x01, //usb version in bcd  ==2,3 
2100
....................          0x10,0x01, //usb version in bcd  ==2,3 
2101
....................          0x02, //class code. 0x02=Communication Device Class ==4 
2101
....................          0x02, //class code. 0x02=Communication Device Class ==4 
2102
....................          0x00, //subclass code ==5 
2102
....................          0x00, //subclass code ==5 
2103
....................          0x00, //protocol code ==6 
2103
....................          0x00, //protocol code ==6 
2104
....................          USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7 
2104
....................          USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW SPEED SPECIFIES 8) ==7 
2105
....................          USB_CONFIG_VID & 0xFF, ((USB_CONFIG_VID >> 8) & 0xFF), //vendor id       ==9, 10 
2105
....................          USB_CONFIG_VID & 0xFF, ((USB_CONFIG_VID >> 8) & 0xFF), //vendor id       ==9, 10 
2106
....................          USB_CONFIG_PID & 0xFF, ((USB_CONFIG_PID >> 8) & 0xFF), //product id, don't use 0xffff       ==11, 12 
2106
....................          USB_CONFIG_PID & 0xFF, ((USB_CONFIG_PID >> 8) & 0xFF), //product id, don't use 0xffff       ==11, 12 
2107
....................          USB_CONFIG_VERSION & 0xFF, ((USB_CONFIG_VERSION >> 8) & 0xFF), //device release number  ==13,14 
2107
....................          USB_CONFIG_VERSION & 0xFF, ((USB_CONFIG_VERSION >> 8) & 0xFF), //device release number  ==13,14 
2108
....................          0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below)  ==14 
2108
....................          0x01, //index of string description of manufacturer. therefore we point to string_1 array (see below)  ==14 
2109
....................          0x02, //index of string descriptor of the product  ==15 
2109
....................          0x02, //index of string descriptor of the product  ==15 
2110
....................          0x00, //index of string descriptor of serial number  ==16 
2110
....................          0x00, //index of string descriptor of serial number  ==16 
2111
....................          USB_NUM_CONFIGURATIONS  //number of possible configurations  ==17 
2111
....................          USB_NUM_CONFIGURATIONS  //number of possible configurations  ==17 
2112
....................    }; 
2112
....................    }; 
2113
....................  
2113
....................  
2114
....................  
2114
....................  
2115
.................... ////////////////////////////////////////////////////////////////// 
2115
.................... ////////////////////////////////////////////////////////////////// 
2116
.................... /// 
2116
.................... /// 
2117
.................... ///   start string descriptors 
2117
.................... ///   start string descriptors 
2118
.................... ///   String 0 is a special language string, and must be defined.  People in U.S.A. can leave this alone. 
2118
.................... ///   String 0 is a special language string, and must be defined.  People in U.S.A. can leave this alone. 
2119
.................... /// 
2119
.................... /// 
2120
.................... ///   You must define the length else get_next_string_character() will not see the string 
2120
.................... ///   You must define the length else get_next_string_character() will not see the string 
2121
.................... ///   Current code only supports 10 strings (0 thru 9) 
2121
.................... ///   Current code only supports 10 strings (0 thru 9) 
2122
.................... /// 
2122
.................... /// 
2123
.................... ////////////////////////////////////////////////////////////////// 
2123
.................... ////////////////////////////////////////////////////////////////// 
2124
....................  
2124
....................  
2125
.................... #if !defined(USB_STRINGS_OVERWRITTEN) 
2125
.................... #if !defined(USB_STRINGS_OVERWRITTEN) 
2126
.................... //the offset of the starting location of each string.  offset[0] is the start of string 0, offset[1] is the start of string 1, etc. 
2126
.................... //the offset of the starting location of each string.  offset[0] is the start of string 0, offset[1] is the start of string 1, etc. 
2127
.................... char USB_STRING_DESC_OFFSET[]={0,4,12}; 
2127
.................... char USB_STRING_DESC_OFFSET[]={0,4,12}; 
2128
....................  
2128
....................  
2129
.................... // Here is where the "CCS" Manufacturer string and "SERIAL DEMO" are stored. 
2129
.................... // Here is where the "CCS" Manufacturer string and "SERIAL DEMO" are stored. 
2130
.................... // Strings are saved as unicode. 
2130
.................... // Strings are saved as unicode. 
2131
.................... // These strings are mostly only displayed during the add hardware wizard. 
2131
.................... // These strings are mostly only displayed during the add hardware wizard. 
2132
.................... // Once the operating system drivers have been installed it will usually display 
2132
.................... // Once the operating system drivers have been installed it will usually display 
2133
.................... // the name from the drivers .INF. 
2133
.................... // the name from the drivers .INF. 
2134
.................... char const USB_STRING_DESC[]={ 
2134
.................... char const USB_STRING_DESC[]={ 
2135
....................    //string 0 
2135
....................    //string 0 
2136
....................          4, //length of string index 
2136
....................          4, //length of string index 
2137
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2137
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2138
....................          0x09,0x04,   //Microsoft Defined for US-English 
2138
....................          0x09,0x04,   //Microsoft Defined for US-English 
2139
....................    //string 1  - manufacturer 
2139
....................    //string 1  - manufacturer 
2140
....................          8, //length of string index 
2140
....................          8, //length of string index 
2141
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2141
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2142
....................          'C',0, 
2142
....................          'C',0, 
2143
....................          'C',0, 
2143
....................          'C',0, 
2144
....................          'S',0, 
2144
....................          'S',0, 
2145
....................    //string 2 - product 
2145
....................    //string 2 - product 
2146
....................          24, //length of string index 
2146
....................          24, //length of string index 
2147
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2147
....................          USB_DESC_STRING_TYPE, //descriptor type 0x03 (STRING) 
2148
....................          'S',0, 
2148
....................          'S',0, 
2149
....................          'E',0, 
2149
....................          'E',0, 
2150
....................          'R',0, 
2150
....................          'R',0, 
2151
....................          'I',0, 
2151
....................          'I',0, 
2152
....................          'A',0, 
2152
....................          'A',0, 
2153
....................          'L',0, 
2153
....................          'L',0, 
2154
....................          ' ',0, 
2154
....................          ' ',0, 
2155
....................          'D',0, 
2155
....................          'D',0, 
2156
....................          'E',0, 
2156
....................          'E',0, 
2157
....................          'M',0, 
2157
....................          'M',0, 
2158
....................          'O',0 
2158
....................          'O',0 
2159
.................... }; 
2159
.................... }; 
2160
.................... #endif   //!defined(USB_STRINGS_OVERWRITTEN) 
2160
.................... #endif   //!defined(USB_STRINGS_OVERWRITTEN) 
2161
....................  
2161
....................  
2162
.................... #ENDIF 
2162
.................... #ENDIF 
2163
....................  
2163
....................  
2164
.................... #include <usb.c>        //handles usb setup tokens and get descriptor reports 
2164
.................... #include <usb.c>        //handles usb setup tokens and get descriptor reports 
2165
.................... /////////////////////////////////////////////////////////////////////////// 
2165
.................... /////////////////////////////////////////////////////////////////////////// 
2166
.................... ////                             usb.c                                 //// 
2166
.................... ////                             usb.c                                 //// 
2167
.................... ////                                                                   //// 
2167
.................... ////                                                                   //// 
2168
.................... //// Standard USB request and token handler code.                      //// 
2168
.................... //// Standard USB request and token handler code.                      //// 
2169
.................... ////                                                                   //// 
2169
.................... ////                                                                   //// 
2170
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H        //// 
2170
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H        //// 
2171
.................... //// for more documentation and a list of examples.                    //// 
2171
.................... //// for more documentation and a list of examples.                    //// 
2172
.................... ////                                                                   //// 
2172
.................... ////                                                                   //// 
2173
.................... //// The majority of this code is called and used by the interrupt     //// 
2173
.................... //// The majority of this code is called and used by the interrupt     //// 
2174
.................... //// generated by the hardware level, and therefore it is not meant    //// 
2174
.................... //// generated by the hardware level, and therefore it is not meant    //// 
2175
.................... //// to be called by the user.  The functions that are meant to be     //// 
2175
.................... //// to be called by the user.  The functions that are meant to be     //// 
2176
.................... //// called by the user (init, put packet, get packet, etc) are        //// 
2176
.................... //// called by the user (init, put packet, get packet, etc) are        //// 
2177
.................... //// documented in USB.H.                                              //// 
2177
.................... //// documented in USB.H.                                              //// 
2178
.................... ////                                                                   //// 
2178
.................... ////                                                                   //// 
2179
.................... ////   *************************  NOTE  **************************     //// 
2179
.................... ////   *************************  NOTE  **************************     //// 
2180
.................... ////    This code will not create a multiple configuration device.     //// 
2180
.................... ////    This code will not create a multiple configuration device.     //// 
2181
.................... ////    If you wish to create a multiple configuration device then you //// 
2181
.................... ////    If you wish to create a multiple configuration device then you //// 
2182
.................... ////    will have to modify these drivers.                             //// 
2182
.................... ////    will have to modify these drivers.                             //// 
2183
.................... ////                                                                   //// 
2183
.................... ////                                                                   //// 
2184
.................... ////   *************************  NOTE  **************************     //// 
2184
.................... ////   *************************  NOTE  **************************     //// 
2185
.................... ////   This code does not support Get_Idle or Set_Idle HID-specific    //// 
2185
.................... ////   This code does not support Get_Idle or Set_Idle HID-specific    //// 
2186
.................... ////   requests.  These requests are optional.  If you want to support //// 
2186
.................... ////   requests.  These requests are optional.  If you want to support //// 
2187
.................... ////   these requests you must provide the code yourself.  See         //// 
2187
.................... ////   these requests you must provide the code yourself.  See         //// 
2188
.................... ////   usb_isr_tkn_setup_ClassInterface() if you wish to add this      //// 
2188
.................... ////   usb_isr_tkn_setup_ClassInterface() if you wish to add this      //// 
2189
.................... ////   support.                                                        //// 
2189
.................... ////   support.                                                        //// 
2190
.................... ////                                                                   //// 
2190
.................... ////                                                                   //// 
2191
.................... /////////////////////////////////////////////////////////////////////////// 
2191
.................... /////////////////////////////////////////////////////////////////////////// 
2192
.................... ////                                                                   //// 
2192
.................... ////                                                                   //// 
2193
.................... //// If you wish to provide your own USB peripheral hardware layer, it //// 
2193
.................... //// If you wish to provide your own USB peripheral hardware layer, it //// 
2194
.................... //// must must provide the API as described in usb_hw_layer.h.         //// 
2194
.................... //// must must provide the API as described in usb_hw_layer.h.         //// 
2195
.................... ////                                                                   //// 
2195
.................... ////                                                                   //// 
2196
.................... /////////////////////////////////////////////////////////////////////////// 
2196
.................... /////////////////////////////////////////////////////////////////////////// 
2197
.................... ////                                                                   //// 
2197
.................... ////                                                                   //// 
2198
.................... //// Version History:                                                  //// 
2198
.................... //// Version History:                                                  //// 
2199
.................... ////                                                                   //// 
2199
.................... ////                                                                   //// 
2200
.................... //// March 5th, 2009:                                                  //// 
2200
.................... //// March 5th, 2009:                                                  //// 
2201
.................... ////   Cleanup for Wizard.                                             //// 
2201
.................... ////   Cleanup for Wizard.                                             //// 
2202
.................... ////   PIC24 Initial release.                                          //// 
2202
.................... ////   PIC24 Initial release.                                          //// 
2203
.................... ////                                                                   //// 
2203
.................... ////                                                                   //// 
2204
.................... //// Dec 14, 2007:                                                     //// 
2204
.................... //// Dec 14, 2007:                                                     //// 
2205
.................... ////  usb_kbhit() moved to device driver.                              //// 
2205
.................... ////  usb_kbhit() moved to device driver.                              //// 
2206
.................... ////                                                                   //// 
2206
.................... ////                                                                   //// 
2207
.................... //// July 13th, 2005:                                                  //// 
2207
.................... //// July 13th, 2005:                                                  //// 
2208
.................... ////  usb_puts() packet_size and this_packet_len changed to 16bits.    //// 
2208
.................... ////  usb_puts() packet_size and this_packet_len changed to 16bits.    //// 
2209
.................... ////  usb_gets() len, packet_size and this_packet_len to 16bits.       //// 
2209
.................... ////  usb_gets() len, packet_size and this_packet_len to 16bits.       //// 
2210
.................... ////                                                                   //// 
2210
.................... ////                                                                   //// 
2211
.................... //// June 20th, 2005:                                                  //// 
2211
.................... //// June 20th, 2005:                                                  //// 
2212
.................... ////  Initial 18fxx5x release.                                         //// 
2212
.................... ////  Initial 18fxx5x release.                                         //// 
2213
.................... ////  usb_kbhit() removed, usb_kbhit() now implemented in hardware     //// 
2213
.................... ////  usb_kbhit() removed, usb_kbhit() now implemented in hardware     //// 
2214
.................... ////    layer.                                                         //// 
2214
.................... ////    layer.                                                         //// 
2215
.................... ////                                                                   //// 
2215
.................... ////                                                                   //// 
2216
.................... //// May 13th, 2005:                                                   //// 
2216
.................... //// May 13th, 2005:                                                   //// 
2217
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
2217
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
2218
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
2218
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
2219
.................... ////   will have to be changed, see examples)                          //// 
2219
.................... ////   will have to be changed, see examples)                          //// 
2220
.................... ////  TODO: alot of indexing and length handling for descriptors is    //// 
2220
.................... ////  TODO: alot of indexing and length handling for descriptors is    //// 
2221
.................... ////   only 8bit, so make sure all descriptor tables are less than     //// 
2221
.................... ////   only 8bit, so make sure all descriptor tables are less than     //// 
2222
.................... ////   256 bytes long.                                                 //// 
2222
.................... ////   256 bytes long.                                                 //// 
2223
.................... ////                                                                   //// 
2223
.................... ////                                                                   //// 
2224
.................... //// Apr 21st, 2005:                                                   //// 
2224
.................... //// Apr 21st, 2005:                                                   //// 
2225
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
2225
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
2226
.................... ////   WITH 18F4550)                                                   //// 
2226
.................... ////   WITH 18F4550)                                                   //// 
2227
.................... ////  usb_puts() doesn't need max packet size as a paremeter, uses     //// 
2227
.................... ////  usb_puts() doesn't need max packet size as a paremeter, uses     //// 
2228
.................... ////   usb_ep_tx_size[] defined in usb.h                               //// 
2228
.................... ////   usb_ep_tx_size[] defined in usb.h                               //// 
2229
.................... ////  usb_puts() timeout parameter now in ms, not seconds.             //// 
2229
.................... ////  usb_puts() timeout parameter now in ms, not seconds.             //// 
2230
.................... ////  USB Stack no longer buffers incoming data.  If there is data to  //// 
2230
.................... ////  USB Stack no longer buffers incoming data.  If there is data to  //// 
2231
.................... ////   get usb_kbhit(en) will return TRUE and the data will sit in     //// 
2231
.................... ////   get usb_kbhit(en) will return TRUE and the data will sit in     //// 
2232
.................... ////   the endpoint buffer until you usb_get_packet(), which will      //// 
2232
.................... ////   the endpoint buffer until you usb_get_packet(), which will      //// 
2233
.................... ////   then free the endpoint buffer for more data.  This affects      //// 
2233
.................... ////   then free the endpoint buffer for more data.  This affects      //// 
2234
.................... ////   routines such as usb_gets() and usb_kbhit().                    //// 
2234
.................... ////   routines such as usb_gets() and usb_kbhit().                    //// 
2235
.................... ////  usb_gets() no longer reads buffered data (see above note),       //// 
2235
.................... ////  usb_gets() no longer reads buffered data (see above note),       //// 
2236
.................... ////   now it reads multiple packets in the same way usb_puts()        //// 
2236
.................... ////   now it reads multiple packets in the same way usb_puts()        //// 
2237
.................... ////   writes multiple packets                                         //// 
2237
.................... ////   writes multiple packets                                         //// 
2238
.................... ////  usb_kbhit() is hardware specific, so has been moved to hardware  //// 
2238
.................... ////  usb_kbhit() is hardware specific, so has been moved to hardware  //// 
2239
.................... ////   layer.                                                          //// 
2239
.................... ////   layer.                                                          //// 
2240
.................... ////                                                                   //// 
2240
.................... ////                                                                   //// 
2241
.................... //// Nov 11th, 2004:                                                   //// 
2241
.................... //// Nov 11th, 2004:                                                   //// 
2242
.................... ////  No longer includes wrong descriptor header.                      //// 
2242
.................... ////  No longer includes wrong descriptor header.                      //// 
2243
.................... ////                                                                   //// 
2243
.................... ////                                                                   //// 
2244
.................... //// June 24th, 2004:                                                  //// 
2244
.................... //// June 24th, 2004:                                                  //// 
2245
.................... ////  Optimization and cleanup.                                        //// 
2245
.................... ////  Optimization and cleanup.                                        //// 
2246
.................... ////                The following definitions changed:                 //// 
2246
.................... ////                The following definitions changed:                 //// 
2247
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
2247
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
2248
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
2248
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
2249
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
2249
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
2250
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
2250
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
2251
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
2251
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
2252
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
2252
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
2253
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
2253
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
2254
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
2254
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
2255
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
2255
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
2256
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
2256
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
2257
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
2257
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
2258
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
2258
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
2259
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
2259
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
2260
.................... ////        variables moved into struct USB_stack_status               //// 
2260
.................... ////        variables moved into struct USB_stack_status               //// 
2261
.................... ////                                                                   //// 
2261
.................... ////                                                                   //// 
2262
.................... //// December 5th, 2003: Fixed a potential bug where descriptors are   //// 
2262
.................... //// December 5th, 2003: Fixed a potential bug where descriptors are   //// 
2263
.................... ////         evenly dividable by 8 (MAX_EP0_PACKET_SIZE)               //// 
2263
.................... ////         evenly dividable by 8 (MAX_EP0_PACKET_SIZE)               //// 
2264
.................... ////                                                                   //// 
2264
.................... ////                                                                   //// 
2265
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
2265
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
2266
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
2266
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
2267
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
2267
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
2268
.................... ////         interface is in.  It is your applications job to send     //// 
2268
.................... ////         interface is in.  It is your applications job to send     //// 
2269
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
2269
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
2270
.................... ////                                                                   //// 
2270
.................... ////                                                                   //// 
2271
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
2271
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
2272
.................... ////                                                                   //// 
2272
.................... ////                                                                   //// 
2273
.................... //// October 28th, 2002: Problem with usb_puts and timeout fixed.      //// 
2273
.................... //// October 28th, 2002: Problem with usb_puts and timeout fixed.      //// 
2274
.................... ////                                                                   //// 
2274
.................... ////                                                                   //// 
2275
.................... //// October 28th, 2002: Typo fixed in get_next_string_character(),    //// 
2275
.................... //// October 28th, 2002: Typo fixed in get_next_string_character(),    //// 
2276
.................... ////                     although it didn't cause any serious problems //// 
2276
.................... ////                     although it didn't cause any serious problems //// 
2277
.................... ////                                                                   //// 
2277
.................... ////                                                                   //// 
2278
.................... //// October 25th, 2002: Another change to usb_puts() was made to fix  //// 
2278
.................... //// October 25th, 2002: Another change to usb_puts() was made to fix  //// 
2279
.................... ////                     problems with multiple packet messages        //// 
2279
.................... ////                     problems with multiple packet messages        //// 
2280
.................... //// October 29th, 2002: Fixed a problem with multiple packet string   //// 
2280
.................... //// October 29th, 2002: Fixed a problem with multiple packet string   //// 
2281
.................... ////                     descriptors that require a 0 len packet to    //// 
2281
.................... ////                     descriptors that require a 0 len packet to    //// 
2282
.................... ////                     end message.                                  //// 
2282
.................... ////                     end message.                                  //// 
2283
.................... ////                                                                   //// 
2283
.................... ////                                                                   //// 
2284
.................... //// October 23rd, 2002: usb_puts() will bomb out of error quicker     //// 
2284
.................... //// October 23rd, 2002: usb_puts() will bomb out of error quicker     //// 
2285
.................... ////                                                                   //// 
2285
.................... ////                                                                   //// 
2286
.................... //// August 2nd, 2002: Initial Public Release                          //// 
2286
.................... //// August 2nd, 2002: Initial Public Release                          //// 
2287
.................... ////                                                                   //// 
2287
.................... ////                                                                   //// 
2288
.................... /////////////////////////////////////////////////////////////////////////// 
2288
.................... /////////////////////////////////////////////////////////////////////////// 
2289
.................... ////        (C) Copyright 1996,2005 Custom Computer Services           //// 
2289
.................... ////        (C) Copyright 1996,2005 Custom Computer Services           //// 
2290
.................... //// This source code may only be used by licensed users of the CCS    //// 
2290
.................... //// This source code may only be used by licensed users of the CCS    //// 
2291
.................... //// C compiler.  This source code may only be distributed to other    //// 
2291
.................... //// C compiler.  This source code may only be distributed to other    //// 
2292
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
2292
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
2293
.................... //// reproduction or distribution is permitted without written         //// 
2293
.................... //// reproduction or distribution is permitted without written         //// 
2294
.................... //// permission.  Derivative programs created using this software      //// 
2294
.................... //// permission.  Derivative programs created using this software      //// 
2295
.................... //// in object code form are not restricted in any way.                //// 
2295
.................... //// in object code form are not restricted in any way.                //// 
2296
.................... /////////////////////////////////////////////////////////////////////////// 
2296
.................... /////////////////////////////////////////////////////////////////////////// 
2297
....................  
2297
....................  
2298
.................... #IFNDEF __USB_DRIVER__ 
2298
.................... #IFNDEF __USB_DRIVER__ 
2299
.................... #DEFINE __USB_DRIVER__ 
2299
.................... #DEFINE __USB_DRIVER__ 
2300
....................  
2300
....................  
2301
.................... #include <usb.h> 
2301
.................... #include <usb.h> 
2302
.................... /////////////////////////////////////////////////////////////////////////// 
2302
.................... /////////////////////////////////////////////////////////////////////////// 
2303
.................... ////                              usb.h                                //// 
2303
.................... ////                              usb.h                                //// 
2304
.................... ////                                                                   //// 
2304
.................... ////                                                                   //// 
2305
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
2305
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
2306
.................... ////                                                                   //// 
2306
.................... ////                                                                   //// 
2307
.................... //// This file is part of CCS's USB driver code                        //// 
2307
.................... //// This file is part of CCS's USB driver code                        //// 
2308
.................... ////                                                                   //// 
2308
.................... ////                                                                   //// 
2309
.................... //// The following USB examples are provided by CCS:                   //// 
2309
.................... //// The following USB examples are provided by CCS:                   //// 
2310
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
2310
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
2311
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
2311
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
2312
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
2312
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
2313
.................... ////                      interfaces.                                  //// 
2313
.................... ////                      interfaces.                                  //// 
2314
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
2314
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
2315
.................... ////                      HID Reports.                                 //// 
2315
.................... ////                      HID Reports.                                 //// 
2316
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
2316
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
2317
.................... ////                    protocol requiring custom Windows drivers.     //// 
2317
.................... ////                    protocol requiring custom Windows drivers.     //// 
2318
.................... ////   ex_usb_serial.c -                                               //// 
2318
.................... ////   ex_usb_serial.c -                                               //// 
2319
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
2319
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
2320
.................... ////     a virtual COM port.                                           //// 
2320
.................... ////     a virtual COM port.                                           //// 
2321
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
2321
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
2322
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
2322
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
2323
.................... ////        compatible with ex_usb_mouse.c.                            //// 
2323
.................... ////        compatible with ex_usb_mouse.c.                            //// 
2324
.................... ////                                                                   //// 
2324
.................... ////                                                                   //// 
2325
.................... ////        ********************** API *********************           //// 
2325
.................... ////        ********************** API *********************           //// 
2326
.................... ////                                                                   //// 
2326
.................... ////                                                                   //// 
2327
.................... //// These are the functions that are meant to be called by the user:  //// 
2327
.................... //// These are the functions that are meant to be called by the user:  //// 
2328
.................... ////                                                                   //// 
2328
.................... ////                                                                   //// 
2329
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
2329
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
2330
.................... ////              attaches the unit to the usb bus.  Enables           //// 
2330
.................... ////              attaches the unit to the usb bus.  Enables           //// 
2331
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
2331
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
2332
.................... ////              the device enumerates - if you are using             //// 
2332
.................... ////              the device enumerates - if you are using             //// 
2333
.................... ////              connection sense or if the processor should run      //// 
2333
.................... ////              connection sense or if the processor should run      //// 
2334
.................... ////              even if it's not connected to USB then use           //// 
2334
.................... ////              even if it's not connected to USB then use           //// 
2335
.................... ////              usb_init_cs() instead.                               //// 
2335
.................... ////              usb_init_cs() instead.                               //// 
2336
.................... ////                                                                   //// 
2336
.................... ////                                                                   //// 
2337
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
2337
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
2338
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
2338
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
2339
.................... ////              not attach to the USB, you must periodically call    //// 
2339
.................... ////              not attach to the USB, you must periodically call    //// 
2340
.................... ////              usb_task().  See usb_task() for more information.    //// 
2340
.................... ////              usb_task().  See usb_task() for more information.    //// 
2341
.................... ////                                                                   //// 
2341
.................... ////                                                                   //// 
2342
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
2342
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
2343
.................... ////        peripheral, usb_task() should then be called periodically  //// 
2343
.................... ////        peripheral, usb_task() should then be called periodically  //// 
2344
.................... ////        to check the connection sense pin.  If the connection      //// 
2344
.................... ////        to check the connection sense pin.  If the connection      //// 
2345
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
2345
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
2346
.................... ////        is not attached, this will attach the USB peripheral       //// 
2346
.................... ////        is not attached, this will attach the USB peripheral       //// 
2347
.................... ////        so the PC can start the enumeration process (and it        //// 
2347
.................... ////        so the PC can start the enumeration process (and it        //// 
2348
.................... ////        will enable interrupts).  If the connection sense pin      //// 
2348
.................... ////        will enable interrupts).  If the connection sense pin      //// 
2349
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
2349
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
2350
.................... ////        running, this will reset the USB peripheral and wait       //// 
2350
.................... ////        running, this will reset the USB peripheral and wait       //// 
2351
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
2351
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
2352
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
2352
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
2353
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
2353
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
2354
.................... ////        connected.                                                 //// 
2354
.................... ////        connected.                                                 //// 
2355
.................... ////                                                                   //// 
2355
.................... ////                                                                   //// 
2356
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
2356
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
2357
.................... ////                  USB cable.  A macro that looks at the defined    //// 
2357
.................... ////                  USB cable.  A macro that looks at the defined    //// 
2358
.................... ////                  connection sense pin.  If this returns TRUE      //// 
2358
.................... ////                  connection sense pin.  If this returns TRUE      //// 
2359
.................... ////                  it does not mean the PC has connected to it,     //// 
2359
.................... ////                  it does not mean the PC has connected to it,     //// 
2360
.................... ////                  you need to use usb_enumerated() to check this.  //// 
2360
.................... ////                  you need to use usb_enumerated() to check this.  //// 
2361
.................... ////                                                                   //// 
2361
.................... ////                                                                   //// 
2362
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
2362
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
2363
.................... ////                    (configured) by host, FALSE if it has not.     //// 
2363
.................... ////                    (configured) by host, FALSE if it has not.     //// 
2364
.................... ////                    Do not try to use the USB peripheral for       //// 
2364
.................... ////                    Do not try to use the USB peripheral for       //// 
2365
.................... ////                    sending and receiving packets until you        //// 
2365
.................... ////                    sending and receiving packets until you        //// 
2366
.................... ////                    are enumerated.                                //// 
2366
.................... ////                    are enumerated.                                //// 
2367
.................... ////                                                                   //// 
2367
.................... ////                                                                   //// 
2368
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
2368
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
2369
.................... ////                              is enumerated.                       //// 
2369
.................... ////                              is enumerated.                       //// 
2370
.................... ////                                                                   //// 
2370
.................... ////                                                                   //// 
2371
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
2371
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
2372
.................... ////     is free and ready to accept a new packet for transmission.    //// 
2372
.................... ////     is free and ready to accept a new packet for transmission.    //// 
2373
.................... ////                                                                   //// 
2373
.................... ////                                                                   //// 
2374
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
2374
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
2375
.................... ////                    host.  If you need to send a message that      //// 
2375
.................... ////                    host.  If you need to send a message that      //// 
2376
.................... ////                    spans more than one packet then use            //// 
2376
.................... ////                    spans more than one packet then use            //// 
2377
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
2377
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
2378
.................... ////                    see usb_hw_layer.h                             //// 
2378
.................... ////                    see usb_hw_layer.h                             //// 
2379
.................... ////                                                                   //// 
2379
.................... ////                                                                   //// 
2380
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
2380
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
2381
.................... ////     message to the host.  If you only need to send one packet,    //// 
2381
.................... ////     message to the host.  If you only need to send one packet,    //// 
2382
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
2382
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
2383
.................... ////     documented in more detail above the prototype in USB.H.       //// 
2383
.................... ////     documented in more detail above the prototype in USB.H.       //// 
2384
.................... ////                                                                   //// 
2384
.................... ////                                                                   //// 
2385
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
2385
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
2386
.................... ////               from host.  This will remain TRUE until             //// 
2386
.................... ////               from host.  This will remain TRUE until             //// 
2387
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
2387
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
2388
.................... ////               This function will return an invalid response       //// 
2388
.................... ////               This function will return an invalid response       //// 
2389
.................... ////               if specified endpoint is not enabled for            //// 
2389
.................... ////               if specified endpoint is not enabled for            //// 
2390
.................... ////               receiving data.                                     //// 
2390
.................... ////               receiving data.                                     //// 
2391
.................... ////                                                                   //// 
2391
.................... ////                                                                   //// 
2392
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
2392
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
2393
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
2393
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
2394
.................... ////        call this routine or your data may not be valid.  This     //// 
2394
.................... ////        call this routine or your data may not be valid.  This     //// 
2395
.................... ////        only receives one packet, if you are trying to receive a   ////  
2395
.................... ////        only receives one packet, if you are trying to receive a   ////  
2396
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
2396
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
2397
.................... ////        documentation see usb_hw_layer.h.                          //// 
2397
.................... ////        documentation see usb_hw_layer.h.                          //// 
2398
.................... ////                                                                   //// 
2398
.................... ////                                                                   //// 
2399
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
2399
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
2400
.................... ////        packets from the host, you would use this instead          //// 
2400
.................... ////        packets from the host, you would use this instead          //// 
2401
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
2401
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
2402
.................... ////        messages.  This is documented in more detail above the     //// 
2402
.................... ////        messages.  This is documented in more detail above the     //// 
2403
.................... ////        prototype in USB.H.                                        //// 
2403
.................... ////        prototype in USB.H.                                        //// 
2404
.................... ////                                                                   //// 
2404
.................... ////                                                                   //// 
2405
.................... ////                                                                   //// 
2405
.................... ////                                                                   //// 
2406
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
2406
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
2407
.................... ////                                                                   //// 
2407
.................... ////                                                                   //// 
2408
.................... //// The following definitions are declared here, but can be           //// 
2408
.................... //// The following definitions are declared here, but can be           //// 
2409
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
2409
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
2410
.................... //// to default value.  If confused about a definition read the        //// 
2410
.................... //// to default value.  If confused about a definition read the        //// 
2411
.................... //// comments at each defintion                                        //// 
2411
.................... //// comments at each defintion                                        //// 
2412
.................... ////                                                                   //// 
2412
.................... ////                                                                   //// 
2413
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
2413
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
2414
.................... ////                            Set_Idle HID class request.  Set to    //// 
2414
.................... ////                            Set_Idle HID class request.  Set to    //// 
2415
.................... ////                            False if you do not (device will       //// 
2415
.................... ////                            False if you do not (device will       //// 
2416
.................... ////                            send a Wrong-state if computer         //// 
2416
.................... ////                            send a Wrong-state if computer         //// 
2417
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
2417
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
2418
.................... ////                            NOTE: If you set to TRUE you must      //// 
2418
.................... ////                            NOTE: If you set to TRUE you must      //// 
2419
.................... ////                            provide your own code.  See            //// 
2419
.................... ////                            provide your own code.  See            //// 
2420
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
2420
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
2421
.................... ////                            usb.c                                  //// 
2421
.................... ////                            usb.c                                  //// 
2422
.................... ////                                                                   //// 
2422
.................... ////                                                                   //// 
2423
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
2423
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
2424
.................... ////                            Set_Protocl HID class request. Set to  //// 
2424
.................... ////                            Set_Protocl HID class request. Set to  //// 
2425
.................... ////                            False if you do not (device will       //// 
2425
.................... ////                            False if you do not (device will       //// 
2426
.................... ////                            send a Wrong-state if computer         //// 
2426
.................... ////                            send a Wrong-state if computer         //// 
2427
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
2427
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
2428
.................... ////                            command).                              //// 
2428
.................... ////                            command).                              //// 
2429
.................... ////                            NOTE: If you set to TRUE you must      //// 
2429
.................... ////                            NOTE: If you set to TRUE you must      //// 
2430
.................... ////                            provide your own code in the           //// 
2430
.................... ////                            provide your own code in the           //// 
2431
.................... ////                            application that properly send boot    //// 
2431
.................... ////                            application that properly send boot    //// 
2432
.................... ////                            or HID packets.                        //// 
2432
.................... ////                            or HID packets.                        //// 
2433
.................... ////                                                                   //// 
2433
.................... ////                                                                   //// 
2434
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
2434
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
2435
.................... ////                            The hardware level driver (ex          //// 
2435
.................... ////                            The hardware level driver (ex          //// 
2436
.................... ////                            pic18_usb.h will define this value if  //// 
2436
.................... ////                            pic18_usb.h will define this value if  //// 
2437
.................... ////                            not already overwritten).  Increasing  //// 
2437
.................... ////                            not already overwritten).  Increasing  //// 
2438
.................... ////                            this size will speed up the            //// 
2438
.................... ////                            this size will speed up the            //// 
2439
.................... ////                            enumeration process.                   //// 
2439
.................... ////                            enumeration process.                   //// 
2440
.................... ////                                                                   //// 
2440
.................... ////                                                                   //// 
2441
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
2441
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
2442
.................... ////                         endpoint number. Change this define       //// 
2442
.................... ////                         endpoint number. Change this define       //// 
2443
.................... ////                         to specify what kind of transfer method   //// 
2443
.................... ////                         to specify what kind of transfer method   //// 
2444
.................... ////                         this RX (PC to device) endpoint uses.     //// 
2444
.................... ////                         this RX (PC to device) endpoint uses.     //// 
2445
.................... ////                       Here is the list of valid transfer methods: //// 
2445
.................... ////                       Here is the list of valid transfer methods: //// 
2446
.................... ////                             USB_ENABLE_CONTROL                    //// 
2446
.................... ////                             USB_ENABLE_CONTROL                    //// 
2447
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
2447
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
2448
.................... ////                             USB_ENABLE_BULK                       //// 
2448
.................... ////                             USB_ENABLE_BULK                       //// 
2449
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
2449
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
2450
.................... ////                             USB_ENABLE_DISABLED                   //// 
2450
.................... ////                             USB_ENABLE_DISABLED                   //// 
2451
.................... ////                        Don't forget that you must specify the     //// 
2451
.................... ////                        Don't forget that you must specify the     //// 
2452
.................... ////                        transfer method properly in your endpoint  //// 
2452
.................... ////                        transfer method properly in your endpoint  //// 
2453
.................... ////                        descriptor, too.                           //// 
2453
.................... ////                        descriptor, too.                           //// 
2454
.................... ////                                                                   //// 
2454
.................... ////                                                                   //// 
2455
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
2455
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
2456
.................... ////                       how much memory to reserve for receiving    //// 
2456
.................... ////                       how much memory to reserve for receiving    //// 
2457
.................... ////                       packets.                                    //// 
2457
.................... ////                       packets.                                    //// 
2458
.................... ////                                                                   //// 
2458
.................... ////                                                                   //// 
2459
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
2459
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
2460
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
2460
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
2461
.................... ////               endpoint.                                           //// 
2461
.................... ////               endpoint.                                           //// 
2462
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
2462
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
2463
.................... ////                                                                   //// 
2463
.................... ////                                                                   //// 
2464
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
2464
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
2465
.................... ////                         endpoint number. Change this define       //// 
2465
.................... ////                         endpoint number. Change this define       //// 
2466
.................... ////                         to specify what kind of transfer method   //// 
2466
.................... ////                         to specify what kind of transfer method   //// 
2467
.................... ////                         this TX (device to PC) endpoint uses.     //// 
2467
.................... ////                         this TX (device to PC) endpoint uses.     //// 
2468
.................... ////                       Here is the list of valid transfer methods: //// 
2468
.................... ////                       Here is the list of valid transfer methods: //// 
2469
.................... ////                             USB_ENABLE_CONTROL                    //// 
2469
.................... ////                             USB_ENABLE_CONTROL                    //// 
2470
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
2470
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
2471
.................... ////                             USB_ENABLE_BULK                       //// 
2471
.................... ////                             USB_ENABLE_BULK                       //// 
2472
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
2472
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
2473
.................... ////                             USB_ENABLE_DISABLED                   //// 
2473
.................... ////                             USB_ENABLE_DISABLED                   //// 
2474
.................... ////                        Don't forget that you must specify the     //// 
2474
.................... ////                        Don't forget that you must specify the     //// 
2475
.................... ////                        transfer method properly in your endpoint  //// 
2475
.................... ////                        transfer method properly in your endpoint  //// 
2476
.................... ////                        descriptor, too.                           //// 
2476
.................... ////                        descriptor, too.                           //// 
2477
.................... ////                                                                   //// 
2477
.................... ////                                                                   //// 
2478
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
2478
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
2479
.................... ////                       how much memory to reserve for transmitting //// 
2479
.................... ////                       how much memory to reserve for transmitting //// 
2480
.................... ////                       packets.                                    //// 
2480
.................... ////                       packets.                                    //// 
2481
.................... ////                                                                   //// 
2481
.................... ////                                                                   //// 
2482
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
2482
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
2483
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
2483
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
2484
.................... ////               endpoint.                                           //// 
2484
.................... ////               endpoint.                                           //// 
2485
.................... ////                                                                   //// 
2485
.................... ////                                                                   //// 
2486
.................... ////                                                                   //// 
2486
.................... ////                                                                   //// 
2487
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
2487
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
2488
.................... ////                         HID requests.  You can disable to save    //// 
2488
.................... ////                         HID requests.  You can disable to save    //// 
2489
.................... ////                         ROM space if you are not using a HID      //// 
2489
.................... ////                         ROM space if you are not using a HID      //// 
2490
.................... ////                         device.  If you are not using a HID       //// 
2490
.................... ////                         device.  If you are not using a HID       //// 
2491
.................... ////                         device you must provide your own O/S      //// 
2491
.................... ////                         device you must provide your own O/S      //// 
2492
.................... ////                         (Windows) driver.                         //// 
2492
.................... ////                         (Windows) driver.                         //// 
2493
.................... ////                                                                   //// 
2493
.................... ////                                                                   //// 
2494
.................... //// The other definitions should not be changed.                      //// 
2494
.................... //// The other definitions should not be changed.                      //// 
2495
.................... ////                                                                   //// 
2495
.................... ////                                                                   //// 
2496
.................... /////////////////////////////////////////////////////////////////////////// 
2496
.................... /////////////////////////////////////////////////////////////////////////// 
2497
.................... ////                                                                   //// 
2497
.................... ////                                                                   //// 
2498
.................... //// Version History:                                                  //// 
2498
.................... //// Version History:                                                  //// 
2499
.................... ////                                                                   //// 
2499
.................... ////                                                                   //// 
2500
.................... //// March 5th, 2009:                                                  //// 
2500
.................... //// March 5th, 2009:                                                  //// 
2501
.................... ////   Cleanup for Wizard.                                             //// 
2501
.................... ////   Cleanup for Wizard.                                             //// 
2502
.................... ////   PIC24 Initial release.                                          //// 
2502
.................... ////   PIC24 Initial release.                                          //// 
2503
.................... ////                                                                   //// 
2503
.................... ////                                                                   //// 
2504
.................... //// July 13th, 2005:                                                  //// 
2504
.................... //// July 13th, 2005:                                                  //// 
2505
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
2505
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
2506
.................... ////                                                                   //// 
2506
.................... ////                                                                   //// 
2507
.................... //// June 20th, 2005:                                                  //// 
2507
.................... //// June 20th, 2005:                                                  //// 
2508
.................... ////  Initial 18fxx5x release                                          //// 
2508
.................... ////  Initial 18fxx5x release                                          //// 
2509
.................... ////                                                                   //// 
2509
.................... ////                                                                   //// 
2510
.................... //// May 13th, 2005:                                                   //// 
2510
.................... //// May 13th, 2005:                                                   //// 
2511
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
2511
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
2512
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
2512
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
2513
.................... ////   will have to be changed, see examples)                          //// 
2513
.................... ////   will have to be changed, see examples)                          //// 
2514
.................... ////                                                                   //// 
2514
.................... ////                                                                   //// 
2515
.................... //// Mar 21st, 2005:                                                   //// 
2515
.................... //// Mar 21st, 2005:                                                   //// 
2516
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
2516
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
2517
.................... ////   WITH 18F4550)                                                   //// 
2517
.................... ////   WITH 18F4550)                                                   //// 
2518
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
2518
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
2519
.................... ////                                                                   //// 
2519
.................... ////                                                                   //// 
2520
.................... //// June 24th, 2004:                                                  //// 
2520
.................... //// June 24th, 2004:                                                  //// 
2521
.................... ////  Optimization and cleanup.                                        //// 
2521
.................... ////  Optimization and cleanup.                                        //// 
2522
.................... ////                The following definitions changed:                 //// 
2522
.................... ////                The following definitions changed:                 //// 
2523
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
2523
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
2524
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
2524
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
2525
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
2525
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
2526
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
2526
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
2527
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
2527
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
2528
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
2528
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
2529
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
2529
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
2530
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
2530
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
2531
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
2531
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
2532
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
2532
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
2533
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
2533
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
2534
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
2534
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
2535
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
2535
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
2536
.................... ////        variables moved into struct USB_stack_status               //// 
2536
.................... ////        variables moved into struct USB_stack_status               //// 
2537
.................... ////                                                                   //// 
2537
.................... ////                                                                   //// 
2538
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
2538
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
2539
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
2539
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
2540
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
2540
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
2541
.................... ////         interface is in.  It is your applications job to send     //// 
2541
.................... ////         interface is in.  It is your applications job to send     //// 
2542
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
2542
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
2543
.................... ////                                                                   //// 
2543
.................... ////                                                                   //// 
2544
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
2544
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
2545
.................... ////                                                                   //// 
2545
.................... ////                                                                   //// 
2546
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
2546
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
2547
.................... ////                                                                   //// 
2547
.................... ////                                                                   //// 
2548
.................... //// August 2nd, 2002: Initial Public Release                          //// 
2548
.................... //// August 2nd, 2002: Initial Public Release                          //// 
2549
.................... ////                                                                   //// 
2549
.................... ////                                                                   //// 
2550
.................... /////////////////////////////////////////////////////////////////////////// 
2550
.................... /////////////////////////////////////////////////////////////////////////// 
2551
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
2551
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
2552
.................... //// This source code may only be used by licensed users of the CCS    //// 
2552
.................... //// This source code may only be used by licensed users of the CCS    //// 
2553
.................... //// C compiler.  This source code may only be distributed to other    //// 
2553
.................... //// C compiler.  This source code may only be distributed to other    //// 
2554
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
2554
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
2555
.................... //// reproduction or distribution is permitted without written         //// 
2555
.................... //// reproduction or distribution is permitted without written         //// 
2556
.................... //// permission.  Derivative programs created using this software      //// 
2556
.................... //// permission.  Derivative programs created using this software      //// 
2557
.................... //// in object code form are not restricted in any way.                //// 
2557
.................... //// in object code form are not restricted in any way.                //// 
2558
.................... /////////////////////////////////////////////////////////////////////////// 
2558
.................... /////////////////////////////////////////////////////////////////////////// 
2559
....................  
2559
....................  
2560
.................... #IFNDEF __USB_PROTOTYPES__ 
2560
.................... #IFNDEF __USB_PROTOTYPES__ 
2561
.................... #DEFINE __USB_PROTOTYPES__ 
2561
.................... #DEFINE __USB_PROTOTYPES__ 
2562
....................  
2562
....................  
2563
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
2563
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
2564
....................  
2564
....................  
2565
.................... #ifndef USB_CON_SENSE_PIN 
2565
.................... #ifndef USB_CON_SENSE_PIN 
2566
....................  #define USB_CON_SENSE_PIN  0 
2566
....................  #define USB_CON_SENSE_PIN  0 
2567
.................... #endif 
2567
.................... #endif 
2568
....................  
2568
....................  
2569
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
2569
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
2570
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
2570
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
2571
.................... #ENDIF 
2571
.................... #ENDIF 
2572
....................  
2572
....................  
2573
.................... #IFNDEF USB_HID_IDLE 
2573
.................... #IFNDEF USB_HID_IDLE 
2574
....................    #DEFINE USB_HID_IDLE FALSE 
2574
....................    #DEFINE USB_HID_IDLE FALSE 
2575
.................... #ENDIF 
2575
.................... #ENDIF 
2576
....................  
2576
....................  
2577
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
2577
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
2578
.................... #IFNDEF USB_HID_DEVICE 
2578
.................... #IFNDEF USB_HID_DEVICE 
2579
....................    #DEFINE USB_HID_DEVICE TRUE 
2579
....................    #DEFINE USB_HID_DEVICE TRUE 
2580
.................... #ENDIF 
2580
.................... #ENDIF 
2581
....................  
2581
....................  
2582
.................... #IFNDEF USB_CDC_DEVICE 
2582
.................... #IFNDEF USB_CDC_DEVICE 
2583
....................    #DEFINE USB_CDC_DEVICE FALSE 
2583
....................    #DEFINE USB_CDC_DEVICE FALSE 
2584
.................... #ENDIF 
2584
.................... #ENDIF 
2585
....................  
2585
....................  
2586
.................... //set to false to opt for less RAM, true to opt for less ROM 
2586
.................... //set to false to opt for less RAM, true to opt for less ROM 
2587
.................... #ifndef USB_OPT_FOR_ROM 
2587
.................... #ifndef USB_OPT_FOR_ROM 
2588
....................    #define USB_OPT_FOR_ROM TRUE 
2588
....................    #define USB_OPT_FOR_ROM TRUE 
2589
.................... #endif 
2589
.................... #endif 
2590
....................  
2590
....................  
2591
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
2591
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
2592
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
2592
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
2593
.................... #ENDIF 
2593
.................... #ENDIF 
2594
....................  
2594
....................  
2595
....................  
2595
....................  
2596
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
2596
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
2597
....................  
2597
....................  
2598
.................... /************************************************************** 
2598
.................... /************************************************************** 
2599
.................... /* usb_enumerated() 
2599
.................... /* usb_enumerated() 
2600
.................... /* 
2600
.................... /* 
2601
.................... /* Input: Global variable USB_Curr_Config 
2601
.................... /* Input: Global variable USB_Curr_Config 
2602
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
2602
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
2603
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
2603
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
2604
.................... /* 
2604
.................... /* 
2605
.................... /* Summary: See API section of USB.H for more documentation. 
2605
.................... /* Summary: See API section of USB.H for more documentation. 
2606
.................... /***************************************************************/ 
2606
.................... /***************************************************************/ 
2607
.................... int1 usb_enumerated(void); 
2607
.................... int1 usb_enumerated(void); 
2608
....................  
2608
....................  
2609
.................... /************************************************************** 
2609
.................... /************************************************************** 
2610
.................... /* usb_wait_for_enumeration() 
2610
.................... /* usb_wait_for_enumeration() 
2611
.................... /* 
2611
.................... /* 
2612
.................... /* Input: Global variable USB_Curr_Config 
2612
.................... /* Input: Global variable USB_Curr_Config 
2613
.................... /* 
2613
.................... /* 
2614
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
2614
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
2615
.................... /*          See API section of USB.H for more information. 
2615
.................... /*          See API section of USB.H for more information. 
2616
.................... /***************************************************************/ 
2616
.................... /***************************************************************/ 
2617
.................... void usb_wait_for_enumeration(void); 
2617
.................... void usb_wait_for_enumeration(void); 
2618
....................  
2618
....................  
2619
.................... /**************************************************************************** 
2619
.................... /**************************************************************************** 
2620
.................... /* usb_gets(endpoint, ptr, max, timeout) 
2620
.................... /* usb_gets(endpoint, ptr, max, timeout) 
2621
.................... /* 
2621
.................... /* 
2622
.................... /* Input: endpoint - endpoint to get data from 
2622
.................... /* Input: endpoint - endpoint to get data from 
2623
.................... /*        ptr - place / array to store data to 
2623
.................... /*        ptr - place / array to store data to 
2624
.................... /*        max - max amount of data to get from USB and store into ptr 
2624
.................... /*        max - max amount of data to get from USB and store into ptr 
2625
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
2625
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
2626
.................... /*                   timeout.  set to 0 for no timeout. 
2626
.................... /*                   timeout.  set to 0 for no timeout. 
2627
.................... /* 
2627
.................... /* 
2628
.................... /* Output: Amount of data returned.  It may be less than max. 
2628
.................... /* Output: Amount of data returned.  It may be less than max. 
2629
.................... /* 
2629
.................... /* 
2630
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
2630
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
2631
.................... /*          and finish when either it receives a 0-len packet or a packet 
2631
.................... /*          and finish when either it receives a 0-len packet or a packet 
2632
.................... /*          of less size than maximum. 
2632
.................... /*          of less size than maximum. 
2633
.................... /* 
2633
.................... /* 
2634
.................... /*****************************************************************************/ 
2634
.................... /*****************************************************************************/ 
2635
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
2635
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
2636
....................  
2636
....................  
2637
.................... /**************************************************************************** 
2637
.................... /**************************************************************************** 
2638
.................... /* usb_puts() 
2638
.................... /* usb_puts() 
2639
.................... /* 
2639
.................... /* 
2640
.................... /* Inputs: endpoint - endpoint to send data out 
2640
.................... /* Inputs: endpoint - endpoint to send data out 
2641
.................... /*         ptr - points to array of data to send 
2641
.................... /*         ptr - points to array of data to send 
2642
.................... /*         len - amount of data to send 
2642
.................... /*         len - amount of data to send 
2643
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
2643
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
2644
.................... /*                   timeout.  set to 0 for no timeout. 
2644
.................... /*                   timeout.  set to 0 for no timeout. 
2645
.................... /* 
2645
.................... /* 
2646
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
2646
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
2647
.................... /*    sent before timeout period expired. 
2647
.................... /*    sent before timeout period expired. 
2648
.................... /* 
2648
.................... /* 
2649
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
2649
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
2650
.................... /*       function can still be used to send messages consiting of only one  
2650
.................... /*       function can still be used to send messages consiting of only one  
2651
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
2651
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
2652
.................... /*       multiple packet messages or 0-lenght packets are needed. 
2652
.................... /*       multiple packet messages or 0-lenght packets are needed. 
2653
.................... /* 
2653
.................... /* 
2654
.................... /*****************************************************************************/ 
2654
.................... /*****************************************************************************/ 
2655
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
2655
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
2656
....................  
2656
....................  
2657
.................... /****************************************************************************** 
2657
.................... /****************************************************************************** 
2658
.................... /* usb_attached() 
2658
.................... /* usb_attached() 
2659
.................... /* 
2659
.................... /* 
2660
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
2660
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
2661
.................... /*          See the API section of USB.H for more documentation. 
2661
.................... /*          See the API section of USB.H for more documentation. 
2662
.................... /* 
2662
.................... /* 
2663
.................... /*****************************************************************************/ 
2663
.................... /*****************************************************************************/ 
2664
.................... #if USB_CON_SENSE_PIN 
2664
.................... #if USB_CON_SENSE_PIN 
2665
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
2665
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
2666
.................... #else 
2666
.................... #else 
2667
....................  #define usb_attached() TRUE 
2667
....................  #define usb_attached() TRUE 
2668
.................... #endif 
2668
.................... #endif 
2669
....................  
2669
....................  
2670
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
2670
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
2671
....................  
2671
....................  
2672
....................  
2672
....................  
2673
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
2673
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
2674
....................  
2674
....................  
2675
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
2675
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
2676
....................  
2676
....................  
2677
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
2677
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
2678
....................  
2678
....................  
2679
.................... #if USB_OPT_FOR_ROM 
2679
.................... #if USB_OPT_FOR_ROM 
2680
.................... typedef struct { 
2680
.................... typedef struct { 
2681
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
2681
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
2682
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
2682
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
2683
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
2683
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
2684
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
2684
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
2685
.................... } TYPE_USB_STACK_STATUS; 
2685
.................... } TYPE_USB_STACK_STATUS; 
2686
.................... #else 
2686
.................... #else 
2687
.................... typedef struct { 
2687
.................... typedef struct { 
2688
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
2688
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
2689
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
2689
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
2690
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
2690
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
2691
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
2691
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
2692
.................... } TYPE_USB_STACK_STATUS; 
2692
.................... } TYPE_USB_STACK_STATUS; 
2693
.................... #endif 
2693
.................... #endif 
2694
....................  
2694
....................  
2695
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
2695
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
2696
....................  
2696
....................  
2697
.................... /************************************************************** 
2697
.................... /************************************************************** 
2698
.................... /* usb_token_reset() 
2698
.................... /* usb_token_reset() 
2699
.................... /* 
2699
.................... /* 
2700
.................... /* Output:  No output (but many global registers are modified) 
2700
.................... /* Output:  No output (but many global registers are modified) 
2701
.................... /* 
2701
.................... /* 
2702
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
2702
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
2703
.................... /***************************************************************/ 
2703
.................... /***************************************************************/ 
2704
.................... void usb_token_reset(void); 
2704
.................... void usb_token_reset(void); 
2705
....................  
2705
....................  
2706
.................... /************************************************************** 
2706
.................... /************************************************************** 
2707
.................... /* usb_isr_tok_setup_dne() 
2707
.................... /* usb_isr_tok_setup_dne() 
2708
.................... /* 
2708
.................... /* 
2709
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
2709
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
2710
.................... /* 
2710
.................... /* 
2711
.................... /* Output: None (many globals are changed) 
2711
.................... /* Output: None (many globals are changed) 
2712
.................... /* 
2712
.................... /* 
2713
.................... /* Summary: This function is that handles the setup token. 
2713
.................... /* Summary: This function is that handles the setup token. 
2714
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
2714
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
2715
.................... /*          Get_Descriptor, etc. 
2715
.................... /*          Get_Descriptor, etc. 
2716
.................... /* 
2716
.................... /* 
2717
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
2717
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
2718
.................... /*  following records: 
2718
.................... /*  following records: 
2719
.................... /*  ------------------------------------------------------------------------------------------- 
2719
.................... /*  ------------------------------------------------------------------------------------------- 
2720
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
2720
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
2721
.................... /*                              bit7   (0) host-to-device 
2721
.................... /*                              bit7   (0) host-to-device 
2722
.................... /*                                     (1) device-to-host 
2722
.................... /*                                     (1) device-to-host 
2723
.................... /*                              bit6-5 (00) usb standard request; 
2723
.................... /*                              bit6-5 (00) usb standard request; 
2724
.................... /*                                     (01) class request; 
2724
.................... /*                                     (01) class request; 
2725
.................... /*                                     (10) vendor request 
2725
.................... /*                                     (10) vendor request 
2726
.................... /*                                     (11) reserved 
2726
.................... /*                                     (11) reserved 
2727
.................... /*                              bit4-0 (0000) device 
2727
.................... /*                              bit4-0 (0000) device 
2728
.................... /*                                     (0001) interface 
2728
.................... /*                                     (0001) interface 
2729
.................... /*                                     (0010) endpoint 
2729
.................... /*                                     (0010) endpoint 
2730
.................... /*                                     (0011) other element 
2730
.................... /*                                     (0011) other element 
2731
.................... /*                                     (0100) to (1111) reserved 
2731
.................... /*                                     (0100) to (1111) reserved 
2732
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
2732
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
2733
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
2733
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
2734
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
2734
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
2735
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
2735
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
2736
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
2736
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
2737
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
2737
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
2738
.................... /***************************************************************/ 
2738
.................... /***************************************************************/ 
2739
.................... void usb_isr_tok_setup_dne(void); 
2739
.................... void usb_isr_tok_setup_dne(void); 
2740
....................  
2740
....................  
2741
.................... /************************************************************** 
2741
.................... /************************************************************** 
2742
.................... /* usb_isr_tok_out_dne() 
2742
.................... /* usb_isr_tok_out_dne() 
2743
.................... /* 
2743
.................... /* 
2744
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
2744
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
2745
.................... /* 
2745
.................... /* 
2746
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
2746
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
2747
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
2747
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
2748
.................... /*          data is received it is left in the buffer (user would use 
2748
.................... /*          data is received it is left in the buffer (user would use 
2749
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
2749
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
2750
.................... /*          libraries (like CDC) have to answer setup packets. 
2750
.................... /*          libraries (like CDC) have to answer setup packets. 
2751
.................... /*           
2751
.................... /*           
2752
.................... /***************************************************************/ 
2752
.................... /***************************************************************/ 
2753
.................... void usb_isr_tok_out_dne(int8 endpoint); 
2753
.................... void usb_isr_tok_out_dne(int8 endpoint); 
2754
....................  
2754
....................  
2755
.................... /************************************************************** 
2755
.................... /************************************************************** 
2756
.................... /* usb_isr_tok_in_dne(endpoint) 
2756
.................... /* usb_isr_tok_in_dne(endpoint) 
2757
.................... /* 
2757
.................... /* 
2758
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
2758
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
2759
.................... /* 
2759
.................... /* 
2760
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
2760
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
2761
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
2761
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
2762
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
2762
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
2763
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
2763
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
2764
.................... /*    like CDC which handles the CDC protocl). 
2764
.................... /*    like CDC which handles the CDC protocl). 
2765
.................... /* 
2765
.................... /* 
2766
.................... /***************************************************************/ 
2766
.................... /***************************************************************/ 
2767
.................... void usb_isr_tok_in_dne(int8 endpoint); 
2767
.................... void usb_isr_tok_in_dne(int8 endpoint); 
2768
....................  
2768
....................  
2769
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
2769
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
2770
....................  
2770
....................  
2771
....................  
2771
....................  
2772
.................... //CCS only supports one configuration at this time 
2772
.................... //CCS only supports one configuration at this time 
2773
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
2773
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
2774
....................  
2774
....................  
2775
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
2775
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
2776
.................... #define PID_IN       0x09  //device to host transactions 
2776
.................... #define PID_IN       0x09  //device to host transactions 
2777
.................... #define PID_OUT      0x01  //host to device transactions 
2777
.................... #define PID_OUT      0x01  //host to device transactions 
2778
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
2778
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
2779
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
2779
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
2780
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
2780
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
2781
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
2781
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
2782
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
2782
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
2783
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
2783
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
2784
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
2784
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
2785
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
2785
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
2786
....................  
2786
....................  
2787
.................... //Key which identifies descritpors 
2787
.................... //Key which identifies descritpors 
2788
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
2788
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
2789
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
2789
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
2790
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
2790
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
2791
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
2791
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
2792
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
2792
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
2793
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
2793
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
2794
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
2794
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
2795
....................  
2795
....................  
2796
.................... //The length of each descriptor 
2796
.................... //The length of each descriptor 
2797
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
2797
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
2798
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
2798
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
2799
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
2799
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
2800
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
2800
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
2801
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
2801
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
2802
....................  
2802
....................  
2803
.................... //Standard USB Setup bRequest Codes 
2803
.................... //Standard USB Setup bRequest Codes 
2804
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
2804
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
2805
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
2805
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
2806
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
2806
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
2807
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
2807
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
2808
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
2808
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
2809
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
2809
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
2810
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
2810
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
2811
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
2811
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
2812
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
2812
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
2813
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
2813
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
2814
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
2814
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
2815
....................  
2815
....................  
2816
.................... //HID Class Setup bRequest Codes 
2816
.................... //HID Class Setup bRequest Codes 
2817
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
2817
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
2818
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
2818
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
2819
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
2819
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
2820
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
2820
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
2821
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
2821
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
2822
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
2822
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
2823
....................  
2823
....................  
2824
.................... //types of endpoints as defined in the descriptor 
2824
.................... //types of endpoints as defined in the descriptor 
2825
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
2825
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
2826
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
2826
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
2827
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
2827
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
2828
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
2828
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
2829
....................  
2829
....................  
2830
.................... //types of endpoints used internally in this api 
2830
.................... //types of endpoints used internally in this api 
2831
.................... #define USB_ENABLE_DISABLED     -1 
2831
.................... #define USB_ENABLE_DISABLED     -1 
2832
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
2832
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
2833
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
2833
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
2834
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
2834
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
2835
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
2835
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
2836
....................  
2836
....................  
2837
....................  
2837
....................  
2838
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
2838
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
2839
....................  
2839
....................  
2840
.................... //--------- endpoint 0 defines ---------- 
2840
.................... //--------- endpoint 0 defines ---------- 
2841
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
2841
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
2842
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
2842
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
2843
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
2843
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
2844
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
2844
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
2845
....................  
2845
....................  
2846
.................... //--------- endpoint 1 defines ---------- 
2846
.................... //--------- endpoint 1 defines ---------- 
2847
.................... #ifndef USB_EP1_TX_ENABLE 
2847
.................... #ifndef USB_EP1_TX_ENABLE 
2848
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
2848
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
2849
.................... #endif 
2849
.................... #endif 
2850
.................... #ifndef USB_EP1_RX_ENABLE 
2850
.................... #ifndef USB_EP1_RX_ENABLE 
2851
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
2851
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
2852
.................... #endif 
2852
.................... #endif 
2853
....................  
2853
....................  
2854
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
2854
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
2855
....................  #ifdef USB_EP1_RX_SIZE 
2855
....................  #ifdef USB_EP1_RX_SIZE 
2856
....................   #undef USB_EP1_RX_SIZE 
2856
....................   #undef USB_EP1_RX_SIZE 
2857
....................  #endif 
2857
....................  #endif 
2858
....................  #define USB_EP1_RX_SIZE 0 
2858
....................  #define USB_EP1_RX_SIZE 0 
2859
.................... #else 
2859
.................... #else 
2860
....................  #ifndef USB_EP1_RX_SIZE 
2860
....................  #ifndef USB_EP1_RX_SIZE 
2861
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
2861
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
2862
....................  #endif 
2862
....................  #endif 
2863
.................... #endif 
2863
.................... #endif 
2864
....................  
2864
....................  
2865
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
2865
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
2866
....................  #ifdef USB_EP1_TX_SIZE 
2866
....................  #ifdef USB_EP1_TX_SIZE 
2867
....................   #undef USB_EP1_TX_SIZE 
2867
....................   #undef USB_EP1_TX_SIZE 
2868
....................  #endif 
2868
....................  #endif 
2869
....................  #define USB_EP1_TX_SIZE 0 
2869
....................  #define USB_EP1_TX_SIZE 0 
2870
.................... #else 
2870
.................... #else 
2871
....................  #ifndef USB_EP1_TX_SIZE 
2871
....................  #ifndef USB_EP1_TX_SIZE 
2872
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
2872
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
2873
....................  #endif 
2873
....................  #endif 
2874
.................... #endif 
2874
.................... #endif 
2875
....................  
2875
....................  
2876
....................  
2876
....................  
2877
.................... //--------- endpoint 2 defines ---------- 
2877
.................... //--------- endpoint 2 defines ---------- 
2878
.................... #ifndef USB_EP2_TX_ENABLE 
2878
.................... #ifndef USB_EP2_TX_ENABLE 
2879
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
2879
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
2880
.................... #endif 
2880
.................... #endif 
2881
.................... #ifndef USB_EP2_RX_ENABLE 
2881
.................... #ifndef USB_EP2_RX_ENABLE 
2882
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
2882
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
2883
.................... #endif 
2883
.................... #endif 
2884
....................  
2884
....................  
2885
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
2885
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
2886
....................  #ifdef USB_EP2_RX_SIZE 
2886
....................  #ifdef USB_EP2_RX_SIZE 
2887
....................   #undef USB_EP2_RX_SIZE 
2887
....................   #undef USB_EP2_RX_SIZE 
2888
....................  #endif 
2888
....................  #endif 
2889
....................  #define USB_EP2_RX_SIZE 0 
2889
....................  #define USB_EP2_RX_SIZE 0 
2890
.................... #else 
2890
.................... #else 
2891
....................  #ifndef USB_EP2_RX_SIZE 
2891
....................  #ifndef USB_EP2_RX_SIZE 
2892
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
2892
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
2893
....................  #endif 
2893
....................  #endif 
2894
.................... #endif 
2894
.................... #endif 
2895
....................  
2895
....................  
2896
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
2896
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
2897
....................  #ifdef USB_EP2_TX_SIZE 
2897
....................  #ifdef USB_EP2_TX_SIZE 
2898
....................   #undef USB_EP2_TX_SIZE 
2898
....................   #undef USB_EP2_TX_SIZE 
2899
....................  #endif 
2899
....................  #endif 
2900
....................  #define USB_EP2_TX_SIZE 0 
2900
....................  #define USB_EP2_TX_SIZE 0 
2901
.................... #else 
2901
.................... #else 
2902
....................  #ifndef USB_EP2_TX_SIZE 
2902
....................  #ifndef USB_EP2_TX_SIZE 
2903
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
2903
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
2904
....................  #endif 
2904
....................  #endif 
2905
.................... #endif 
2905
.................... #endif 
2906
....................  
2906
....................  
2907
....................  
2907
....................  
2908
.................... //--------- endpoint 3 defines ---------- 
2908
.................... //--------- endpoint 3 defines ---------- 
2909
.................... #ifndef USB_EP3_TX_ENABLE 
2909
.................... #ifndef USB_EP3_TX_ENABLE 
2910
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
2910
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
2911
.................... #endif 
2911
.................... #endif 
2912
.................... #ifndef USB_EP3_RX_ENABLE 
2912
.................... #ifndef USB_EP3_RX_ENABLE 
2913
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
2913
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
2914
.................... #endif 
2914
.................... #endif 
2915
....................  
2915
....................  
2916
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
2916
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
2917
....................  #ifdef USB_EP3_RX_SIZE 
2917
....................  #ifdef USB_EP3_RX_SIZE 
2918
....................   #undef USB_EP3_RX_SIZE 
2918
....................   #undef USB_EP3_RX_SIZE 
2919
....................  #endif 
2919
....................  #endif 
2920
....................  #define USB_EP3_RX_SIZE 0 
2920
....................  #define USB_EP3_RX_SIZE 0 
2921
.................... #else 
2921
.................... #else 
2922
....................  #ifndef USB_EP3_RX_SIZE 
2922
....................  #ifndef USB_EP3_RX_SIZE 
2923
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
2923
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
2924
....................  #endif 
2924
....................  #endif 
2925
.................... #endif 
2925
.................... #endif 
2926
....................  
2926
....................  
2927
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
2927
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
2928
....................  #ifdef USB_EP3_TX_SIZE 
2928
....................  #ifdef USB_EP3_TX_SIZE 
2929
....................   #undef USB_EP3_TX_SIZE 
2929
....................   #undef USB_EP3_TX_SIZE 
2930
....................  #endif 
2930
....................  #endif 
2931
....................  #define USB_EP3_TX_SIZE 0 
2931
....................  #define USB_EP3_TX_SIZE 0 
2932
.................... #else 
2932
.................... #else 
2933
....................  #ifndef USB_EP3_TX_SIZE 
2933
....................  #ifndef USB_EP3_TX_SIZE 
2934
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
2934
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
2935
....................  #endif 
2935
....................  #endif 
2936
.................... #endif 
2936
.................... #endif 
2937
....................  
2937
....................  
2938
....................  
2938
....................  
2939
.................... //--------- endpoint 4 defines ---------- 
2939
.................... //--------- endpoint 4 defines ---------- 
2940
.................... #ifndef USB_EP4_TX_ENABLE 
2940
.................... #ifndef USB_EP4_TX_ENABLE 
2941
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
2941
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
2942
.................... #endif 
2942
.................... #endif 
2943
.................... #ifndef USB_EP4_RX_ENABLE 
2943
.................... #ifndef USB_EP4_RX_ENABLE 
2944
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
2944
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
2945
.................... #endif 
2945
.................... #endif 
2946
....................  
2946
....................  
2947
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
2947
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
2948
....................  #ifdef USB_EP4_RX_SIZE 
2948
....................  #ifdef USB_EP4_RX_SIZE 
2949
....................   #undef USB_EP4_RX_SIZE 
2949
....................   #undef USB_EP4_RX_SIZE 
2950
....................  #endif 
2950
....................  #endif 
2951
....................  #define USB_EP4_RX_SIZE 0 
2951
....................  #define USB_EP4_RX_SIZE 0 
2952
.................... #else 
2952
.................... #else 
2953
....................  #ifndef USB_EP4_RX_SIZE 
2953
....................  #ifndef USB_EP4_RX_SIZE 
2954
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
2954
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
2955
....................  #endif 
2955
....................  #endif 
2956
.................... #endif 
2956
.................... #endif 
2957
....................  
2957
....................  
2958
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
2958
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
2959
....................  #ifdef USB_EP4_TX_SIZE 
2959
....................  #ifdef USB_EP4_TX_SIZE 
2960
....................   #undef USB_EP4_TX_SIZE 
2960
....................   #undef USB_EP4_TX_SIZE 
2961
....................  #endif 
2961
....................  #endif 
2962
....................  #define USB_EP4_TX_SIZE 0 
2962
....................  #define USB_EP4_TX_SIZE 0 
2963
.................... #else 
2963
.................... #else 
2964
....................  #ifndef USB_EP4_TX_SIZE 
2964
....................  #ifndef USB_EP4_TX_SIZE 
2965
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
2965
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
2966
....................  #endif 
2966
....................  #endif 
2967
.................... #endif 
2967
.................... #endif 
2968
....................  
2968
....................  
2969
....................  
2969
....................  
2970
.................... //--------- endpoint 5 defines ---------- 
2970
.................... //--------- endpoint 5 defines ---------- 
2971
.................... #ifndef USB_EP5_TX_ENABLE 
2971
.................... #ifndef USB_EP5_TX_ENABLE 
2972
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
2972
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
2973
.................... #endif 
2973
.................... #endif 
2974
.................... #ifndef USB_EP5_RX_ENABLE 
2974
.................... #ifndef USB_EP5_RX_ENABLE 
2975
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
2975
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
2976
.................... #endif 
2976
.................... #endif 
2977
....................  
2977
....................  
2978
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
2978
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
2979
....................  #ifdef USB_EP5_RX_SIZE 
2979
....................  #ifdef USB_EP5_RX_SIZE 
2980
....................   #undef USB_EP5_RX_SIZE 
2980
....................   #undef USB_EP5_RX_SIZE 
2981
....................  #endif 
2981
....................  #endif 
2982
....................  #define USB_EP5_RX_SIZE 0 
2982
....................  #define USB_EP5_RX_SIZE 0 
2983
.................... #else 
2983
.................... #else 
2984
....................  #ifndef USB_EP5_RX_SIZE 
2984
....................  #ifndef USB_EP5_RX_SIZE 
2985
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
2985
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
2986
....................  #endif 
2986
....................  #endif 
2987
.................... #endif 
2987
.................... #endif 
2988
....................  
2988
....................  
2989
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
2989
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
2990
....................  #ifdef USB_EP5_TX_SIZE 
2990
....................  #ifdef USB_EP5_TX_SIZE 
2991
....................   #undef USB_EP5_TX_SIZE 
2991
....................   #undef USB_EP5_TX_SIZE 
2992
....................  #endif 
2992
....................  #endif 
2993
....................  #define USB_EP5_TX_SIZE 0 
2993
....................  #define USB_EP5_TX_SIZE 0 
2994
.................... #else 
2994
.................... #else 
2995
....................  #ifndef USB_EP5_TX_SIZE 
2995
....................  #ifndef USB_EP5_TX_SIZE 
2996
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
2996
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
2997
....................  #endif 
2997
....................  #endif 
2998
.................... #endif 
2998
.................... #endif 
2999
....................  
2999
....................  
3000
....................  
3000
....................  
3001
.................... //--------- endpoint 6 defines ---------- 
3001
.................... //--------- endpoint 6 defines ---------- 
3002
.................... #ifndef USB_EP6_TX_ENABLE 
3002
.................... #ifndef USB_EP6_TX_ENABLE 
3003
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
3003
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
3004
.................... #endif 
3004
.................... #endif 
3005
.................... #ifndef USB_EP6_RX_ENABLE 
3005
.................... #ifndef USB_EP6_RX_ENABLE 
3006
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
3006
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
3007
.................... #endif 
3007
.................... #endif 
3008
....................  
3008
....................  
3009
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
3009
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
3010
....................  #ifdef USB_EP6_RX_SIZE 
3010
....................  #ifdef USB_EP6_RX_SIZE 
3011
....................   #undef USB_EP6_RX_SIZE 
3011
....................   #undef USB_EP6_RX_SIZE 
3012
....................  #endif 
3012
....................  #endif 
3013
....................  #define USB_EP6_RX_SIZE 0 
3013
....................  #define USB_EP6_RX_SIZE 0 
3014
.................... #else 
3014
.................... #else 
3015
....................  #ifndef USB_EP6_RX_SIZE 
3015
....................  #ifndef USB_EP6_RX_SIZE 
3016
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
3016
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
3017
....................  #endif 
3017
....................  #endif 
3018
.................... #endif 
3018
.................... #endif 
3019
....................  
3019
....................  
3020
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
3020
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
3021
....................  #ifdef USB_EP6_TX_SIZE 
3021
....................  #ifdef USB_EP6_TX_SIZE 
3022
....................   #undef USB_EP6_TX_SIZE 
3022
....................   #undef USB_EP6_TX_SIZE 
3023
....................  #endif 
3023
....................  #endif 
3024
....................  #define USB_EP6_TX_SIZE 0 
3024
....................  #define USB_EP6_TX_SIZE 0 
3025
.................... #else 
3025
.................... #else 
3026
....................  #ifndef USB_EP6_TX_SIZE 
3026
....................  #ifndef USB_EP6_TX_SIZE 
3027
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
3027
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
3028
....................  #endif 
3028
....................  #endif 
3029
.................... #endif 
3029
.................... #endif 
3030
....................  
3030
....................  
3031
....................  
3031
....................  
3032
.................... //--------- endpoint 7 defines ---------- 
3032
.................... //--------- endpoint 7 defines ---------- 
3033
.................... #ifndef USB_EP7_TX_ENABLE 
3033
.................... #ifndef USB_EP7_TX_ENABLE 
3034
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
3034
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
3035
.................... #endif 
3035
.................... #endif 
3036
.................... #ifndef USB_EP7_RX_ENABLE 
3036
.................... #ifndef USB_EP7_RX_ENABLE 
3037
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
3037
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
3038
.................... #endif 
3038
.................... #endif 
3039
....................  
3039
....................  
3040
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
3040
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
3041
....................  #ifdef USB_EP7_RX_SIZE 
3041
....................  #ifdef USB_EP7_RX_SIZE 
3042
....................   #undef USB_EP7_RX_SIZE 
3042
....................   #undef USB_EP7_RX_SIZE 
3043
....................  #endif 
3043
....................  #endif 
3044
....................  #define USB_EP7_RX_SIZE 0 
3044
....................  #define USB_EP7_RX_SIZE 0 
3045
.................... #else 
3045
.................... #else 
3046
....................  #ifndef USB_EP7_RX_SIZE 
3046
....................  #ifndef USB_EP7_RX_SIZE 
3047
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
3047
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
3048
....................  #endif 
3048
....................  #endif 
3049
.................... #endif 
3049
.................... #endif 
3050
....................  
3050
....................  
3051
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
3051
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
3052
....................  #ifdef USB_EP7_TX_SIZE 
3052
....................  #ifdef USB_EP7_TX_SIZE 
3053
....................   #undef USB_EP7_TX_SIZE 
3053
....................   #undef USB_EP7_TX_SIZE 
3054
....................  #endif 
3054
....................  #endif 
3055
....................  #define USB_EP7_TX_SIZE 0 
3055
....................  #define USB_EP7_TX_SIZE 0 
3056
.................... #else 
3056
.................... #else 
3057
....................  #ifndef USB_EP7_TX_SIZE 
3057
....................  #ifndef USB_EP7_TX_SIZE 
3058
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
3058
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
3059
....................  #endif 
3059
....................  #endif 
3060
.................... #endif 
3060
.................... #endif 
3061
....................  
3061
....................  
3062
....................  
3062
....................  
3063
.................... //--------- endpoint 8 defines ---------- 
3063
.................... //--------- endpoint 8 defines ---------- 
3064
.................... #ifndef USB_EP8_TX_ENABLE 
3064
.................... #ifndef USB_EP8_TX_ENABLE 
3065
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
3065
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
3066
.................... #endif 
3066
.................... #endif 
3067
.................... #ifndef USB_EP8_RX_ENABLE 
3067
.................... #ifndef USB_EP8_RX_ENABLE 
3068
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
3068
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
3069
.................... #endif 
3069
.................... #endif 
3070
....................  
3070
....................  
3071
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
3071
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
3072
....................  #ifdef USB_EP8_RX_SIZE 
3072
....................  #ifdef USB_EP8_RX_SIZE 
3073
....................   #undef USB_EP8_RX_SIZE 
3073
....................   #undef USB_EP8_RX_SIZE 
3074
....................  #endif 
3074
....................  #endif 
3075
....................  #define USB_EP8_RX_SIZE 0 
3075
....................  #define USB_EP8_RX_SIZE 0 
3076
.................... #else 
3076
.................... #else 
3077
....................  #ifndef USB_EP8_RX_SIZE 
3077
....................  #ifndef USB_EP8_RX_SIZE 
3078
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
3078
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
3079
....................  #endif 
3079
....................  #endif 
3080
.................... #endif 
3080
.................... #endif 
3081
....................  
3081
....................  
3082
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
3082
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
3083
....................  #ifdef USB_EP8_TX_SIZE 
3083
....................  #ifdef USB_EP8_TX_SIZE 
3084
....................   #undef USB_EP8_TX_SIZE 
3084
....................   #undef USB_EP8_TX_SIZE 
3085
....................  #endif 
3085
....................  #endif 
3086
....................  #define USB_EP8_TX_SIZE 0 
3086
....................  #define USB_EP8_TX_SIZE 0 
3087
.................... #else 
3087
.................... #else 
3088
....................  #ifndef USB_EP8_TX_SIZE 
3088
....................  #ifndef USB_EP8_TX_SIZE 
3089
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
3089
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
3090
....................  #endif 
3090
....................  #endif 
3091
.................... #endif 
3091
.................... #endif 
3092
....................  
3092
....................  
3093
....................  
3093
....................  
3094
.................... //--------- endpoint 9 defines ---------- 
3094
.................... //--------- endpoint 9 defines ---------- 
3095
.................... #ifndef USB_EP9_TX_ENABLE 
3095
.................... #ifndef USB_EP9_TX_ENABLE 
3096
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
3096
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
3097
.................... #endif 
3097
.................... #endif 
3098
.................... #ifndef USB_EP9_RX_ENABLE 
3098
.................... #ifndef USB_EP9_RX_ENABLE 
3099
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
3099
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
3100
.................... #endif 
3100
.................... #endif 
3101
....................  
3101
....................  
3102
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
3102
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
3103
....................  #ifdef USB_EP9_RX_SIZE 
3103
....................  #ifdef USB_EP9_RX_SIZE 
3104
....................   #undef USB_EP9_RX_SIZE 
3104
....................   #undef USB_EP9_RX_SIZE 
3105
....................  #endif 
3105
....................  #endif 
3106
....................  #define USB_EP9_RX_SIZE 0 
3106
....................  #define USB_EP9_RX_SIZE 0 
3107
.................... #else 
3107
.................... #else 
3108
....................  #ifndef USB_EP9_RX_SIZE 
3108
....................  #ifndef USB_EP9_RX_SIZE 
3109
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
3109
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
3110
....................  #endif 
3110
....................  #endif 
3111
.................... #endif 
3111
.................... #endif 
3112
....................  
3112
....................  
3113
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
3113
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
3114
....................  #ifdef USB_EP9_TX_SIZE 
3114
....................  #ifdef USB_EP9_TX_SIZE 
3115
....................   #undef USB_EP9_TX_SIZE 
3115
....................   #undef USB_EP9_TX_SIZE 
3116
....................  #endif 
3116
....................  #endif 
3117
....................  #define USB_EP9_TX_SIZE 0 
3117
....................  #define USB_EP9_TX_SIZE 0 
3118
.................... #else 
3118
.................... #else 
3119
....................  #ifndef USB_EP9_TX_SIZE 
3119
....................  #ifndef USB_EP9_TX_SIZE 
3120
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
3120
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
3121
....................  #endif 
3121
....................  #endif 
3122
.................... #endif 
3122
.................... #endif 
3123
....................  
3123
....................  
3124
....................  
3124
....................  
3125
.................... //--------- endpoint 10 defines ---------- 
3125
.................... //--------- endpoint 10 defines ---------- 
3126
.................... #ifndef USB_EP10_TX_ENABLE 
3126
.................... #ifndef USB_EP10_TX_ENABLE 
3127
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
3127
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
3128
.................... #endif 
3128
.................... #endif 
3129
.................... #ifndef USB_EP10_RX_ENABLE 
3129
.................... #ifndef USB_EP10_RX_ENABLE 
3130
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
3130
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
3131
.................... #endif 
3131
.................... #endif 
3132
....................  
3132
....................  
3133
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
3133
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
3134
....................  #ifdef USB_EP10_RX_SIZE 
3134
....................  #ifdef USB_EP10_RX_SIZE 
3135
....................   #undef USB_EP10_RX_SIZE 
3135
....................   #undef USB_EP10_RX_SIZE 
3136
....................  #endif 
3136
....................  #endif 
3137
....................  #define USB_EP10_RX_SIZE 0 
3137
....................  #define USB_EP10_RX_SIZE 0 
3138
.................... #else 
3138
.................... #else 
3139
....................  #ifndef USB_EP10_RX_SIZE 
3139
....................  #ifndef USB_EP10_RX_SIZE 
3140
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
3140
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
3141
....................  #endif 
3141
....................  #endif 
3142
.................... #endif 
3142
.................... #endif 
3143
....................  
3143
....................  
3144
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
3144
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
3145
....................  #ifdef USB_EP10_TX_SIZE 
3145
....................  #ifdef USB_EP10_TX_SIZE 
3146
....................   #undef USB_EP10_TX_SIZE 
3146
....................   #undef USB_EP10_TX_SIZE 
3147
....................  #endif 
3147
....................  #endif 
3148
....................  #define USB_EP10_TX_SIZE 0 
3148
....................  #define USB_EP10_TX_SIZE 0 
3149
.................... #else 
3149
.................... #else 
3150
....................  #ifndef USB_EP10_TX_SIZE 
3150
....................  #ifndef USB_EP10_TX_SIZE 
3151
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
3151
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
3152
....................  #endif 
3152
....................  #endif 
3153
.................... #endif 
3153
.................... #endif 
3154
....................  
3154
....................  
3155
....................  
3155
....................  
3156
.................... //--------- endpoint 11 defines ---------- 
3156
.................... //--------- endpoint 11 defines ---------- 
3157
.................... #ifndef USB_EP11_TX_ENABLE 
3157
.................... #ifndef USB_EP11_TX_ENABLE 
3158
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
3158
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
3159
.................... #endif 
3159
.................... #endif 
3160
.................... #ifndef USB_EP11_RX_ENABLE 
3160
.................... #ifndef USB_EP11_RX_ENABLE 
3161
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
3161
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
3162
.................... #endif 
3162
.................... #endif 
3163
....................  
3163
....................  
3164
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
3164
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
3165
....................  #ifdef USB_EP11_RX_SIZE 
3165
....................  #ifdef USB_EP11_RX_SIZE 
3166
....................   #undef USB_EP11_RX_SIZE 
3166
....................   #undef USB_EP11_RX_SIZE 
3167
....................  #endif 
3167
....................  #endif 
3168
....................  #define USB_EP11_RX_SIZE 0 
3168
....................  #define USB_EP11_RX_SIZE 0 
3169
.................... #else 
3169
.................... #else 
3170
....................  #ifndef USB_EP11_RX_SIZE 
3170
....................  #ifndef USB_EP11_RX_SIZE 
3171
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
3171
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
3172
....................  #endif 
3172
....................  #endif 
3173
.................... #endif 
3173
.................... #endif 
3174
....................  
3174
....................  
3175
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
3175
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
3176
....................  #ifdef USB_EP11_TX_SIZE 
3176
....................  #ifdef USB_EP11_TX_SIZE 
3177
....................   #undef USB_EP11_TX_SIZE 
3177
....................   #undef USB_EP11_TX_SIZE 
3178
....................  #endif 
3178
....................  #endif 
3179
....................  #define USB_EP11_TX_SIZE 0 
3179
....................  #define USB_EP11_TX_SIZE 0 
3180
.................... #else 
3180
.................... #else 
3181
....................  #ifndef USB_EP11_TX_SIZE 
3181
....................  #ifndef USB_EP11_TX_SIZE 
3182
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
3182
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
3183
....................  #endif 
3183
....................  #endif 
3184
.................... #endif 
3184
.................... #endif 
3185
....................  
3185
....................  
3186
....................  
3186
....................  
3187
.................... //--------- endpoint 12 defines ---------- 
3187
.................... //--------- endpoint 12 defines ---------- 
3188
.................... #ifndef USB_EP12_TX_ENABLE 
3188
.................... #ifndef USB_EP12_TX_ENABLE 
3189
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
3189
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
3190
.................... #endif 
3190
.................... #endif 
3191
.................... #ifndef USB_EP12_RX_ENABLE 
3191
.................... #ifndef USB_EP12_RX_ENABLE 
3192
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
3192
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
3193
.................... #endif 
3193
.................... #endif 
3194
....................  
3194
....................  
3195
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
3195
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
3196
....................  #ifdef USB_EP12_RX_SIZE 
3196
....................  #ifdef USB_EP12_RX_SIZE 
3197
....................   #undef USB_EP12_RX_SIZE 
3197
....................   #undef USB_EP12_RX_SIZE 
3198
....................  #endif 
3198
....................  #endif 
3199
....................  #define USB_EP12_RX_SIZE 0 
3199
....................  #define USB_EP12_RX_SIZE 0 
3200
.................... #else 
3200
.................... #else 
3201
....................  #ifndef USB_EP12_RX_SIZE 
3201
....................  #ifndef USB_EP12_RX_SIZE 
3202
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
3202
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
3203
....................  #endif 
3203
....................  #endif 
3204
.................... #endif 
3204
.................... #endif 
3205
....................  
3205
....................  
3206
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
3206
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
3207
....................  #ifdef USB_EP12_TX_SIZE 
3207
....................  #ifdef USB_EP12_TX_SIZE 
3208
....................   #undef USB_EP12_TX_SIZE 
3208
....................   #undef USB_EP12_TX_SIZE 
3209
....................  #endif 
3209
....................  #endif 
3210
....................  #define USB_EP12_TX_SIZE 0 
3210
....................  #define USB_EP12_TX_SIZE 0 
3211
.................... #else 
3211
.................... #else 
3212
....................  #ifndef USB_EP12_TX_SIZE 
3212
....................  #ifndef USB_EP12_TX_SIZE 
3213
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
3213
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
3214
....................  #endif 
3214
....................  #endif 
3215
.................... #endif 
3215
.................... #endif 
3216
....................  
3216
....................  
3217
....................  
3217
....................  
3218
.................... //--------- endpoint 13 defines ---------- 
3218
.................... //--------- endpoint 13 defines ---------- 
3219
.................... #ifndef USB_EP13_TX_ENABLE 
3219
.................... #ifndef USB_EP13_TX_ENABLE 
3220
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
3220
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
3221
.................... #endif 
3221
.................... #endif 
3222
.................... #ifndef USB_EP13_RX_ENABLE 
3222
.................... #ifndef USB_EP13_RX_ENABLE 
3223
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
3223
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
3224
.................... #endif 
3224
.................... #endif 
3225
....................  
3225
....................  
3226
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
3226
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
3227
....................  #ifdef USB_EP13_RX_SIZE 
3227
....................  #ifdef USB_EP13_RX_SIZE 
3228
....................   #undef USB_EP13_RX_SIZE 
3228
....................   #undef USB_EP13_RX_SIZE 
3229
....................  #endif 
3229
....................  #endif 
3230
....................  #define USB_EP13_RX_SIZE 0 
3230
....................  #define USB_EP13_RX_SIZE 0 
3231
.................... #else 
3231
.................... #else 
3232
....................  #ifndef USB_EP13_RX_SIZE 
3232
....................  #ifndef USB_EP13_RX_SIZE 
3233
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
3233
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
3234
....................  #endif 
3234
....................  #endif 
3235
.................... #endif 
3235
.................... #endif 
3236
....................  
3236
....................  
3237
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
3237
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
3238
....................  #ifdef USB_EP13_TX_SIZE 
3238
....................  #ifdef USB_EP13_TX_SIZE 
3239
....................   #undef USB_EP13_TX_SIZE 
3239
....................   #undef USB_EP13_TX_SIZE 
3240
....................  #endif 
3240
....................  #endif 
3241
....................  #define USB_EP13_TX_SIZE 0 
3241
....................  #define USB_EP13_TX_SIZE 0 
3242
.................... #else 
3242
.................... #else 
3243
....................  #ifndef USB_EP13_TX_SIZE 
3243
....................  #ifndef USB_EP13_TX_SIZE 
3244
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
3244
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
3245
....................  #endif 
3245
....................  #endif 
3246
.................... #endif 
3246
.................... #endif 
3247
....................  
3247
....................  
3248
....................  
3248
....................  
3249
.................... //--------- endpoint 14 defines ---------- 
3249
.................... //--------- endpoint 14 defines ---------- 
3250
.................... #ifndef USB_EP14_TX_ENABLE 
3250
.................... #ifndef USB_EP14_TX_ENABLE 
3251
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
3251
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
3252
.................... #endif 
3252
.................... #endif 
3253
.................... #ifndef USB_EP14_RX_ENABLE 
3253
.................... #ifndef USB_EP14_RX_ENABLE 
3254
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
3254
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
3255
.................... #endif 
3255
.................... #endif 
3256
....................  
3256
....................  
3257
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
3257
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
3258
....................  #ifdef USB_EP14_RX_SIZE 
3258
....................  #ifdef USB_EP14_RX_SIZE 
3259
....................   #undef USB_EP14_RX_SIZE 
3259
....................   #undef USB_EP14_RX_SIZE 
3260
....................  #endif 
3260
....................  #endif 
3261
....................  #define USB_EP14_RX_SIZE 0 
3261
....................  #define USB_EP14_RX_SIZE 0 
3262
.................... #else 
3262
.................... #else 
3263
....................  #ifndef USB_EP14_RX_SIZE 
3263
....................  #ifndef USB_EP14_RX_SIZE 
3264
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
3264
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
3265
....................  #endif 
3265
....................  #endif 
3266
.................... #endif 
3266
.................... #endif 
3267
....................  
3267
....................  
3268
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
3268
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
3269
....................  #ifdef USB_EP14_TX_SIZE 
3269
....................  #ifdef USB_EP14_TX_SIZE 
3270
....................   #undef USB_EP14_TX_SIZE 
3270
....................   #undef USB_EP14_TX_SIZE 
3271
....................  #endif 
3271
....................  #endif 
3272
....................  #define USB_EP14_TX_SIZE 0 
3272
....................  #define USB_EP14_TX_SIZE 0 
3273
.................... #else 
3273
.................... #else 
3274
....................  #ifndef USB_EP14_TX_SIZE 
3274
....................  #ifndef USB_EP14_TX_SIZE 
3275
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
3275
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
3276
....................  #endif 
3276
....................  #endif 
3277
.................... #endif 
3277
.................... #endif 
3278
....................  
3278
....................  
3279
....................  
3279
....................  
3280
.................... //--------- endpoint 15 defines ---------- 
3280
.................... //--------- endpoint 15 defines ---------- 
3281
.................... #ifndef USB_EP15_TX_ENABLE 
3281
.................... #ifndef USB_EP15_TX_ENABLE 
3282
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
3282
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
3283
.................... #endif 
3283
.................... #endif 
3284
.................... #ifndef USB_EP15_RX_ENABLE 
3284
.................... #ifndef USB_EP15_RX_ENABLE 
3285
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
3285
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
3286
.................... #endif 
3286
.................... #endif 
3287
....................  
3287
....................  
3288
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
3288
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
3289
....................  #ifdef USB_EP15_RX_SIZE 
3289
....................  #ifdef USB_EP15_RX_SIZE 
3290
....................   #undef USB_EP15_RX_SIZE 
3290
....................   #undef USB_EP15_RX_SIZE 
3291
....................  #endif 
3291
....................  #endif 
3292
....................  #define USB_EP15_RX_SIZE 0 
3292
....................  #define USB_EP15_RX_SIZE 0 
3293
.................... #else 
3293
.................... #else 
3294
....................  #ifndef USB_EP15_RX_SIZE 
3294
....................  #ifndef USB_EP15_RX_SIZE 
3295
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
3295
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
3296
....................  #endif 
3296
....................  #endif 
3297
.................... #endif 
3297
.................... #endif 
3298
....................  
3298
....................  
3299
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
3299
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
3300
....................  #ifdef USB_EP15_TX_SIZE 
3300
....................  #ifdef USB_EP15_TX_SIZE 
3301
....................   #undef USB_EP15_TX_SIZE 
3301
....................   #undef USB_EP15_TX_SIZE 
3302
....................  #endif 
3302
....................  #endif 
3303
....................  #define USB_EP15_TX_SIZE 0 
3303
....................  #define USB_EP15_TX_SIZE 0 
3304
.................... #else 
3304
.................... #else 
3305
....................  #ifndef USB_EP15_TX_SIZE 
3305
....................  #ifndef USB_EP15_TX_SIZE 
3306
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
3306
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
3307
....................  #endif 
3307
....................  #endif 
3308
.................... #endif 
3308
.................... #endif 
3309
....................  
3309
....................  
3310
.................... const int8 usb_ep_tx_type[16]={ 
3310
.................... const int8 usb_ep_tx_type[16]={ 
3311
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
3311
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
3312
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
3312
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
3313
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
3313
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
3314
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
3314
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
3315
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
3315
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
3316
....................   USB_EP15_TX_ENABLE 
3316
....................   USB_EP15_TX_ENABLE 
3317
.................... }; 
3317
.................... }; 
3318
....................  
3318
....................  
3319
.................... const int8 usb_ep_rx_type[16]={ 
3319
.................... const int8 usb_ep_rx_type[16]={ 
3320
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
3320
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
3321
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
3321
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
3322
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
3322
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
3323
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
3323
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
3324
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
3324
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
3325
....................   USB_EP15_RX_ENABLE 
3325
....................   USB_EP15_RX_ENABLE 
3326
.................... }; 
3326
.................... }; 
3327
....................  
3327
....................  
3328
.................... const unsigned int16 usb_ep_tx_size[16]={ 
3328
.................... const unsigned int16 usb_ep_tx_size[16]={ 
3329
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
3329
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
3330
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
3330
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
3331
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
3331
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
3332
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
3332
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
3333
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
3333
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
3334
....................   USB_EP15_TX_SIZE 
3334
....................   USB_EP15_TX_SIZE 
3335
.................... }; 
3335
.................... }; 
3336
....................  
3336
....................  
3337
.................... const unsigned int16 usb_ep_rx_size[16]={ 
3337
.................... const unsigned int16 usb_ep_rx_size[16]={ 
3338
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
3338
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
3339
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
3339
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
3340
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
3340
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
3341
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
3341
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
3342
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
3342
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
3343
....................   USB_EP15_RX_SIZE 
3343
....................   USB_EP15_RX_SIZE 
3344
.................... }; 
3344
.................... }; 
3345
....................  
3345
....................  
3346
.................... #ENDIF 
3346
.................... #ENDIF 
3347
....................  
3347
....................  
3348
....................  
3348
....................  
3349
.................... #if defined(__PIC16_USB_H__) 
3349
.................... #if defined(__PIC16_USB_H__) 
3350
....................  #include <pic_usb.c> 
3350
....................  #include <pic_usb.c> 
3351
.................... #endif 
3351
.................... #endif 
3352
....................  
3352
....................  
3353
.................... #if defined(__PIC18_USB_H__) 
3353
.................... #if defined(__PIC18_USB_H__) 
3354
....................  #include <pic18_usb.c> 
3354
....................  #include <pic18_usb.c> 
3355
.................... ///////////////////////////////////////////////////////////////////////// 
3355
.................... ///////////////////////////////////////////////////////////////////////// 
3356
.................... ////                          pic18_usb.c                            //// 
3356
.................... ////                          pic18_usb.c                            //// 
3357
.................... ////                                                                 //// 
3357
.................... ////                                                                 //// 
3358
.................... //// Hardware layer for CCS's USB library.  See pic18_usb.h more     //// 
3358
.................... //// Hardware layer for CCS's USB library.  See pic18_usb.h more     //// 
3359
.................... //// documentation about the PIC18 hardware layer.                   //// 
3359
.................... //// documentation about the PIC18 hardware layer.                   //// 
3360
.................... ////                                                                 //// 
3360
.................... ////                                                                 //// 
3361
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H      //// 
3361
.................... //// This file is part of CCS's PIC USB driver code.  See USB.H      //// 
3362
.................... //// for more documentation and a list of examples.                  //// 
3362
.................... //// for more documentation and a list of examples.                  //// 
3363
.................... ////                                                                 //// 
3363
.................... ////                                                                 //// 
3364
.................... ///////////////////////////////////////////////////////////////////////// 
3364
.................... ///////////////////////////////////////////////////////////////////////// 
3365
.................... ////                                                                 //// 
3365
.................... ////                                                                 //// 
3366
.................... //// Version History:                                                //// 
3366
.................... //// Version History:                                                //// 
3367
.................... ////                                                                 //// 
3367
.................... ////                                                                 //// 
3368
.................... //// March 5th, 2009:                                                //// 
3368
.................... //// March 5th, 2009:                                                //// 
3369
.................... ////   18F14K50 family added.                                        //// 
3369
.................... ////   18F14K50 family added.                                        //// 
3370
.................... ////   Cleanup for Wizard.                                           //// 
3370
.................... ////   Cleanup for Wizard.                                           //// 
3371
.................... ////   PIC24 Initial release.                                        //// 
3371
.................... ////   PIC24 Initial release.                                        //// 
3372
.................... ////                                                                 //// 
3372
.................... ////                                                                 //// 
3373
.................... //// Nov 3rd, 2008:                                                  //// 
3373
.................... //// Nov 3rd, 2008:                                                  //// 
3374
.................... ////  * 4553 family added.                                           //// 
3374
.................... ////  * 4553 family added.                                           //// 
3375
.................... ////                                                                 //// 
3375
.................... ////                                                                 //// 
3376
.................... //// Dec 18, 2007:                                                   //// 
3376
.................... //// Dec 18, 2007:                                                   //// 
3377
.................... ////  * usb_kbhit() moved to device driver.                          //// 
3377
.................... ////  * usb_kbhit() moved to device driver.                          //// 
3378
.................... ////  * USB Token handler changed to workaround a flaw in the USB    //// 
3378
.................... ////  * USB Token handler changed to workaround a flaw in the USB    //// 
3379
.................... ////     peripheral to prevent the USB peripheral from               //// 
3379
.................... ////     peripheral to prevent the USB peripheral from               //// 
3380
.................... ////     inadvertantly STALLing the endpoint.  Happened most often   //// 
3380
.................... ////     inadvertantly STALLing the endpoint.  Happened most often   //// 
3381
.................... ////     in bulk demo applications, especially CDC.                  //// 
3381
.................... ////     in bulk demo applications, especially CDC.                  //// 
3382
.................... ////                                                                 //// 
3382
.................... ////                                                                 //// 
3383
.................... ////   11-6-07:  Fixed a bug where usb_data_buffer[] was reserving   //// 
3383
.................... ////   11-6-07:  Fixed a bug where usb_data_buffer[] was reserving   //// 
3384
.................... ////                 too much RAM.                                   //// 
3384
.................... ////                 too much RAM.                                   //// 
3385
.................... ////             USB_MAX_EP0_PACKET_LENGTH value can be overwritten. ////  
3385
.................... ////             USB_MAX_EP0_PACKET_LENGTH value can be overwritten. ////  
3386
.................... ////                 For the 18F4450/2450 family this should be 8    //// 
3386
.................... ////                 For the 18F4450/2450 family this should be 8    //// 
3387
.................... ////                 because of limited RAM.  Reducing this value    ////  
3387
.................... ////                 because of limited RAM.  Reducing this value    ////  
3388
.................... ////                 frees RAM for application.                      //// 
3388
.................... ////                 frees RAM for application.                      //// 
3389
.................... ////             Based upon which endpoints have been configured for //// 
3389
.................... ////             Based upon which endpoints have been configured for //// 
3390
.................... ////                 use, will free up unused USB data RAM for       //// 
3390
.................... ////                 use, will free up unused USB data RAM for       //// 
3391
.................... ////                 application dynamically.  This should free up   //// 
3391
.................... ////                 application dynamically.  This should free up   //// 
3392
.................... ////                 at least 128 bytes of RAM.                      //// 
3392
.................... ////                 at least 128 bytes of RAM.                      //// 
3393
.................... ////             CDC now fits on a 18F4450/2450                      //// 
3393
.................... ////             CDC now fits on a 18F4450/2450                      //// 
3394
.................... ////                                                                 //// 
3394
.................... ////                                                                 //// 
3395
.................... ////   09-19-07: Fixed problems with 18F4450 family.                 //// 
3395
.................... ////   09-19-07: Fixed problems with 18F4450 family.                 //// 
3396
.................... ////                                                                 //// 
3396
.................... ////                                                                 //// 
3397
.................... ////   07-17-07: Added 18F4450,2450 support                          //// 
3397
.................... ////   07-17-07: Added 18F4450,2450 support                          //// 
3398
.................... ////                                                                 //// 
3398
.................... ////                                                                 //// 
3399
.................... ////   07-13-07: Added 87J50 family support                          //// 
3399
.................... ////   07-13-07: Added 87J50 family support                          //// 
3400
.................... ////                                                                 //// 
3400
.................... ////                                                                 //// 
3401
.................... ////   11-01-05: usb_detach(), usb_attach() and usb_init_cs()        //// 
3401
.................... ////   11-01-05: usb_detach(), usb_attach() and usb_init_cs()        //// 
3402
.................... ////               changed for the better.                           //// 
3402
.................... ////               changed for the better.                           //// 
3403
.................... ////                                                                 //// 
3403
.................... ////                                                                 //// 
3404
.................... ////   10-28-05: Added usb_rx_packet_size()                          //// 
3404
.................... ////   10-28-05: Added usb_rx_packet_size()                          //// 
3405
.................... ////                                                                 //// 
3405
.................... ////                                                                 //// 
3406
.................... ////   07-13-05: usb_put_packet() changed for 16bit packet sizes     //// 
3406
.................... ////   07-13-05: usb_put_packet() changed for 16bit packet sizes     //// 
3407
.................... ////             usb_flush_in() changed for 16bit packet sizes       //// 
3407
.................... ////             usb_flush_in() changed for 16bit packet sizes       //// 
3408
.................... ////             usb_get_packet() changed for 16bit packet sizes     //// 
3408
.................... ////             usb_get_packet() changed for 16bit packet sizes     //// 
3409
.................... ////             usb_flush_out() changed for 16bit packet sizes      //// 
3409
.................... ////             usb_flush_out() changed for 16bit packet sizes      //// 
3410
.................... ////             usb_set_configured() changed for 16bit packet sizes //// 
3410
.................... ////             usb_set_configured() changed for 16bit packet sizes //// 
3411
.................... ////                                                                 //// 
3411
.................... ////                                                                 //// 
3412
.................... ////   06-30-05: usb_tbe() added                                     //// 
3412
.................... ////   06-30-05: usb_tbe() added                                     //// 
3413
.................... ////             The way endpoint 0 DTS is set has been changed.     //// 
3413
.................... ////             The way endpoint 0 DTS is set has been changed.     //// 
3414
.................... ////                                                                 //// 
3414
.................... ////                                                                 //// 
3415
.................... ////   06-20-05: Initial Release                                     //// 
3415
.................... ////   06-20-05: Initial Release                                     //// 
3416
.................... ////                                                                 //// 
3416
.................... ////                                                                 //// 
3417
.................... ////   05-13-05: Beta Release (Full Speed works)                     //// 
3417
.................... ////   05-13-05: Beta Release (Full Speed works)                     //// 
3418
.................... ////                                                                 //// 
3418
.................... ////                                                                 //// 
3419
.................... ////   03-21-05: Initial Alpha Release                               //// 
3419
.................... ////   03-21-05: Initial Alpha Release                               //// 
3420
.................... ////                                                                 //// 
3420
.................... ////                                                                 //// 
3421
.................... ///////////////////////////////////////////////////////////////////////// 
3421
.................... ///////////////////////////////////////////////////////////////////////// 
3422
.................... ////        (C) Copyright 1996,2009 Custom Computer Services         //// 
3422
.................... ////        (C) Copyright 1996,2009 Custom Computer Services         //// 
3423
.................... //// This source code may only be used by licensed users of the CCS  //// 
3423
.................... //// This source code may only be used by licensed users of the CCS  //// 
3424
.................... //// C compiler.  This source code may only be distributed to other  //// 
3424
.................... //// C compiler.  This source code may only be distributed to other  //// 
3425
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
3425
.................... //// licensed users of the CCS C compiler.  No other use,            //// 
3426
.................... //// reproduction or distribution is permitted without written       //// 
3426
.................... //// reproduction or distribution is permitted without written       //// 
3427
.................... //// permission.  Derivative programs created using this software    //// 
3427
.................... //// permission.  Derivative programs created using this software    //// 
3428
.................... //// in object code form are not restricted in any way.              //// 
3428
.................... //// in object code form are not restricted in any way.              //// 
3429
.................... ///////////////////////////////////////////////////////////////////////// 
3429
.................... ///////////////////////////////////////////////////////////////////////// 
3430
....................  
3430
....................  
3431
.................... #IFNDEF __PIC18_USB_C__ 
3431
.................... #IFNDEF __PIC18_USB_C__ 
3432
.................... #DEFINE __PIC18_USB_C__ 
3432
.................... #DEFINE __PIC18_USB_C__ 
3433
....................  
3433
....................  
3434
.................... #INCLUDE <usb.h> 
3434
.................... #INCLUDE <usb.h> 
3435
.................... /////////////////////////////////////////////////////////////////////////// 
3435
.................... /////////////////////////////////////////////////////////////////////////// 
3436
.................... ////                              usb.h                                //// 
3436
.................... ////                              usb.h                                //// 
3437
.................... ////                                                                   //// 
3437
.................... ////                                                                   //// 
3438
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
3438
.................... //// Function protypes, defintions and globals used by CCS USB driver  //// 
3439
.................... ////                                                                   //// 
3439
.................... ////                                                                   //// 
3440
.................... //// This file is part of CCS's USB driver code                        //// 
3440
.................... //// This file is part of CCS's USB driver code                        //// 
3441
.................... ////                                                                   //// 
3441
.................... ////                                                                   //// 
3442
.................... //// The following USB examples are provided by CCS:                   //// 
3442
.................... //// The following USB examples are provided by CCS:                   //// 
3443
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
3443
.................... ////   ex_usb_mouse.c - A HID Mouse.                                   //// 
3444
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
3444
.................... ////   ex_usb_hid.c - A custom application using HID protocol.         //// 
3445
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
3445
.................... ////   ex_usb_kbmouse.c - A HID Mouse/Keyboard combo using multiple    //// 
3446
.................... ////                      interfaces.                                  //// 
3446
.................... ////                      interfaces.                                  //// 
3447
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
3447
.................... ////   ex_usb_kbmouse2.c - A HID Mouse/Keyboard combo using multiple   //// 
3448
.................... ////                      HID Reports.                                 //// 
3448
.................... ////                      HID Reports.                                 //// 
3449
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
3449
.................... ////   ex_usb_scope.c - A digital oscilloscope using a custom          //// 
3450
.................... ////                    protocol requiring custom Windows drivers.     //// 
3450
.................... ////                    protocol requiring custom Windows drivers.     //// 
3451
.................... ////   ex_usb_serial.c -                                               //// 
3451
.................... ////   ex_usb_serial.c -                                               //// 
3452
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
3452
.................... ////   ex_usb_serial2.c - Two examples of using the CDC driver for     //// 
3453
.................... ////     a virtual COM port.                                           //// 
3453
.................... ////     a virtual COM port.                                           //// 
3454
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
3454
.................... ////   ex_usb_bootloader.c - CDC/Virtual COM port bootloader.          //// 
3455
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
3455
.................... ////   ex_usb_loadmouse.c - A conversion of ex_usb_mouse.c that is     //// 
3456
.................... ////        compatible with ex_usb_mouse.c.                            //// 
3456
.................... ////        compatible with ex_usb_mouse.c.                            //// 
3457
.................... ////                                                                   //// 
3457
.................... ////                                                                   //// 
3458
.................... ////        ********************** API *********************           //// 
3458
.................... ////        ********************** API *********************           //// 
3459
.................... ////                                                                   //// 
3459
.................... ////                                                                   //// 
3460
.................... //// These are the functions that are meant to be called by the user:  //// 
3460
.................... //// These are the functions that are meant to be called by the user:  //// 
3461
.................... ////                                                                   //// 
3461
.................... ////                                                                   //// 
3462
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
3462
.................... //// usb_init() - Initializes the USB stack, the USB peripheral and    //// 
3463
.................... ////              attaches the unit to the usb bus.  Enables           //// 
3463
.................... ////              attaches the unit to the usb bus.  Enables           //// 
3464
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
3464
.................... ////              interrupts.  Will wait in an infinite loop until     //// 
3465
.................... ////              the device enumerates - if you are using             //// 
3465
.................... ////              the device enumerates - if you are using             //// 
3466
.................... ////              connection sense or if the processor should run      //// 
3466
.................... ////              connection sense or if the processor should run      //// 
3467
.................... ////              even if it's not connected to USB then use           //// 
3467
.................... ////              even if it's not connected to USB then use           //// 
3468
.................... ////              usb_init_cs() instead.                               //// 
3468
.................... ////              usb_init_cs() instead.                               //// 
3469
.................... ////                                                                   //// 
3469
.................... ////                                                                   //// 
3470
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
3470
.................... //// usb_init_cs() - A smaller usb_init(), does not attach unit        //// 
3471
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
3471
.................... ////              to usb bus or enable interrupts.  Since this does    //// 
3472
.................... ////              not attach to the USB, you must periodically call    //// 
3472
.................... ////              not attach to the USB, you must periodically call    //// 
3473
.................... ////              usb_task().  See usb_task() for more information.    //// 
3473
.................... ////              usb_task().  See usb_task() for more information.    //// 
3474
.................... ////                                                                   //// 
3474
.................... ////                                                                   //// 
3475
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
3475
.................... //// usb_task() - If usb_init_cs() was used to initiate the USB        //// 
3476
.................... ////        peripheral, usb_task() should then be called periodically  //// 
3476
.................... ////        peripheral, usb_task() should then be called periodically  //// 
3477
.................... ////        to check the connection sense pin.  If the connection      //// 
3477
.................... ////        to check the connection sense pin.  If the connection      //// 
3478
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
3478
.................... ////        sense pin denotes USB is connected and the USB peripheral  //// 
3479
.................... ////        is not attached, this will attach the USB peripheral       //// 
3479
.................... ////        is not attached, this will attach the USB peripheral       //// 
3480
.................... ////        so the PC can start the enumeration process (and it        //// 
3480
.................... ////        so the PC can start the enumeration process (and it        //// 
3481
.................... ////        will enable interrupts).  If the connection sense pin      //// 
3481
.................... ////        will enable interrupts).  If the connection sense pin      //// 
3482
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
3482
.................... ////        denotes USB is not attached and the USB peripheral is      //// 
3483
.................... ////        running, this will reset the USB peripheral and wait       //// 
3483
.................... ////        running, this will reset the USB peripheral and wait       //// 
3484
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
3484
.................... ////        for USB to reconnect (and usb_enumerated() will start      //// 
3485
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
3485
.................... ////        returning FALSE).  If connection sense (USB_CON_SENSE_PIN) //// 
3486
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
3486
.................... ////        is not defined the usb_task() assumes that USB is always   //// 
3487
.................... ////        connected.                                                 //// 
3487
.................... ////        connected.                                                 //// 
3488
.................... ////                                                                   //// 
3488
.................... ////                                                                   //// 
3489
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
3489
.................... //// usb_attached() - Returns TRUE if the device is attached to a      //// 
3490
.................... ////                  USB cable.  A macro that looks at the defined    //// 
3490
.................... ////                  USB cable.  A macro that looks at the defined    //// 
3491
.................... ////                  connection sense pin.  If this returns TRUE      //// 
3491
.................... ////                  connection sense pin.  If this returns TRUE      //// 
3492
.................... ////                  it does not mean the PC has connected to it,     //// 
3492
.................... ////                  it does not mean the PC has connected to it,     //// 
3493
.................... ////                  you need to use usb_enumerated() to check this.  //// 
3493
.................... ////                  you need to use usb_enumerated() to check this.  //// 
3494
.................... ////                                                                   //// 
3494
.................... ////                                                                   //// 
3495
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
3495
.................... //// usb_enumerated() - Returns TRUE if device has been enumerated     //// 
3496
.................... ////                    (configured) by host, FALSE if it has not.     //// 
3496
.................... ////                    (configured) by host, FALSE if it has not.     //// 
3497
.................... ////                    Do not try to use the USB peripheral for       //// 
3497
.................... ////                    Do not try to use the USB peripheral for       //// 
3498
.................... ////                    sending and receiving packets until you        //// 
3498
.................... ////                    sending and receiving packets until you        //// 
3499
.................... ////                    are enumerated.                                //// 
3499
.................... ////                    are enumerated.                                //// 
3500
.................... ////                                                                   //// 
3500
.................... ////                                                                   //// 
3501
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
3501
.................... //// usb_wait_for_enumeration() - Sits in an infinte loop until device //// 
3502
.................... ////                              is enumerated.                       //// 
3502
.................... ////                              is enumerated.                       //// 
3503
.................... ////                                                                   //// 
3503
.................... ////                                                                   //// 
3504
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
3504
.................... //// usb_tbe(endpoint) - Returns TRUE if the endpoint transmit buffer  //// 
3505
.................... ////     is free and ready to accept a new packet for transmission.    //// 
3505
.................... ////     is free and ready to accept a new packet for transmission.    //// 
3506
.................... ////                                                                   //// 
3506
.................... ////                                                                   //// 
3507
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
3507
.................... //// usb_put_packet(endpoint, ptr, len, tgl) - Sends one packet to the //// 
3508
.................... ////                    host.  If you need to send a message that      //// 
3508
.................... ////                    host.  If you need to send a message that      //// 
3509
.................... ////                    spans more than one packet then use            //// 
3509
.................... ////                    spans more than one packet then use            //// 
3510
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
3510
.................... ////                    usb_puts().  Fore more detailed documentation  //// 
3511
.................... ////                    see usb_hw_layer.h                             //// 
3511
.................... ////                    see usb_hw_layer.h                             //// 
3512
.................... ////                                                                   //// 
3512
.................... ////                                                                   //// 
3513
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
3513
.................... //// usb_puts(endpoint, ptr, len, timeout) - Sends a multiple packet   //// 
3514
.................... ////     message to the host.  If you only need to send one packet,    //// 
3514
.................... ////     message to the host.  If you only need to send one packet,    //// 
3515
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
3515
.................... ////     it is more effecient to use usb_put_packet().  This is        //// 
3516
.................... ////     documented in more detail above the prototype in USB.H.       //// 
3516
.................... ////     documented in more detail above the prototype in USB.H.       //// 
3517
.................... ////                                                                   //// 
3517
.................... ////                                                                   //// 
3518
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
3518
.................... //// usb_kbhit(endpoint) - Returns true if OUT endpoint contains data  //// 
3519
.................... ////               from host.  This will remain TRUE until             //// 
3519
.................... ////               from host.  This will remain TRUE until             //// 
3520
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
3520
.................... ////               usb_put_packet() or usb_flush_out() used.           //// 
3521
.................... ////               This function will return an invalid response       //// 
3521
.................... ////               This function will return an invalid response       //// 
3522
.................... ////               if specified endpoint is not enabled for            //// 
3522
.................... ////               if specified endpoint is not enabled for            //// 
3523
.................... ////               receiving data.                                     //// 
3523
.................... ////               receiving data.                                     //// 
3524
.................... ////                                                                   //// 
3524
.................... ////                                                                   //// 
3525
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
3525
.................... //// len = usb_get_packet(endpoint, ptr, max) - Gets one packet that   //// 
3526
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
3526
.................... ////        from the host/PC.  usb_kbhit() must return TRUE before you //// 
3527
.................... ////        call this routine or your data may not be valid.  This     //// 
3527
.................... ////        call this routine or your data may not be valid.  This     //// 
3528
.................... ////        only receives one packet, if you are trying to receive a   ////  
3528
.................... ////        only receives one packet, if you are trying to receive a   ////  
3529
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
3529
.................... ////        multi-packet message use usb_gets().  For more detailed    //// 
3530
.................... ////        documentation see usb_hw_layer.h.                          //// 
3530
.................... ////        documentation see usb_hw_layer.h.                          //// 
3531
.................... ////                                                                   //// 
3531
.................... ////                                                                   //// 
3532
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
3532
.................... //// len = usb_gets(endpoint, ptr, max, timeout) - Gets multiple       //// 
3533
.................... ////        packets from the host, you would use this instead          //// 
3533
.................... ////        packets from the host, you would use this instead          //// 
3534
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
3534
.................... ////        of usb_get_packet() if you wanted to handle multi-packet   //// 
3535
.................... ////        messages.  This is documented in more detail above the     //// 
3535
.................... ////        messages.  This is documented in more detail above the     //// 
3536
.................... ////        prototype in USB.H.                                        //// 
3536
.................... ////        prototype in USB.H.                                        //// 
3537
.................... ////                                                                   //// 
3537
.................... ////                                                                   //// 
3538
.................... ////                                                                   //// 
3538
.................... ////                                                                   //// 
3539
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
3539
.................... ////        ********* DEFINITIONS / CONFIGURATION **********           //// 
3540
.................... ////                                                                   //// 
3540
.................... ////                                                                   //// 
3541
.................... //// The following definitions are declared here, but can be           //// 
3541
.................... //// The following definitions are declared here, but can be           //// 
3542
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
3542
.................... //// overwritten in your code.  Unless needed otherwise, leave         //// 
3543
.................... //// to default value.  If confused about a definition read the        //// 
3543
.................... //// to default value.  If confused about a definition read the        //// 
3544
.................... //// comments at each defintion                                        //// 
3544
.................... //// comments at each defintion                                        //// 
3545
.................... ////                                                                   //// 
3545
.................... ////                                                                   //// 
3546
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
3546
.................... //// USB_HID_IDLE (TRUE) - Set to TRUE if your device supports         //// 
3547
.................... ////                            Set_Idle HID class request.  Set to    //// 
3547
.................... ////                            Set_Idle HID class request.  Set to    //// 
3548
.................... ////                            False if you do not (device will       //// 
3548
.................... ////                            False if you do not (device will       //// 
3549
.................... ////                            send a Wrong-state if computer         //// 
3549
.................... ////                            send a Wrong-state if computer         //// 
3550
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
3550
.................... ////                            sends a Set_Idle / Get_Idle command)   //// 
3551
.................... ////                            NOTE: If you set to TRUE you must      //// 
3551
.................... ////                            NOTE: If you set to TRUE you must      //// 
3552
.................... ////                            provide your own code.  See            //// 
3552
.................... ////                            provide your own code.  See            //// 
3553
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
3553
.................... ////                            usb_isr_tkn_setup_ClassInterface() in  //// 
3554
.................... ////                            usb.c                                  //// 
3554
.................... ////                            usb.c                                  //// 
3555
.................... ////                                                                   //// 
3555
.................... ////                                                                   //// 
3556
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
3556
.................... //// USB_HID_BOOT_PROTOCOL (FALSE) - Set to TRUE if your device supports   //// 
3557
.................... ////                            Set_Protocl HID class request. Set to  //// 
3557
.................... ////                            Set_Protocl HID class request. Set to  //// 
3558
.................... ////                            False if you do not (device will       //// 
3558
.................... ////                            False if you do not (device will       //// 
3559
.................... ////                            send a Wrong-state if computer         //// 
3559
.................... ////                            send a Wrong-state if computer         //// 
3560
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
3560
.................... ////                            sends a Set_Protocl / Get_Protocol     //// 
3561
.................... ////                            command).                              //// 
3561
.................... ////                            command).                              //// 
3562
.................... ////                            NOTE: If you set to TRUE you must      //// 
3562
.................... ////                            NOTE: If you set to TRUE you must      //// 
3563
.................... ////                            provide your own code in the           //// 
3563
.................... ////                            provide your own code in the           //// 
3564
.................... ////                            application that properly send boot    //// 
3564
.................... ////                            application that properly send boot    //// 
3565
.................... ////                            or HID packets.                        //// 
3565
.................... ////                            or HID packets.                        //// 
3566
.................... ////                                                                   //// 
3566
.................... ////                                                                   //// 
3567
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
3567
.................... //// USB_MAX_EP0_PACKET_LENGTH (8) - Max Packet size for Endpoint 0.   //// 
3568
.................... ////                            The hardware level driver (ex          //// 
3568
.................... ////                            The hardware level driver (ex          //// 
3569
.................... ////                            pic18_usb.h will define this value if  //// 
3569
.................... ////                            pic18_usb.h will define this value if  //// 
3570
.................... ////                            not already overwritten).  Increasing  //// 
3570
.................... ////                            not already overwritten).  Increasing  //// 
3571
.................... ////                            this size will speed up the            //// 
3571
.................... ////                            this size will speed up the            //// 
3572
.................... ////                            enumeration process.                   //// 
3572
.................... ////                            enumeration process.                   //// 
3573
.................... ////                                                                   //// 
3573
.................... ////                                                                   //// 
3574
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
3574
.................... //// USB_EPx_RX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
3575
.................... ////                         endpoint number. Change this define       //// 
3575
.................... ////                         endpoint number. Change this define       //// 
3576
.................... ////                         to specify what kind of transfer method   //// 
3576
.................... ////                         to specify what kind of transfer method   //// 
3577
.................... ////                         this RX (PC to device) endpoint uses.     //// 
3577
.................... ////                         this RX (PC to device) endpoint uses.     //// 
3578
.................... ////                       Here is the list of valid transfer methods: //// 
3578
.................... ////                       Here is the list of valid transfer methods: //// 
3579
.................... ////                             USB_ENABLE_CONTROL                    //// 
3579
.................... ////                             USB_ENABLE_CONTROL                    //// 
3580
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
3580
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
3581
.................... ////                             USB_ENABLE_BULK                       //// 
3581
.................... ////                             USB_ENABLE_BULK                       //// 
3582
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
3582
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
3583
.................... ////                             USB_ENABLE_DISABLED                   //// 
3583
.................... ////                             USB_ENABLE_DISABLED                   //// 
3584
.................... ////                        Don't forget that you must specify the     //// 
3584
.................... ////                        Don't forget that you must specify the     //// 
3585
.................... ////                        transfer method properly in your endpoint  //// 
3585
.................... ////                        transfer method properly in your endpoint  //// 
3586
.................... ////                        descriptor, too.                           //// 
3586
.................... ////                        descriptor, too.                           //// 
3587
.................... ////                                                                   //// 
3587
.................... ////                                                                   //// 
3588
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
3588
.................... //// USB_EPx_RX_SIZE (0) - For some hardware it is important to know   //// 
3589
.................... ////                       how much memory to reserve for receiving    //// 
3589
.................... ////                       how much memory to reserve for receiving    //// 
3590
.................... ////                       packets.                                    //// 
3590
.................... ////                       packets.                                    //// 
3591
.................... ////                                                                   //// 
3591
.................... ////                                                                   //// 
3592
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
3592
.................... ////  *** NOTE *** You must have both USB_EPx_RX_ENABLE defined and    //// 
3593
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
3593
.................... ////               USB_EPx_RX_SIZE defined (non 0) to enable a RX      //// 
3594
.................... ////               endpoint.                                           //// 
3594
.................... ////               endpoint.                                           //// 
3595
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
3595
.................... ////  *** NOTE *** Endpoint 0 is always enabled.                       //// 
3596
.................... ////                                                                   //// 
3596
.................... ////                                                                   //// 
3597
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
3597
.................... //// USB_EPx_TX_ENABLE (USB_ENABLE_DISABLED) - Where x is the          //// 
3598
.................... ////                         endpoint number. Change this define       //// 
3598
.................... ////                         endpoint number. Change this define       //// 
3599
.................... ////                         to specify what kind of transfer method   //// 
3599
.................... ////                         to specify what kind of transfer method   //// 
3600
.................... ////                         this TX (device to PC) endpoint uses.     //// 
3600
.................... ////                         this TX (device to PC) endpoint uses.     //// 
3601
.................... ////                       Here is the list of valid transfer methods: //// 
3601
.................... ////                       Here is the list of valid transfer methods: //// 
3602
.................... ////                             USB_ENABLE_CONTROL                    //// 
3602
.................... ////                             USB_ENABLE_CONTROL                    //// 
3603
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
3603
.................... ////                             USB_ENABLE_ISOCHRONOUS                //// 
3604
.................... ////                             USB_ENABLE_BULK                       //// 
3604
.................... ////                             USB_ENABLE_BULK                       //// 
3605
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
3605
.................... ////                             USB_ENABLE_INTERRUPT                  //// 
3606
.................... ////                             USB_ENABLE_DISABLED                   //// 
3606
.................... ////                             USB_ENABLE_DISABLED                   //// 
3607
.................... ////                        Don't forget that you must specify the     //// 
3607
.................... ////                        Don't forget that you must specify the     //// 
3608
.................... ////                        transfer method properly in your endpoint  //// 
3608
.................... ////                        transfer method properly in your endpoint  //// 
3609
.................... ////                        descriptor, too.                           //// 
3609
.................... ////                        descriptor, too.                           //// 
3610
.................... ////                                                                   //// 
3610
.................... ////                                                                   //// 
3611
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
3611
.................... //// USB_EPx_TX_SIZE (0) - For some hardware it is important to know   //// 
3612
.................... ////                       how much memory to reserve for transmitting //// 
3612
.................... ////                       how much memory to reserve for transmitting //// 
3613
.................... ////                       packets.                                    //// 
3613
.................... ////                       packets.                                    //// 
3614
.................... ////                                                                   //// 
3614
.................... ////                                                                   //// 
3615
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
3615
.................... ////  *** NOTE *** You must have both USB_EPx_TX_ENABLE defined and    //// 
3616
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
3616
.................... ////               USB_EPx_TX_SIZE defined (non 0) to enable a TX      //// 
3617
.................... ////               endpoint.                                           //// 
3617
.................... ////               endpoint.                                           //// 
3618
.................... ////                                                                   //// 
3618
.................... ////                                                                   //// 
3619
.................... ////                                                                   //// 
3619
.................... ////                                                                   //// 
3620
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
3620
.................... //// USB_HID_DEVICE (TRUE) - HID devices require extra code to handle  //// 
3621
.................... ////                         HID requests.  You can disable to save    //// 
3621
.................... ////                         HID requests.  You can disable to save    //// 
3622
.................... ////                         ROM space if you are not using a HID      //// 
3622
.................... ////                         ROM space if you are not using a HID      //// 
3623
.................... ////                         device.  If you are not using a HID       //// 
3623
.................... ////                         device.  If you are not using a HID       //// 
3624
.................... ////                         device you must provide your own O/S      //// 
3624
.................... ////                         device you must provide your own O/S      //// 
3625
.................... ////                         (Windows) driver.                         //// 
3625
.................... ////                         (Windows) driver.                         //// 
3626
.................... ////                                                                   //// 
3626
.................... ////                                                                   //// 
3627
.................... //// The other definitions should not be changed.                      //// 
3627
.................... //// The other definitions should not be changed.                      //// 
3628
.................... ////                                                                   //// 
3628
.................... ////                                                                   //// 
3629
.................... /////////////////////////////////////////////////////////////////////////// 
3629
.................... /////////////////////////////////////////////////////////////////////////// 
3630
.................... ////                                                                   //// 
3630
.................... ////                                                                   //// 
3631
.................... //// Version History:                                                  //// 
3631
.................... //// Version History:                                                  //// 
3632
.................... ////                                                                   //// 
3632
.................... ////                                                                   //// 
3633
.................... //// March 5th, 2009:                                                  //// 
3633
.................... //// March 5th, 2009:                                                  //// 
3634
.................... ////   Cleanup for Wizard.                                             //// 
3634
.................... ////   Cleanup for Wizard.                                             //// 
3635
.................... ////   PIC24 Initial release.                                          //// 
3635
.................... ////   PIC24 Initial release.                                          //// 
3636
.................... ////                                                                   //// 
3636
.................... ////                                                                   //// 
3637
.................... //// July 13th, 2005:                                                  //// 
3637
.................... //// July 13th, 2005:                                                  //// 
3638
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
3638
.................... ////  usb_ep_tx_size[] and usb_ep_rx_size[] changed to 16bits          //// 
3639
.................... ////                                                                   //// 
3639
.................... ////                                                                   //// 
3640
.................... //// June 20th, 2005:                                                  //// 
3640
.................... //// June 20th, 2005:                                                  //// 
3641
.................... ////  Initial 18fxx5x release                                          //// 
3641
.................... ////  Initial 18fxx5x release                                          //// 
3642
.................... ////                                                                   //// 
3642
.................... ////                                                                   //// 
3643
.................... //// May 13th, 2005:                                                   //// 
3643
.................... //// May 13th, 2005:                                                   //// 
3644
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
3644
.................... ////  Beta release, only works with 18Fxx5x hardware layer.            //// 
3645
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
3645
.................... ////  Now supports multiple interfaces (many defines in descriptors    //// 
3646
.................... ////   will have to be changed, see examples)                          //// 
3646
.................... ////   will have to be changed, see examples)                          //// 
3647
.................... ////                                                                   //// 
3647
.................... ////                                                                   //// 
3648
.................... //// Mar 21st, 2005:                                                   //// 
3648
.................... //// Mar 21st, 2005:                                                   //// 
3649
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
3649
.................... ////  Initial Alpha Release with PIC18Fxx5x support.  (ONLY TESTED     //// 
3650
.................... ////   WITH 18F4550)                                                   //// 
3650
.................... ////   WITH 18F4550)                                                   //// 
3651
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
3651
.................... ////  usb_gets() and usb_puts() changed (see usb.c)                    //// 
3652
.................... ////                                                                   //// 
3652
.................... ////                                                                   //// 
3653
.................... //// June 24th, 2004:                                                  //// 
3653
.................... //// June 24th, 2004:                                                  //// 
3654
.................... ////  Optimization and cleanup.                                        //// 
3654
.................... ////  Optimization and cleanup.                                        //// 
3655
.................... ////                The following definitions changed:                 //// 
3655
.................... ////                The following definitions changed:                 //// 
3656
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
3656
.................... ////  USB_EPx_TX_ENABLE and USB_EPx_RX_ENABLE have changed. See usb.h  //// 
3657
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
3657
.................... ////  USB_CONFIG_DESCRIPTORS[] removed                                 //// 
3658
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
3658
.................... ////  USB_CONFIG_DESC_LEN changed to USB_DESC_CONFIG_LEN               //// 
3659
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
3659
.................... ////  USB_INTERFACE_DESC_LEN changed to USB_DESC_INTERFACE_LEN         //// 
3660
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
3660
.................... ////  USB_CLASS_DESC_LEN changed to USB_DESC_CLASS_LEN                 //// 
3661
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
3661
.................... ////  USB_ENDPOINT_DESC_LEN changed to USB_DESC_ENDPOINT_LEN           //// 
3662
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
3662
.................... ////  USB_CONFIG_DESC_KEY changed to USB_DESC_CONFIG_TYPE              //// 
3663
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
3663
.................... ////  USB_INTERFACE_DESC_KEY changed to USB_DESC_INTERFACE_TYPE        //// 
3664
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
3664
.................... ////  USB_CLASS_DESC_KEY changed to USB_DESC_CLASS_TYPE                //// 
3665
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
3665
.................... ////  USB_ENDPOINT_DESC_KEY changed to USB_DESC_ENDPOINT_TYPE          //// 
3666
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
3666
.................... ////  USB_STRING_X[] arrays removed, see USB_STRING_DESC[] and         //// 
3667
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
3667
.................... ////                                 USB_STRING_DESC_OFFSET[]          //// 
3668
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
3668
.................... ////  dev_req, curr_config, status_device and getdesc_type global      //// 
3669
.................... ////        variables moved into struct USB_stack_status               //// 
3669
.................... ////        variables moved into struct USB_stack_status               //// 
3670
.................... ////                                                                   //// 
3670
.................... ////                                                                   //// 
3671
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
3671
.................... //// October 15th, 2003: Support for boot protocol added.              //// 
3672
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
3672
.................... ////         Set USB_HID_BOOT_PROTOCOL to TRUE to support this.        //// 
3673
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
3673
.................... ////         The array hid_protocol[] saves which protocol mode each   //// 
3674
.................... ////         interface is in.  It is your applications job to send     //// 
3674
.................... ////         interface is in.  It is your applications job to send     //// 
3675
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
3675
.................... ////         data that either fit the boot protocol or HID protocol.   //// 
3676
.................... ////                                                                   //// 
3676
.................... ////                                                                   //// 
3677
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
3677
.................... //// May 6th, 2003: Fixed a potential stack overflow using PCM         //// 
3678
.................... ////                                                                   //// 
3678
.................... ////                                                                   //// 
3679
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
3679
.................... //// October 29th, 2002: New definition added to USB_STATES            //// 
3680
.................... ////                                                                   //// 
3680
.................... ////                                                                   //// 
3681
.................... //// August 2nd, 2002: Initial Public Release                          //// 
3681
.................... //// August 2nd, 2002: Initial Public Release                          //// 
3682
.................... ////                                                                   //// 
3682
.................... ////                                                                   //// 
3683
.................... /////////////////////////////////////////////////////////////////////////// 
3683
.................... /////////////////////////////////////////////////////////////////////////// 
3684
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
3684
.................... ////        (C) Copyright 1996,2009 Custom Computer Services           //// 
3685
.................... //// This source code may only be used by licensed users of the CCS    //// 
3685
.................... //// This source code may only be used by licensed users of the CCS    //// 
3686
.................... //// C compiler.  This source code may only be distributed to other    //// 
3686
.................... //// C compiler.  This source code may only be distributed to other    //// 
3687
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
3687
.................... //// licensed users of the CCS C compiler.  No other use,              //// 
3688
.................... //// reproduction or distribution is permitted without written         //// 
3688
.................... //// reproduction or distribution is permitted without written         //// 
3689
.................... //// permission.  Derivative programs created using this software      //// 
3689
.................... //// permission.  Derivative programs created using this software      //// 
3690
.................... //// in object code form are not restricted in any way.                //// 
3690
.................... //// in object code form are not restricted in any way.                //// 
3691
.................... /////////////////////////////////////////////////////////////////////////// 
3691
.................... /////////////////////////////////////////////////////////////////////////// 
3692
....................  
3692
....................  
3693
.................... #IFNDEF __USB_PROTOTYPES__ 
3693
.................... #IFNDEF __USB_PROTOTYPES__ 
3694
.................... #DEFINE __USB_PROTOTYPES__ 
3694
.................... #DEFINE __USB_PROTOTYPES__ 
3695
....................  
3695
....................  
3696
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
3696
.................... //// CONFIGURATION //////////////////////////////////////////////////////////// 
3697
....................  
3697
....................  
3698
.................... #ifndef USB_CON_SENSE_PIN 
3698
.................... #ifndef USB_CON_SENSE_PIN 
3699
....................  #define USB_CON_SENSE_PIN  0 
3699
....................  #define USB_CON_SENSE_PIN  0 
3700
.................... #endif 
3700
.................... #endif 
3701
....................  
3701
....................  
3702
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
3702
.................... #IFNDEF USB_HID_BOOT_PROTOCOL 
3703
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
3703
....................    #DEFINE USB_HID_BOOT_PROTOCOL FALSE 
3704
.................... #ENDIF 
3704
.................... #ENDIF 
3705
....................  
3705
....................  
3706
.................... #IFNDEF USB_HID_IDLE 
3706
.................... #IFNDEF USB_HID_IDLE 
3707
....................    #DEFINE USB_HID_IDLE FALSE 
3707
....................    #DEFINE USB_HID_IDLE FALSE 
3708
.................... #ENDIF 
3708
.................... #ENDIF 
3709
....................  
3709
....................  
3710
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
3710
.................... //should the compiler add the extra HID handler code?  Defaults to yes. 
3711
.................... #IFNDEF USB_HID_DEVICE 
3711
.................... #IFNDEF USB_HID_DEVICE 
3712
....................    #DEFINE USB_HID_DEVICE TRUE 
3712
....................    #DEFINE USB_HID_DEVICE TRUE 
3713
.................... #ENDIF 
3713
.................... #ENDIF 
3714
....................  
3714
....................  
3715
.................... #IFNDEF USB_CDC_DEVICE 
3715
.................... #IFNDEF USB_CDC_DEVICE 
3716
....................    #DEFINE USB_CDC_DEVICE FALSE 
3716
....................    #DEFINE USB_CDC_DEVICE FALSE 
3717
.................... #ENDIF 
3717
.................... #ENDIF 
3718
....................  
3718
....................  
3719
.................... //set to false to opt for less RAM, true to opt for less ROM 
3719
.................... //set to false to opt for less RAM, true to opt for less ROM 
3720
.................... #ifndef USB_OPT_FOR_ROM 
3720
.................... #ifndef USB_OPT_FOR_ROM 
3721
....................    #define USB_OPT_FOR_ROM TRUE 
3721
....................    #define USB_OPT_FOR_ROM TRUE 
3722
.................... #endif 
3722
.................... #endif 
3723
....................  
3723
....................  
3724
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
3724
.................... #IFNDEF USB_MAX_EP0_PACKET_LENGTH 
3725
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
3725
....................   #DEFINE USB_MAX_EP0_PACKET_LENGTH 8 
3726
.................... #ENDIF 
3726
.................... #ENDIF 
3727
....................  
3727
....................  
3728
....................  
3728
....................  
3729
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
3729
.................... ////// USER-LEVEL API ///////////////////////////////////////////////////////// 
3730
....................  
3730
....................  
3731
.................... /************************************************************** 
3731
.................... /************************************************************** 
3732
.................... /* usb_enumerated() 
3732
.................... /* usb_enumerated() 
3733
.................... /* 
3733
.................... /* 
3734
.................... /* Input: Global variable USB_Curr_Config 
3734
.................... /* Input: Global variable USB_Curr_Config 
3735
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
3735
.................... /* Returns: Returns a 1 if device is configured / enumerated, 
3736
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
3736
.................... /*          Returns a 0 if device is un-configured / not enumerated. 
3737
.................... /* 
3737
.................... /* 
3738
.................... /* Summary: See API section of USB.H for more documentation. 
3738
.................... /* Summary: See API section of USB.H for more documentation. 
3739
.................... /***************************************************************/ 
3739
.................... /***************************************************************/ 
3740
.................... int1 usb_enumerated(void); 
3740
.................... int1 usb_enumerated(void); 
3741
....................  
3741
....................  
3742
.................... /************************************************************** 
3742
.................... /************************************************************** 
3743
.................... /* usb_wait_for_enumeration() 
3743
.................... /* usb_wait_for_enumeration() 
3744
.................... /* 
3744
.................... /* 
3745
.................... /* Input: Global variable USB_Curr_Config 
3745
.................... /* Input: Global variable USB_Curr_Config 
3746
.................... /* 
3746
.................... /* 
3747
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
3747
.................... /* Summary: Waits in-definately until device is configured / enumerated. 
3748
.................... /*          See API section of USB.H for more information. 
3748
.................... /*          See API section of USB.H for more information. 
3749
.................... /***************************************************************/ 
3749
.................... /***************************************************************/ 
3750
.................... void usb_wait_for_enumeration(void); 
3750
.................... void usb_wait_for_enumeration(void); 
3751
....................  
3751
....................  
3752
.................... /**************************************************************************** 
3752
.................... /**************************************************************************** 
3753
.................... /* usb_gets(endpoint, ptr, max, timeout) 
3753
.................... /* usb_gets(endpoint, ptr, max, timeout) 
3754
.................... /* 
3754
.................... /* 
3755
.................... /* Input: endpoint - endpoint to get data from 
3755
.................... /* Input: endpoint - endpoint to get data from 
3756
.................... /*        ptr - place / array to store data to 
3756
.................... /*        ptr - place / array to store data to 
3757
.................... /*        max - max amount of data to get from USB and store into ptr 
3757
.................... /*        max - max amount of data to get from USB and store into ptr 
3758
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
3758
.................... /*         timeout - time in milliseconds, for each packet, to wait before  
3759
.................... /*                   timeout.  set to 0 for no timeout. 
3759
.................... /*                   timeout.  set to 0 for no timeout. 
3760
.................... /* 
3760
.................... /* 
3761
.................... /* Output: Amount of data returned.  It may be less than max. 
3761
.................... /* Output: Amount of data returned.  It may be less than max. 
3762
.................... /* 
3762
.................... /* 
3763
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
3763
.................... /* Summary: Gets data from the host.  Will get multiple-packet messages 
3764
.................... /*          and finish when either it receives a 0-len packet or a packet 
3764
.................... /*          and finish when either it receives a 0-len packet or a packet 
3765
.................... /*          of less size than maximum. 
3765
.................... /*          of less size than maximum. 
3766
.................... /* 
3766
.................... /* 
3767
.................... /*****************************************************************************/ 
3767
.................... /*****************************************************************************/ 
3768
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
3768
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout); 
3769
....................  
3769
....................  
3770
.................... /**************************************************************************** 
3770
.................... /**************************************************************************** 
3771
.................... /* usb_puts() 
3771
.................... /* usb_puts() 
3772
.................... /* 
3772
.................... /* 
3773
.................... /* Inputs: endpoint - endpoint to send data out 
3773
.................... /* Inputs: endpoint - endpoint to send data out 
3774
.................... /*         ptr - points to array of data to send 
3774
.................... /*         ptr - points to array of data to send 
3775
.................... /*         len - amount of data to send 
3775
.................... /*         len - amount of data to send 
3776
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
3776
.................... /*         timeout - time in milli-seconds, for each packet, to wait before  
3777
.................... /*                   timeout.  set to 0 for no timeout. 
3777
.................... /*                   timeout.  set to 0 for no timeout. 
3778
.................... /* 
3778
.................... /* 
3779
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
3779
.................... /* Outputs: Returns TRUE if message sent succesfully, FALSE if it was not 
3780
.................... /*    sent before timeout period expired. 
3780
.................... /*    sent before timeout period expired. 
3781
.................... /* 
3781
.................... /* 
3782
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
3782
.................... /* Summary: Used for sending multiple packets of data as one message.  This 
3783
.................... /*       function can still be used to send messages consiting of only one  
3783
.................... /*       function can still be used to send messages consiting of only one  
3784
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
3784
.................... /*       packet.  See usb_put_packet() documentation for the rules about when  
3785
.................... /*       multiple packet messages or 0-lenght packets are needed. 
3785
.................... /*       multiple packet messages or 0-lenght packets are needed. 
3786
.................... /* 
3786
.................... /* 
3787
.................... /*****************************************************************************/ 
3787
.................... /*****************************************************************************/ 
3788
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
3788
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout); 
3789
....................  
3789
....................  
3790
.................... /****************************************************************************** 
3790
.................... /****************************************************************************** 
3791
.................... /* usb_attached() 
3791
.................... /* usb_attached() 
3792
.................... /* 
3792
.................... /* 
3793
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
3793
.................... /* Summary: Returns TRUE if the device is attached to a USB cable. 
3794
.................... /*          See the API section of USB.H for more documentation. 
3794
.................... /*          See the API section of USB.H for more documentation. 
3795
.................... /* 
3795
.................... /* 
3796
.................... /*****************************************************************************/ 
3796
.................... /*****************************************************************************/ 
3797
.................... #if USB_CON_SENSE_PIN 
3797
.................... #if USB_CON_SENSE_PIN 
3798
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
3798
....................  #define usb_attached() input(USB_CON_SENSE_PIN) 
3799
.................... #else 
3799
.................... #else 
3800
....................  #define usb_attached() TRUE 
3800
....................  #define usb_attached() TRUE 
3801
.................... #endif 
3801
.................... #endif 
3802
....................  
3802
....................  
3803
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
3803
.................... ////// END USER-LEVEL API ///////////////////////////////////////////////////// 
3804
....................  
3804
....................  
3805
....................  
3805
....................  
3806
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
3806
.................... ////// STACK-LEVEL API USED BY HW DRIVERS //////////////////////////////////// 
3807
....................  
3807
....................  
3808
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
3808
.................... enum USB_STATES {GET_DESCRIPTOR=1,SET_ADDRESS=2,NONE=0}; 
3809
....................  
3809
....................  
3810
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
3810
.................... enum USB_GETDESC_TYPES {USB_GETDESC_CONFIG_TYPE=0,USB_GETDESC_HIDREPORT_TYPE=1,USB_GETDESC_STRING_TYPE=2,USB_GETDESC_DEVICE_TYPE=3}; 
3811
....................  
3811
....................  
3812
.................... #if USB_OPT_FOR_ROM 
3812
.................... #if USB_OPT_FOR_ROM 
3813
.................... typedef struct { 
3813
.................... typedef struct { 
3814
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
3814
....................    USB_STATES dev_req;   //what did the last setup token set us up to do?.  init at none 
3815
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
3815
....................    int  curr_config;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
3816
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
3816
....................    int status_device; //Holds our state for Set_Feature and Clear_Feature 
3817
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
3817
....................    USB_GETDESC_TYPES getdesc_type;   //which get_descriptor() we are handling 
3818
.................... } TYPE_USB_STACK_STATUS; 
3818
.................... } TYPE_USB_STACK_STATUS; 
3819
.................... #else 
3819
.................... #else 
3820
.................... typedef struct { 
3820
.................... typedef struct { 
3821
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
3821
....................    USB_STATES dev_req:2;   //what did the last setup token set us up to do?.  init at none 
3822
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
3822
....................    int  Curr_config:2;  //our current config.  start at none/powered (NOT THAT THIS LIMITS US TO 3 CONFIGURATIONS) 
3823
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
3823
....................    int status_device:2; //Holds our state for Set_Feature and Clear_Feature 
3824
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
3824
....................    USB_GETDESC_TYPES getdesc_type:2;   //which get_descriptor() we are handling 
3825
.................... } TYPE_USB_STACK_STATUS; 
3825
.................... } TYPE_USB_STACK_STATUS; 
3826
.................... #endif 
3826
.................... #endif 
3827
....................  
3827
....................  
3828
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
3828
.................... extern TYPE_USB_STACK_STATUS USB_stack_status; 
3829
....................  
3829
....................  
3830
.................... /************************************************************** 
3830
.................... /************************************************************** 
3831
.................... /* usb_token_reset() 
3831
.................... /* usb_token_reset() 
3832
.................... /* 
3832
.................... /* 
3833
.................... /* Output:  No output (but many global registers are modified) 
3833
.................... /* Output:  No output (but many global registers are modified) 
3834
.................... /* 
3834
.................... /* 
3835
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
3835
.................... /* Summary: Resets the token handler to initial (unconfigured) state. 
3836
.................... /***************************************************************/ 
3836
.................... /***************************************************************/ 
3837
.................... void usb_token_reset(void); 
3837
.................... void usb_token_reset(void); 
3838
....................  
3838
....................  
3839
.................... /************************************************************** 
3839
.................... /************************************************************** 
3840
.................... /* usb_isr_tok_setup_dne() 
3840
.................... /* usb_isr_tok_setup_dne() 
3841
.................... /* 
3841
.................... /* 
3842
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
3842
.................... /* Input: usb_ep0_rx_buffer[] contains the the setup packet. 
3843
.................... /* 
3843
.................... /* 
3844
.................... /* Output: None (many globals are changed) 
3844
.................... /* Output: None (many globals are changed) 
3845
.................... /* 
3845
.................... /* 
3846
.................... /* Summary: This function is that handles the setup token. 
3846
.................... /* Summary: This function is that handles the setup token. 
3847
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
3847
.................... /*          We must handle all relevant requests, such as Set_Configuration,  
3848
.................... /*          Get_Descriptor, etc. 
3848
.................... /*          Get_Descriptor, etc. 
3849
.................... /* 
3849
.................... /* 
3850
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
3850
.................... /*  usb_ep0_rx_buffer[] contains setup data packet, which has the  
3851
.................... /*  following records: 
3851
.................... /*  following records: 
3852
.................... /*  ------------------------------------------------------------------------------------------- 
3852
.................... /*  ------------------------------------------------------------------------------------------- 
3853
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
3853
.................... /*  usb_ep0_rx_buffer[ 0 ]=bmRequestType; Where the setup packet goes 
3854
.................... /*                              bit7   (0) host-to-device 
3854
.................... /*                              bit7   (0) host-to-device 
3855
.................... /*                                     (1) device-to-host 
3855
.................... /*                                     (1) device-to-host 
3856
.................... /*                              bit6-5 (00) usb standard request; 
3856
.................... /*                              bit6-5 (00) usb standard request; 
3857
.................... /*                                     (01) class request; 
3857
.................... /*                                     (01) class request; 
3858
.................... /*                                     (10) vendor request 
3858
.................... /*                                     (10) vendor request 
3859
.................... /*                                     (11) reserved 
3859
.................... /*                                     (11) reserved 
3860
.................... /*                              bit4-0 (0000) device 
3860
.................... /*                              bit4-0 (0000) device 
3861
.................... /*                                     (0001) interface 
3861
.................... /*                                     (0001) interface 
3862
.................... /*                                     (0010) endpoint 
3862
.................... /*                                     (0010) endpoint 
3863
.................... /*                                     (0011) other element 
3863
.................... /*                                     (0011) other element 
3864
.................... /*                                     (0100) to (1111) reserved 
3864
.................... /*                                     (0100) to (1111) reserved 
3865
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
3865
.................... /*  usb_ep0_rx_buffer[ 1 ]=bRequest ; the request 
3866
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
3866
.................... /*  usb_ep0_rx_buffer[2,3]=wValue ; a value which corresponds to request 
3867
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
3867
.................... /*  usb_ep0_rx_buffer[4,5]=wIndex ; could correspond to interface or endpoint... 
3868
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
3868
.................... /*  usb_ep0_rx_buffer[6,7]=wLength ; number of bytes in next data packet; 
3869
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
3869
.................... /*    for host-to-device, this exactly how many bytes in data packet. 
3870
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
3870
.................... /*    for device-to-host, this is the maximum bytes that can fit one packet. 
3871
.................... /***************************************************************/ 
3871
.................... /***************************************************************/ 
3872
.................... void usb_isr_tok_setup_dne(void); 
3872
.................... void usb_isr_tok_setup_dne(void); 
3873
....................  
3873
....................  
3874
.................... /************************************************************** 
3874
.................... /************************************************************** 
3875
.................... /* usb_isr_tok_out_dne() 
3875
.................... /* usb_isr_tok_out_dne() 
3876
.................... /* 
3876
.................... /* 
3877
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
3877
.................... /* Input: endpoint contains which endpoint we are receiving data (0..15) 
3878
.................... /* 
3878
.................... /* 
3879
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
3879
.................... /* Summary: Processes out tokens (out is respective of the host, so actualy  
3880
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
3880
.................... /*          incoming to the pic), but not out setup tokens.  Normally when 
3881
.................... /*          data is received it is left in the buffer (user would use 
3881
.................... /*          data is received it is left in the buffer (user would use 
3882
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
3882
.................... /*          usb_kbhit() and usb_get_packet() to receive data), but certain 
3883
.................... /*          libraries (like CDC) have to answer setup packets. 
3883
.................... /*          libraries (like CDC) have to answer setup packets. 
3884
.................... /*           
3884
.................... /*           
3885
.................... /***************************************************************/ 
3885
.................... /***************************************************************/ 
3886
.................... void usb_isr_tok_out_dne(int8 endpoint); 
3886
.................... void usb_isr_tok_out_dne(int8 endpoint); 
3887
....................  
3887
....................  
3888
.................... /************************************************************** 
3888
.................... /************************************************************** 
3889
.................... /* usb_isr_tok_in_dne(endpoint) 
3889
.................... /* usb_isr_tok_in_dne(endpoint) 
3890
.................... /* 
3890
.................... /* 
3891
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
3891
.................... /* Input: endpoint - which endpoint we are processing a setup token. 
3892
.................... /* 
3892
.................... /* 
3893
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
3893
.................... /* Summary: This handles an IN packet (HOST <- PIC).  For endpoint 0, this 
3894
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
3894
.................... /*    is usually to setup a response packet to a setup packet.  Endpoints 1..15 
3895
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
3895
.................... /*    are generally ignored, and the user has to use usb_tbe() to determine if 
3896
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
3896
.................... /*    if the buffer is ready for a new transmit packet (there are special cases, 
3897
.................... /*    like CDC which handles the CDC protocl). 
3897
.................... /*    like CDC which handles the CDC protocl). 
3898
.................... /* 
3898
.................... /* 
3899
.................... /***************************************************************/ 
3899
.................... /***************************************************************/ 
3900
.................... void usb_isr_tok_in_dne(int8 endpoint); 
3900
.................... void usb_isr_tok_in_dne(int8 endpoint); 
3901
....................  
3901
....................  
3902
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
3902
.................... ////// END STACK-LEVEL API USED BY HW DRIVERS ///////////////////////////////// 
3903
....................  
3903
....................  
3904
....................  
3904
....................  
3905
.................... //CCS only supports one configuration at this time 
3905
.................... //CCS only supports one configuration at this time 
3906
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
3906
.................... #DEFINE USB_NUM_CONFIGURATIONS 1 //DO NOT CHANGE 
3907
....................  
3907
....................  
3908
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
3908
.................... //PID values for tokens (see page 48 of USB Complete ed.1) 
3909
.................... #define PID_IN       0x09  //device to host transactions 
3909
.................... #define PID_IN       0x09  //device to host transactions 
3910
.................... #define PID_OUT      0x01  //host to device transactions 
3910
.................... #define PID_OUT      0x01  //host to device transactions 
3911
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
3911
.................... #define PID_SETUP    0x0D  //host to device setup transaction 
3912
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
3912
.................... #define PID_ACK      0x02  //receiver accepts error-free data packet 
3913
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
3913
.................... #define PID_DATA0    0x03  //data packet with even sync bit 
3914
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
3914
.................... #define PID_SOF      0x05  //start of framer marker and frame number 
3915
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
3915
.................... #define PID_NAK      0x0A  //receiver can't accept data or sender cant send data or has no data to transmit 
3916
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
3916
.................... #define PID_DATA1    0x0B  //data packet with odd sync bit 
3917
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
3917
.................... #define PID_PRE      0x0C  //preamble issued by host.  enables downstream traffic to low-speed device 
3918
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
3918
.................... #define PID_STALL    0x0E  //a control request isnt supported or the endpoint is halted 
3919
....................  
3919
....................  
3920
.................... //Key which identifies descritpors 
3920
.................... //Key which identifies descritpors 
3921
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
3921
.................... #DEFINE USB_DESC_DEVICE_TYPE     0x01  //#DEFINE USB_DEVICE_DESC_KEY      0x01 
3922
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
3922
.................... #DEFINE USB_DESC_CONFIG_TYPE     0x02  //#DEFINE USB_CONFIG_DESC_KEY      0x02 
3923
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
3923
.................... #DEFINE USB_DESC_STRING_TYPE     0x03  //#DEFINE USB_STRING_DESC_KEY      0x03 
3924
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
3924
.................... #DEFINE USB_DESC_INTERFACE_TYPE  0x04  //#DEFINE USB_INTERFACE_DESC_KEY   0x04 
3925
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
3925
.................... #DEFINE USB_DESC_ENDPOINT_TYPE   0x05  //#DEFINE USB_ENDPOINT_DESC_KEY    0x05 
3926
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
3926
.................... #DEFINE USB_DESC_CLASS_TYPE      0x21  //#DEFINE USB_CLASS_DESC_KEY       0x21 
3927
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
3927
.................... #DEFINE USB_DESC_HIDREPORT_TYPE  0x22 
3928
....................  
3928
....................  
3929
.................... //The length of each descriptor 
3929
.................... //The length of each descriptor 
3930
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
3930
.................... #DEFINE USB_DESC_DEVICE_LEN      18 //#DEFINE USB_DEVICE_DESC_LEN      18 
3931
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
3931
.................... #DEFINE USB_DESC_CONFIG_LEN      9  //#DEFINE USB_CONFIG_DESC_LEN      9 
3932
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
3932
.................... #DEFINE USB_DESC_INTERFACE_LEN   9  //#DEFINE USB_INTERFACE_DESC_LEN   9 
3933
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
3933
.................... #DEFINE USB_DESC_CLASS_LEN       9  //#DEFINE USB_CLASS_DESC_LEN       9 
3934
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
3934
.................... #DEFINE USB_DESC_ENDPOINT_LEN    7  //#DEFINE USB_ENDPOINT_DESC_LEN    7 
3935
....................  
3935
....................  
3936
.................... //Standard USB Setup bRequest Codes 
3936
.................... //Standard USB Setup bRequest Codes 
3937
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
3937
.................... #define USB_STANDARD_REQUEST_GET_STATUS         0x00 
3938
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
3938
.................... #define USB_STANDARD_REQUEST_CLEAR_FEATURE      0x01 
3939
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
3939
.................... #define USB_STANDARD_REQUEST_SET_FEATURE        0x03 
3940
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
3940
.................... #define USB_STANDARD_REQUEST_SET_ADDRESS        0x05 
3941
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
3941
.................... #define USB_STANDARD_REQUEST_GET_DESCRIPTOR     0x06 
3942
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
3942
.................... #define USB_STANDARD_REQUEST_SET_DESCRIPTOR     0x07 
3943
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
3943
.................... #define USB_STANDARD_REQUEST_GET_CONFIGURATION  0x08 
3944
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
3944
.................... #define USB_STANDARD_REQUEST_SET_CONFIGURATION  0x09 
3945
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
3945
.................... #define USB_STANDARD_REQUEST_GET_INTERFACE      0x0A 
3946
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
3946
.................... #define USB_STANDARD_REQUEST_SET_INTERFACE      0x0B 
3947
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
3947
.................... #define USB_STANDARD_REQUEST_SYNCH_FRAME        0x0C 
3948
....................  
3948
....................  
3949
.................... //HID Class Setup bRequest Codes 
3949
.................... //HID Class Setup bRequest Codes 
3950
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
3950
.................... #define USB_HID_REQUEST_GET_REPORT     0x01 
3951
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
3951
.................... #define USB_HID_REQUEST_GET_IDLE       0x02 
3952
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
3952
.................... #define USB_HID_REQUEST_GET_PROTOCOL   0x03 
3953
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
3953
.................... #define USB_HID_REQUEST_SET_REPORT     0x09 
3954
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
3954
.................... #define USB_HID_REQUEST_SET_IDLE       0x0A 
3955
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
3955
.................... #define USB_HID_REQUEST_SET_PROTOCOL   0x0B 
3956
....................  
3956
....................  
3957
.................... //types of endpoints as defined in the descriptor 
3957
.................... //types of endpoints as defined in the descriptor 
3958
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
3958
.................... #define USB_ENDPOINT_TYPE_CONTROL      0x00 
3959
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
3959
.................... #define USB_ENDPOINT_TYPE_ISOCHRONOUS  0x01 
3960
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
3960
.................... #define USB_ENDPOINT_TYPE_BULK         0x02 
3961
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
3961
.................... #define USB_ENDPOINT_TYPE_INTERRUPT    0x03 
3962
....................  
3962
....................  
3963
.................... //types of endpoints used internally in this api 
3963
.................... //types of endpoints used internally in this api 
3964
.................... #define USB_ENABLE_DISABLED     -1 
3964
.................... #define USB_ENABLE_DISABLED     -1 
3965
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
3965
.................... #define USB_ENABLE_BULK         USB_ENDPOINT_TYPE_BULK 
3966
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
3966
.................... #define USB_ENABLE_ISOCHRONOUS  USB_ENDPOINT_TYPE_ISOCHRONOUS 
3967
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
3967
.................... #define USB_ENABLE_INTERRUPT    USB_ENDPOINT_TYPE_INTERRUPT 
3968
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
3968
.................... #define USB_ENABLE_CONTROL      USB_ENDPOINT_TYPE_CONTROL 
3969
....................  
3969
....................  
3970
....................  
3970
....................  
3971
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
3971
.................... //*** ENABLE RX ENDPOINTS AND BUFFERS 
3972
....................  
3972
....................  
3973
.................... //--------- endpoint 0 defines ---------- 
3973
.................... //--------- endpoint 0 defines ---------- 
3974
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
3974
.................... #define USB_EP0_TX_ENABLE  USB_ENABLE_CONTROL 
3975
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
3975
.................... #define USB_EP0_RX_ENABLE  USB_ENABLE_CONTROL 
3976
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
3976
.................... #define USB_EP0_RX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
3977
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
3977
.................... #define USB_EP0_TX_SIZE    USB_MAX_EP0_PACKET_LENGTH  //endpoint 0 is setup, and should always be the MAX_PACKET_LENGTH.  Slow speed specifies 8 
3978
....................  
3978
....................  
3979
.................... //--------- endpoint 1 defines ---------- 
3979
.................... //--------- endpoint 1 defines ---------- 
3980
.................... #ifndef USB_EP1_TX_ENABLE 
3980
.................... #ifndef USB_EP1_TX_ENABLE 
3981
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
3981
....................  #define USB_EP1_TX_ENABLE USB_ENABLE_DISABLED 
3982
.................... #endif 
3982
.................... #endif 
3983
.................... #ifndef USB_EP1_RX_ENABLE 
3983
.................... #ifndef USB_EP1_RX_ENABLE 
3984
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
3984
....................  #define USB_EP1_RX_ENABLE USB_ENABLE_DISABLED 
3985
.................... #endif 
3985
.................... #endif 
3986
....................  
3986
....................  
3987
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
3987
.................... #if USB_EP1_RX_ENABLE==USB_ENABLE_DISABLED 
3988
....................  #ifdef USB_EP1_RX_SIZE 
3988
....................  #ifdef USB_EP1_RX_SIZE 
3989
....................   #undef USB_EP1_RX_SIZE 
3989
....................   #undef USB_EP1_RX_SIZE 
3990
....................  #endif 
3990
....................  #endif 
3991
....................  #define USB_EP1_RX_SIZE 0 
3991
....................  #define USB_EP1_RX_SIZE 0 
3992
.................... #else 
3992
.................... #else 
3993
....................  #ifndef USB_EP1_RX_SIZE 
3993
....................  #ifndef USB_EP1_RX_SIZE 
3994
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
3994
....................   #error You enabled EP1 for RX but didn't specify endpoint size 
3995
....................  #endif 
3995
....................  #endif 
3996
.................... #endif 
3996
.................... #endif 
3997
....................  
3997
....................  
3998
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
3998
.................... #if USB_EP1_TX_ENABLE==USB_ENABLE_DISABLED 
3999
....................  #ifdef USB_EP1_TX_SIZE 
3999
....................  #ifdef USB_EP1_TX_SIZE 
4000
....................   #undef USB_EP1_TX_SIZE 
4000
....................   #undef USB_EP1_TX_SIZE 
4001
....................  #endif 
4001
....................  #endif 
4002
....................  #define USB_EP1_TX_SIZE 0 
4002
....................  #define USB_EP1_TX_SIZE 0 
4003
.................... #else 
4003
.................... #else 
4004
....................  #ifndef USB_EP1_TX_SIZE 
4004
....................  #ifndef USB_EP1_TX_SIZE 
4005
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
4005
....................   #error You enabled EP1 for TX but didn't specify endpoint size 
4006
....................  #endif 
4006
....................  #endif 
4007
.................... #endif 
4007
.................... #endif 
4008
....................  
4008
....................  
4009
....................  
4009
....................  
4010
.................... //--------- endpoint 2 defines ---------- 
4010
.................... //--------- endpoint 2 defines ---------- 
4011
.................... #ifndef USB_EP2_TX_ENABLE 
4011
.................... #ifndef USB_EP2_TX_ENABLE 
4012
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
4012
....................  #define USB_EP2_TX_ENABLE USB_ENABLE_DISABLED 
4013
.................... #endif 
4013
.................... #endif 
4014
.................... #ifndef USB_EP2_RX_ENABLE 
4014
.................... #ifndef USB_EP2_RX_ENABLE 
4015
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
4015
....................  #define USB_EP2_RX_ENABLE USB_ENABLE_DISABLED 
4016
.................... #endif 
4016
.................... #endif 
4017
....................  
4017
....................  
4018
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
4018
.................... #if USB_EP2_RX_ENABLE==USB_ENABLE_DISABLED 
4019
....................  #ifdef USB_EP2_RX_SIZE 
4019
....................  #ifdef USB_EP2_RX_SIZE 
4020
....................   #undef USB_EP2_RX_SIZE 
4020
....................   #undef USB_EP2_RX_SIZE 
4021
....................  #endif 
4021
....................  #endif 
4022
....................  #define USB_EP2_RX_SIZE 0 
4022
....................  #define USB_EP2_RX_SIZE 0 
4023
.................... #else 
4023
.................... #else 
4024
....................  #ifndef USB_EP2_RX_SIZE 
4024
....................  #ifndef USB_EP2_RX_SIZE 
4025
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
4025
....................   #error You enabled EP2 for RX but didn't specify endpoint size 
4026
....................  #endif 
4026
....................  #endif 
4027
.................... #endif 
4027
.................... #endif 
4028
....................  
4028
....................  
4029
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
4029
.................... #if USB_EP2_TX_ENABLE==USB_ENABLE_DISABLED 
4030
....................  #ifdef USB_EP2_TX_SIZE 
4030
....................  #ifdef USB_EP2_TX_SIZE 
4031
....................   #undef USB_EP2_TX_SIZE 
4031
....................   #undef USB_EP2_TX_SIZE 
4032
....................  #endif 
4032
....................  #endif 
4033
....................  #define USB_EP2_TX_SIZE 0 
4033
....................  #define USB_EP2_TX_SIZE 0 
4034
.................... #else 
4034
.................... #else 
4035
....................  #ifndef USB_EP2_TX_SIZE 
4035
....................  #ifndef USB_EP2_TX_SIZE 
4036
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
4036
....................   #error You enabled EP2 for TX but didn't specify endpoint size 
4037
....................  #endif 
4037
....................  #endif 
4038
.................... #endif 
4038
.................... #endif 
4039
....................  
4039
....................  
4040
....................  
4040
....................  
4041
.................... //--------- endpoint 3 defines ---------- 
4041
.................... //--------- endpoint 3 defines ---------- 
4042
.................... #ifndef USB_EP3_TX_ENABLE 
4042
.................... #ifndef USB_EP3_TX_ENABLE 
4043
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
4043
....................  #define USB_EP3_TX_ENABLE USB_ENABLE_DISABLED 
4044
.................... #endif 
4044
.................... #endif 
4045
.................... #ifndef USB_EP3_RX_ENABLE 
4045
.................... #ifndef USB_EP3_RX_ENABLE 
4046
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
4046
....................  #define USB_EP3_RX_ENABLE USB_ENABLE_DISABLED 
4047
.................... #endif 
4047
.................... #endif 
4048
....................  
4048
....................  
4049
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
4049
.................... #if USB_EP3_RX_ENABLE==USB_ENABLE_DISABLED 
4050
....................  #ifdef USB_EP3_RX_SIZE 
4050
....................  #ifdef USB_EP3_RX_SIZE 
4051
....................   #undef USB_EP3_RX_SIZE 
4051
....................   #undef USB_EP3_RX_SIZE 
4052
....................  #endif 
4052
....................  #endif 
4053
....................  #define USB_EP3_RX_SIZE 0 
4053
....................  #define USB_EP3_RX_SIZE 0 
4054
.................... #else 
4054
.................... #else 
4055
....................  #ifndef USB_EP3_RX_SIZE 
4055
....................  #ifndef USB_EP3_RX_SIZE 
4056
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
4056
....................   #error You enabled EP3 for RX but didn't specify endpoint size 
4057
....................  #endif 
4057
....................  #endif 
4058
.................... #endif 
4058
.................... #endif 
4059
....................  
4059
....................  
4060
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
4060
.................... #if USB_EP3_TX_ENABLE==USB_ENABLE_DISABLED 
4061
....................  #ifdef USB_EP3_TX_SIZE 
4061
....................  #ifdef USB_EP3_TX_SIZE 
4062
....................   #undef USB_EP3_TX_SIZE 
4062
....................   #undef USB_EP3_TX_SIZE 
4063
....................  #endif 
4063
....................  #endif 
4064
....................  #define USB_EP3_TX_SIZE 0 
4064
....................  #define USB_EP3_TX_SIZE 0 
4065
.................... #else 
4065
.................... #else 
4066
....................  #ifndef USB_EP3_TX_SIZE 
4066
....................  #ifndef USB_EP3_TX_SIZE 
4067
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
4067
....................   #error You enabled EP3 for TX but didn't specify endpoint size 
4068
....................  #endif 
4068
....................  #endif 
4069
.................... #endif 
4069
.................... #endif 
4070
....................  
4070
....................  
4071
....................  
4071
....................  
4072
.................... //--------- endpoint 4 defines ---------- 
4072
.................... //--------- endpoint 4 defines ---------- 
4073
.................... #ifndef USB_EP4_TX_ENABLE 
4073
.................... #ifndef USB_EP4_TX_ENABLE 
4074
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
4074
....................  #define USB_EP4_TX_ENABLE USB_ENABLE_DISABLED 
4075
.................... #endif 
4075
.................... #endif 
4076
.................... #ifndef USB_EP4_RX_ENABLE 
4076
.................... #ifndef USB_EP4_RX_ENABLE 
4077
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
4077
....................  #define USB_EP4_RX_ENABLE USB_ENABLE_DISABLED 
4078
.................... #endif 
4078
.................... #endif 
4079
....................  
4079
....................  
4080
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
4080
.................... #if USB_EP4_RX_ENABLE==USB_ENABLE_DISABLED 
4081
....................  #ifdef USB_EP4_RX_SIZE 
4081
....................  #ifdef USB_EP4_RX_SIZE 
4082
....................   #undef USB_EP4_RX_SIZE 
4082
....................   #undef USB_EP4_RX_SIZE 
4083
....................  #endif 
4083
....................  #endif 
4084
....................  #define USB_EP4_RX_SIZE 0 
4084
....................  #define USB_EP4_RX_SIZE 0 
4085
.................... #else 
4085
.................... #else 
4086
....................  #ifndef USB_EP4_RX_SIZE 
4086
....................  #ifndef USB_EP4_RX_SIZE 
4087
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
4087
....................   #error You enabled EP4 for RX but didn't specify endpoint size 
4088
....................  #endif 
4088
....................  #endif 
4089
.................... #endif 
4089
.................... #endif 
4090
....................  
4090
....................  
4091
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
4091
.................... #if USB_EP4_TX_ENABLE==USB_ENABLE_DISABLED 
4092
....................  #ifdef USB_EP4_TX_SIZE 
4092
....................  #ifdef USB_EP4_TX_SIZE 
4093
....................   #undef USB_EP4_TX_SIZE 
4093
....................   #undef USB_EP4_TX_SIZE 
4094
....................  #endif 
4094
....................  #endif 
4095
....................  #define USB_EP4_TX_SIZE 0 
4095
....................  #define USB_EP4_TX_SIZE 0 
4096
.................... #else 
4096
.................... #else 
4097
....................  #ifndef USB_EP4_TX_SIZE 
4097
....................  #ifndef USB_EP4_TX_SIZE 
4098
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
4098
....................   #error You enabled EP4 for TX but didn't specify endpoint size 
4099
....................  #endif 
4099
....................  #endif 
4100
.................... #endif 
4100
.................... #endif 
4101
....................  
4101
....................  
4102
....................  
4102
....................  
4103
.................... //--------- endpoint 5 defines ---------- 
4103
.................... //--------- endpoint 5 defines ---------- 
4104
.................... #ifndef USB_EP5_TX_ENABLE 
4104
.................... #ifndef USB_EP5_TX_ENABLE 
4105
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
4105
....................  #define USB_EP5_TX_ENABLE USB_ENABLE_DISABLED 
4106
.................... #endif 
4106
.................... #endif 
4107
.................... #ifndef USB_EP5_RX_ENABLE 
4107
.................... #ifndef USB_EP5_RX_ENABLE 
4108
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
4108
....................  #define USB_EP5_RX_ENABLE USB_ENABLE_DISABLED 
4109
.................... #endif 
4109
.................... #endif 
4110
....................  
4110
....................  
4111
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
4111
.................... #if USB_EP5_RX_ENABLE==USB_ENABLE_DISABLED 
4112
....................  #ifdef USB_EP5_RX_SIZE 
4112
....................  #ifdef USB_EP5_RX_SIZE 
4113
....................   #undef USB_EP5_RX_SIZE 
4113
....................   #undef USB_EP5_RX_SIZE 
4114
....................  #endif 
4114
....................  #endif 
4115
....................  #define USB_EP5_RX_SIZE 0 
4115
....................  #define USB_EP5_RX_SIZE 0 
4116
.................... #else 
4116
.................... #else 
4117
....................  #ifndef USB_EP5_RX_SIZE 
4117
....................  #ifndef USB_EP5_RX_SIZE 
4118
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
4118
....................   #error You enabled EP5 for RX but didn't specify endpoint size 
4119
....................  #endif 
4119
....................  #endif 
4120
.................... #endif 
4120
.................... #endif 
4121
....................  
4121
....................  
4122
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
4122
.................... #if USB_EP5_TX_ENABLE==USB_ENABLE_DISABLED 
4123
....................  #ifdef USB_EP5_TX_SIZE 
4123
....................  #ifdef USB_EP5_TX_SIZE 
4124
....................   #undef USB_EP5_TX_SIZE 
4124
....................   #undef USB_EP5_TX_SIZE 
4125
....................  #endif 
4125
....................  #endif 
4126
....................  #define USB_EP5_TX_SIZE 0 
4126
....................  #define USB_EP5_TX_SIZE 0 
4127
.................... #else 
4127
.................... #else 
4128
....................  #ifndef USB_EP5_TX_SIZE 
4128
....................  #ifndef USB_EP5_TX_SIZE 
4129
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
4129
....................   #error You enabled EP5 for TX but didn't specify endpoint size 
4130
....................  #endif 
4130
....................  #endif 
4131
.................... #endif 
4131
.................... #endif 
4132
....................  
4132
....................  
4133
....................  
4133
....................  
4134
.................... //--------- endpoint 6 defines ---------- 
4134
.................... //--------- endpoint 6 defines ---------- 
4135
.................... #ifndef USB_EP6_TX_ENABLE 
4135
.................... #ifndef USB_EP6_TX_ENABLE 
4136
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
4136
....................  #define USB_EP6_TX_ENABLE USB_ENABLE_DISABLED 
4137
.................... #endif 
4137
.................... #endif 
4138
.................... #ifndef USB_EP6_RX_ENABLE 
4138
.................... #ifndef USB_EP6_RX_ENABLE 
4139
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
4139
....................  #define USB_EP6_RX_ENABLE USB_ENABLE_DISABLED 
4140
.................... #endif 
4140
.................... #endif 
4141
....................  
4141
....................  
4142
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
4142
.................... #if USB_EP6_RX_ENABLE==USB_ENABLE_DISABLED 
4143
....................  #ifdef USB_EP6_RX_SIZE 
4143
....................  #ifdef USB_EP6_RX_SIZE 
4144
....................   #undef USB_EP6_RX_SIZE 
4144
....................   #undef USB_EP6_RX_SIZE 
4145
....................  #endif 
4145
....................  #endif 
4146
....................  #define USB_EP6_RX_SIZE 0 
4146
....................  #define USB_EP6_RX_SIZE 0 
4147
.................... #else 
4147
.................... #else 
4148
....................  #ifndef USB_EP6_RX_SIZE 
4148
....................  #ifndef USB_EP6_RX_SIZE 
4149
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
4149
....................   #error You enabled EP6 for RX but didn't specify endpoint size 
4150
....................  #endif 
4150
....................  #endif 
4151
.................... #endif 
4151
.................... #endif 
4152
....................  
4152
....................  
4153
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
4153
.................... #if USB_EP6_TX_ENABLE==USB_ENABLE_DISABLED 
4154
....................  #ifdef USB_EP6_TX_SIZE 
4154
....................  #ifdef USB_EP6_TX_SIZE 
4155
....................   #undef USB_EP6_TX_SIZE 
4155
....................   #undef USB_EP6_TX_SIZE 
4156
....................  #endif 
4156
....................  #endif 
4157
....................  #define USB_EP6_TX_SIZE 0 
4157
....................  #define USB_EP6_TX_SIZE 0 
4158
.................... #else 
4158
.................... #else 
4159
....................  #ifndef USB_EP6_TX_SIZE 
4159
....................  #ifndef USB_EP6_TX_SIZE 
4160
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
4160
....................   #error You enabled EP6 for TX but didn't specify endpoint size 
4161
....................  #endif 
4161
....................  #endif 
4162
.................... #endif 
4162
.................... #endif 
4163
....................  
4163
....................  
4164
....................  
4164
....................  
4165
.................... //--------- endpoint 7 defines ---------- 
4165
.................... //--------- endpoint 7 defines ---------- 
4166
.................... #ifndef USB_EP7_TX_ENABLE 
4166
.................... #ifndef USB_EP7_TX_ENABLE 
4167
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
4167
....................  #define USB_EP7_TX_ENABLE USB_ENABLE_DISABLED 
4168
.................... #endif 
4168
.................... #endif 
4169
.................... #ifndef USB_EP7_RX_ENABLE 
4169
.................... #ifndef USB_EP7_RX_ENABLE 
4170
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
4170
....................  #define USB_EP7_RX_ENABLE USB_ENABLE_DISABLED 
4171
.................... #endif 
4171
.................... #endif 
4172
....................  
4172
....................  
4173
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
4173
.................... #if USB_EP7_RX_ENABLE==USB_ENABLE_DISABLED 
4174
....................  #ifdef USB_EP7_RX_SIZE 
4174
....................  #ifdef USB_EP7_RX_SIZE 
4175
....................   #undef USB_EP7_RX_SIZE 
4175
....................   #undef USB_EP7_RX_SIZE 
4176
....................  #endif 
4176
....................  #endif 
4177
....................  #define USB_EP7_RX_SIZE 0 
4177
....................  #define USB_EP7_RX_SIZE 0 
4178
.................... #else 
4178
.................... #else 
4179
....................  #ifndef USB_EP7_RX_SIZE 
4179
....................  #ifndef USB_EP7_RX_SIZE 
4180
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
4180
....................   #error You enabled EP7 for RX but didn't specify endpoint size 
4181
....................  #endif 
4181
....................  #endif 
4182
.................... #endif 
4182
.................... #endif 
4183
....................  
4183
....................  
4184
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
4184
.................... #if USB_EP7_TX_ENABLE==USB_ENABLE_DISABLED 
4185
....................  #ifdef USB_EP7_TX_SIZE 
4185
....................  #ifdef USB_EP7_TX_SIZE 
4186
....................   #undef USB_EP7_TX_SIZE 
4186
....................   #undef USB_EP7_TX_SIZE 
4187
....................  #endif 
4187
....................  #endif 
4188
....................  #define USB_EP7_TX_SIZE 0 
4188
....................  #define USB_EP7_TX_SIZE 0 
4189
.................... #else 
4189
.................... #else 
4190
....................  #ifndef USB_EP7_TX_SIZE 
4190
....................  #ifndef USB_EP7_TX_SIZE 
4191
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
4191
....................   #error You enabled EP7 for TX but didn't specify endpoint size 
4192
....................  #endif 
4192
....................  #endif 
4193
.................... #endif 
4193
.................... #endif 
4194
....................  
4194
....................  
4195
....................  
4195
....................  
4196
.................... //--------- endpoint 8 defines ---------- 
4196
.................... //--------- endpoint 8 defines ---------- 
4197
.................... #ifndef USB_EP8_TX_ENABLE 
4197
.................... #ifndef USB_EP8_TX_ENABLE 
4198
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
4198
....................  #define USB_EP8_TX_ENABLE USB_ENABLE_DISABLED 
4199
.................... #endif 
4199
.................... #endif 
4200
.................... #ifndef USB_EP8_RX_ENABLE 
4200
.................... #ifndef USB_EP8_RX_ENABLE 
4201
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
4201
....................  #define USB_EP8_RX_ENABLE USB_ENABLE_DISABLED 
4202
.................... #endif 
4202
.................... #endif 
4203
....................  
4203
....................  
4204
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
4204
.................... #if USB_EP8_RX_ENABLE==USB_ENABLE_DISABLED 
4205
....................  #ifdef USB_EP8_RX_SIZE 
4205
....................  #ifdef USB_EP8_RX_SIZE 
4206
....................   #undef USB_EP8_RX_SIZE 
4206
....................   #undef USB_EP8_RX_SIZE 
4207
....................  #endif 
4207
....................  #endif 
4208
....................  #define USB_EP8_RX_SIZE 0 
4208
....................  #define USB_EP8_RX_SIZE 0 
4209
.................... #else 
4209
.................... #else 
4210
....................  #ifndef USB_EP8_RX_SIZE 
4210
....................  #ifndef USB_EP8_RX_SIZE 
4211
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
4211
....................   #error You enabled EP8 for RX but didn't specify endpoint size 
4212
....................  #endif 
4212
....................  #endif 
4213
.................... #endif 
4213
.................... #endif 
4214
....................  
4214
....................  
4215
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
4215
.................... #if USB_EP8_TX_ENABLE==USB_ENABLE_DISABLED 
4216
....................  #ifdef USB_EP8_TX_SIZE 
4216
....................  #ifdef USB_EP8_TX_SIZE 
4217
....................   #undef USB_EP8_TX_SIZE 
4217
....................   #undef USB_EP8_TX_SIZE 
4218
....................  #endif 
4218
....................  #endif 
4219
....................  #define USB_EP8_TX_SIZE 0 
4219
....................  #define USB_EP8_TX_SIZE 0 
4220
.................... #else 
4220
.................... #else 
4221
....................  #ifndef USB_EP8_TX_SIZE 
4221
....................  #ifndef USB_EP8_TX_SIZE 
4222
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
4222
....................   #error You enabled EP8 for TX but didn't specify endpoint size 
4223
....................  #endif 
4223
....................  #endif 
4224
.................... #endif 
4224
.................... #endif 
4225
....................  
4225
....................  
4226
....................  
4226
....................  
4227
.................... //--------- endpoint 9 defines ---------- 
4227
.................... //--------- endpoint 9 defines ---------- 
4228
.................... #ifndef USB_EP9_TX_ENABLE 
4228
.................... #ifndef USB_EP9_TX_ENABLE 
4229
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
4229
....................  #define USB_EP9_TX_ENABLE USB_ENABLE_DISABLED 
4230
.................... #endif 
4230
.................... #endif 
4231
.................... #ifndef USB_EP9_RX_ENABLE 
4231
.................... #ifndef USB_EP9_RX_ENABLE 
4232
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
4232
....................  #define USB_EP9_RX_ENABLE USB_ENABLE_DISABLED 
4233
.................... #endif 
4233
.................... #endif 
4234
....................  
4234
....................  
4235
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
4235
.................... #if USB_EP9_RX_ENABLE==USB_ENABLE_DISABLED 
4236
....................  #ifdef USB_EP9_RX_SIZE 
4236
....................  #ifdef USB_EP9_RX_SIZE 
4237
....................   #undef USB_EP9_RX_SIZE 
4237
....................   #undef USB_EP9_RX_SIZE 
4238
....................  #endif 
4238
....................  #endif 
4239
....................  #define USB_EP9_RX_SIZE 0 
4239
....................  #define USB_EP9_RX_SIZE 0 
4240
.................... #else 
4240
.................... #else 
4241
....................  #ifndef USB_EP9_RX_SIZE 
4241
....................  #ifndef USB_EP9_RX_SIZE 
4242
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
4242
....................   #error You enabled EP9 for RX but didn't specify endpoint size 
4243
....................  #endif 
4243
....................  #endif 
4244
.................... #endif 
4244
.................... #endif 
4245
....................  
4245
....................  
4246
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
4246
.................... #if USB_EP9_TX_ENABLE==USB_ENABLE_DISABLED 
4247
....................  #ifdef USB_EP9_TX_SIZE 
4247
....................  #ifdef USB_EP9_TX_SIZE 
4248
....................   #undef USB_EP9_TX_SIZE 
4248
....................   #undef USB_EP9_TX_SIZE 
4249
....................  #endif 
4249
....................  #endif 
4250
....................  #define USB_EP9_TX_SIZE 0 
4250
....................  #define USB_EP9_TX_SIZE 0 
4251
.................... #else 
4251
.................... #else 
4252
....................  #ifndef USB_EP9_TX_SIZE 
4252
....................  #ifndef USB_EP9_TX_SIZE 
4253
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
4253
....................   #error You enabled EP9 for TX but didn't specify endpoint size 
4254
....................  #endif 
4254
....................  #endif 
4255
.................... #endif 
4255
.................... #endif 
4256
....................  
4256
....................  
4257
....................  
4257
....................  
4258
.................... //--------- endpoint 10 defines ---------- 
4258
.................... //--------- endpoint 10 defines ---------- 
4259
.................... #ifndef USB_EP10_TX_ENABLE 
4259
.................... #ifndef USB_EP10_TX_ENABLE 
4260
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
4260
....................  #define USB_EP10_TX_ENABLE USB_ENABLE_DISABLED 
4261
.................... #endif 
4261
.................... #endif 
4262
.................... #ifndef USB_EP10_RX_ENABLE 
4262
.................... #ifndef USB_EP10_RX_ENABLE 
4263
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
4263
....................  #define USB_EP10_RX_ENABLE USB_ENABLE_DISABLED 
4264
.................... #endif 
4264
.................... #endif 
4265
....................  
4265
....................  
4266
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
4266
.................... #if USB_EP10_RX_ENABLE==USB_ENABLE_DISABLED 
4267
....................  #ifdef USB_EP10_RX_SIZE 
4267
....................  #ifdef USB_EP10_RX_SIZE 
4268
....................   #undef USB_EP10_RX_SIZE 
4268
....................   #undef USB_EP10_RX_SIZE 
4269
....................  #endif 
4269
....................  #endif 
4270
....................  #define USB_EP10_RX_SIZE 0 
4270
....................  #define USB_EP10_RX_SIZE 0 
4271
.................... #else 
4271
.................... #else 
4272
....................  #ifndef USB_EP10_RX_SIZE 
4272
....................  #ifndef USB_EP10_RX_SIZE 
4273
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
4273
....................   #error You enabled EP10 for RX but didn't specify endpoint size 
4274
....................  #endif 
4274
....................  #endif 
4275
.................... #endif 
4275
.................... #endif 
4276
....................  
4276
....................  
4277
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
4277
.................... #if USB_EP10_TX_ENABLE==USB_ENABLE_DISABLED 
4278
....................  #ifdef USB_EP10_TX_SIZE 
4278
....................  #ifdef USB_EP10_TX_SIZE 
4279
....................   #undef USB_EP10_TX_SIZE 
4279
....................   #undef USB_EP10_TX_SIZE 
4280
....................  #endif 
4280
....................  #endif 
4281
....................  #define USB_EP10_TX_SIZE 0 
4281
....................  #define USB_EP10_TX_SIZE 0 
4282
.................... #else 
4282
.................... #else 
4283
....................  #ifndef USB_EP10_TX_SIZE 
4283
....................  #ifndef USB_EP10_TX_SIZE 
4284
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
4284
....................   #error You enabled EP10 for TX but didn't specify endpoint size 
4285
....................  #endif 
4285
....................  #endif 
4286
.................... #endif 
4286
.................... #endif 
4287
....................  
4287
....................  
4288
....................  
4288
....................  
4289
.................... //--------- endpoint 11 defines ---------- 
4289
.................... //--------- endpoint 11 defines ---------- 
4290
.................... #ifndef USB_EP11_TX_ENABLE 
4290
.................... #ifndef USB_EP11_TX_ENABLE 
4291
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
4291
....................  #define USB_EP11_TX_ENABLE USB_ENABLE_DISABLED 
4292
.................... #endif 
4292
.................... #endif 
4293
.................... #ifndef USB_EP11_RX_ENABLE 
4293
.................... #ifndef USB_EP11_RX_ENABLE 
4294
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
4294
....................  #define USB_EP11_RX_ENABLE USB_ENABLE_DISABLED 
4295
.................... #endif 
4295
.................... #endif 
4296
....................  
4296
....................  
4297
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
4297
.................... #if USB_EP11_RX_ENABLE==USB_ENABLE_DISABLED 
4298
....................  #ifdef USB_EP11_RX_SIZE 
4298
....................  #ifdef USB_EP11_RX_SIZE 
4299
....................   #undef USB_EP11_RX_SIZE 
4299
....................   #undef USB_EP11_RX_SIZE 
4300
....................  #endif 
4300
....................  #endif 
4301
....................  #define USB_EP11_RX_SIZE 0 
4301
....................  #define USB_EP11_RX_SIZE 0 
4302
.................... #else 
4302
.................... #else 
4303
....................  #ifndef USB_EP11_RX_SIZE 
4303
....................  #ifndef USB_EP11_RX_SIZE 
4304
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
4304
....................   #error You enabled EP11 for RX but didn't specify endpoint size 
4305
....................  #endif 
4305
....................  #endif 
4306
.................... #endif 
4306
.................... #endif 
4307
....................  
4307
....................  
4308
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
4308
.................... #if USB_EP11_TX_ENABLE==USB_ENABLE_DISABLED 
4309
....................  #ifdef USB_EP11_TX_SIZE 
4309
....................  #ifdef USB_EP11_TX_SIZE 
4310
....................   #undef USB_EP11_TX_SIZE 
4310
....................   #undef USB_EP11_TX_SIZE 
4311
....................  #endif 
4311
....................  #endif 
4312
....................  #define USB_EP11_TX_SIZE 0 
4312
....................  #define USB_EP11_TX_SIZE 0 
4313
.................... #else 
4313
.................... #else 
4314
....................  #ifndef USB_EP11_TX_SIZE 
4314
....................  #ifndef USB_EP11_TX_SIZE 
4315
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
4315
....................   #error You enabled EP11 for TX but didn't specify endpoint size 
4316
....................  #endif 
4316
....................  #endif 
4317
.................... #endif 
4317
.................... #endif 
4318
....................  
4318
....................  
4319
....................  
4319
....................  
4320
.................... //--------- endpoint 12 defines ---------- 
4320
.................... //--------- endpoint 12 defines ---------- 
4321
.................... #ifndef USB_EP12_TX_ENABLE 
4321
.................... #ifndef USB_EP12_TX_ENABLE 
4322
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
4322
....................  #define USB_EP12_TX_ENABLE USB_ENABLE_DISABLED 
4323
.................... #endif 
4323
.................... #endif 
4324
.................... #ifndef USB_EP12_RX_ENABLE 
4324
.................... #ifndef USB_EP12_RX_ENABLE 
4325
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
4325
....................  #define USB_EP12_RX_ENABLE USB_ENABLE_DISABLED 
4326
.................... #endif 
4326
.................... #endif 
4327
....................  
4327
....................  
4328
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
4328
.................... #if USB_EP12_RX_ENABLE==USB_ENABLE_DISABLED 
4329
....................  #ifdef USB_EP12_RX_SIZE 
4329
....................  #ifdef USB_EP12_RX_SIZE 
4330
....................   #undef USB_EP12_RX_SIZE 
4330
....................   #undef USB_EP12_RX_SIZE 
4331
....................  #endif 
4331
....................  #endif 
4332
....................  #define USB_EP12_RX_SIZE 0 
4332
....................  #define USB_EP12_RX_SIZE 0 
4333
.................... #else 
4333
.................... #else 
4334
....................  #ifndef USB_EP12_RX_SIZE 
4334
....................  #ifndef USB_EP12_RX_SIZE 
4335
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
4335
....................   #error You enabled EP12 for RX but didn't specify endpoint size 
4336
....................  #endif 
4336
....................  #endif 
4337
.................... #endif 
4337
.................... #endif 
4338
....................  
4338
....................  
4339
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
4339
.................... #if USB_EP12_TX_ENABLE==USB_ENABLE_DISABLED 
4340
....................  #ifdef USB_EP12_TX_SIZE 
4340
....................  #ifdef USB_EP12_TX_SIZE 
4341
....................   #undef USB_EP12_TX_SIZE 
4341
....................   #undef USB_EP12_TX_SIZE 
4342
....................  #endif 
4342
....................  #endif 
4343
....................  #define USB_EP12_TX_SIZE 0 
4343
....................  #define USB_EP12_TX_SIZE 0 
4344
.................... #else 
4344
.................... #else 
4345
....................  #ifndef USB_EP12_TX_SIZE 
4345
....................  #ifndef USB_EP12_TX_SIZE 
4346
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
4346
....................   #error You enabled EP12 for TX but didn't specify endpoint size 
4347
....................  #endif 
4347
....................  #endif 
4348
.................... #endif 
4348
.................... #endif 
4349
....................  
4349
....................  
4350
....................  
4350
....................  
4351
.................... //--------- endpoint 13 defines ---------- 
4351
.................... //--------- endpoint 13 defines ---------- 
4352
.................... #ifndef USB_EP13_TX_ENABLE 
4352
.................... #ifndef USB_EP13_TX_ENABLE 
4353
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
4353
....................  #define USB_EP13_TX_ENABLE USB_ENABLE_DISABLED 
4354
.................... #endif 
4354
.................... #endif 
4355
.................... #ifndef USB_EP13_RX_ENABLE 
4355
.................... #ifndef USB_EP13_RX_ENABLE 
4356
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
4356
....................  #define USB_EP13_RX_ENABLE USB_ENABLE_DISABLED 
4357
.................... #endif 
4357
.................... #endif 
4358
....................  
4358
....................  
4359
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
4359
.................... #if USB_EP13_RX_ENABLE==USB_ENABLE_DISABLED 
4360
....................  #ifdef USB_EP13_RX_SIZE 
4360
....................  #ifdef USB_EP13_RX_SIZE 
4361
....................   #undef USB_EP13_RX_SIZE 
4361
....................   #undef USB_EP13_RX_SIZE 
4362
....................  #endif 
4362
....................  #endif 
4363
....................  #define USB_EP13_RX_SIZE 0 
4363
....................  #define USB_EP13_RX_SIZE 0 
4364
.................... #else 
4364
.................... #else 
4365
....................  #ifndef USB_EP13_RX_SIZE 
4365
....................  #ifndef USB_EP13_RX_SIZE 
4366
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
4366
....................   #error You enabled EP13 for RX but didn't specify endpoint size 
4367
....................  #endif 
4367
....................  #endif 
4368
.................... #endif 
4368
.................... #endif 
4369
....................  
4369
....................  
4370
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
4370
.................... #if USB_EP13_TX_ENABLE==USB_ENABLE_DISABLED 
4371
....................  #ifdef USB_EP13_TX_SIZE 
4371
....................  #ifdef USB_EP13_TX_SIZE 
4372
....................   #undef USB_EP13_TX_SIZE 
4372
....................   #undef USB_EP13_TX_SIZE 
4373
....................  #endif 
4373
....................  #endif 
4374
....................  #define USB_EP13_TX_SIZE 0 
4374
....................  #define USB_EP13_TX_SIZE 0 
4375
.................... #else 
4375
.................... #else 
4376
....................  #ifndef USB_EP13_TX_SIZE 
4376
....................  #ifndef USB_EP13_TX_SIZE 
4377
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
4377
....................   #error You enabled EP13 for TX but didn't specify endpoint size 
4378
....................  #endif 
4378
....................  #endif 
4379
.................... #endif 
4379
.................... #endif 
4380
....................  
4380
....................  
4381
....................  
4381
....................  
4382
.................... //--------- endpoint 14 defines ---------- 
4382
.................... //--------- endpoint 14 defines ---------- 
4383
.................... #ifndef USB_EP14_TX_ENABLE 
4383
.................... #ifndef USB_EP14_TX_ENABLE 
4384
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
4384
....................  #define USB_EP14_TX_ENABLE USB_ENABLE_DISABLED 
4385
.................... #endif 
4385
.................... #endif 
4386
.................... #ifndef USB_EP14_RX_ENABLE 
4386
.................... #ifndef USB_EP14_RX_ENABLE 
4387
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
4387
....................  #define USB_EP14_RX_ENABLE USB_ENABLE_DISABLED 
4388
.................... #endif 
4388
.................... #endif 
4389
....................  
4389
....................  
4390
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
4390
.................... #if USB_EP14_RX_ENABLE==USB_ENABLE_DISABLED 
4391
....................  #ifdef USB_EP14_RX_SIZE 
4391
....................  #ifdef USB_EP14_RX_SIZE 
4392
....................   #undef USB_EP14_RX_SIZE 
4392
....................   #undef USB_EP14_RX_SIZE 
4393
....................  #endif 
4393
....................  #endif 
4394
....................  #define USB_EP14_RX_SIZE 0 
4394
....................  #define USB_EP14_RX_SIZE 0 
4395
.................... #else 
4395
.................... #else 
4396
....................  #ifndef USB_EP14_RX_SIZE 
4396
....................  #ifndef USB_EP14_RX_SIZE 
4397
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
4397
....................   #error You enabled EP14 for RX but didn't specify endpoint size 
4398
....................  #endif 
4398
....................  #endif 
4399
.................... #endif 
4399
.................... #endif 
4400
....................  
4400
....................  
4401
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
4401
.................... #if USB_EP14_TX_ENABLE==USB_ENABLE_DISABLED 
4402
....................  #ifdef USB_EP14_TX_SIZE 
4402
....................  #ifdef USB_EP14_TX_SIZE 
4403
....................   #undef USB_EP14_TX_SIZE 
4403
....................   #undef USB_EP14_TX_SIZE 
4404
....................  #endif 
4404
....................  #endif 
4405
....................  #define USB_EP14_TX_SIZE 0 
4405
....................  #define USB_EP14_TX_SIZE 0 
4406
.................... #else 
4406
.................... #else 
4407
....................  #ifndef USB_EP14_TX_SIZE 
4407
....................  #ifndef USB_EP14_TX_SIZE 
4408
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
4408
....................   #error You enabled EP14 for TX but didn't specify endpoint size 
4409
....................  #endif 
4409
....................  #endif 
4410
.................... #endif 
4410
.................... #endif 
4411
....................  
4411
....................  
4412
....................  
4412
....................  
4413
.................... //--------- endpoint 15 defines ---------- 
4413
.................... //--------- endpoint 15 defines ---------- 
4414
.................... #ifndef USB_EP15_TX_ENABLE 
4414
.................... #ifndef USB_EP15_TX_ENABLE 
4415
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
4415
....................  #define USB_EP15_TX_ENABLE USB_ENABLE_DISABLED 
4416
.................... #endif 
4416
.................... #endif 
4417
.................... #ifndef USB_EP15_RX_ENABLE 
4417
.................... #ifndef USB_EP15_RX_ENABLE 
4418
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
4418
....................  #define USB_EP15_RX_ENABLE USB_ENABLE_DISABLED 
4419
.................... #endif 
4419
.................... #endif 
4420
....................  
4420
....................  
4421
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
4421
.................... #if USB_EP15_RX_ENABLE==USB_ENABLE_DISABLED 
4422
....................  #ifdef USB_EP15_RX_SIZE 
4422
....................  #ifdef USB_EP15_RX_SIZE 
4423
....................   #undef USB_EP15_RX_SIZE 
4423
....................   #undef USB_EP15_RX_SIZE 
4424
....................  #endif 
4424
....................  #endif 
4425
....................  #define USB_EP15_RX_SIZE 0 
4425
....................  #define USB_EP15_RX_SIZE 0 
4426
.................... #else 
4426
.................... #else 
4427
....................  #ifndef USB_EP15_RX_SIZE 
4427
....................  #ifndef USB_EP15_RX_SIZE 
4428
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
4428
....................   #error You enabled EP15 for RX but didn't specify endpoint size 
4429
....................  #endif 
4429
....................  #endif 
4430
.................... #endif 
4430
.................... #endif 
4431
....................  
4431
....................  
4432
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
4432
.................... #if USB_EP15_TX_ENABLE==USB_ENABLE_DISABLED 
4433
....................  #ifdef USB_EP15_TX_SIZE 
4433
....................  #ifdef USB_EP15_TX_SIZE 
4434
....................   #undef USB_EP15_TX_SIZE 
4434
....................   #undef USB_EP15_TX_SIZE 
4435
....................  #endif 
4435
....................  #endif 
4436
....................  #define USB_EP15_TX_SIZE 0 
4436
....................  #define USB_EP15_TX_SIZE 0 
4437
.................... #else 
4437
.................... #else 
4438
....................  #ifndef USB_EP15_TX_SIZE 
4438
....................  #ifndef USB_EP15_TX_SIZE 
4439
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
4439
....................   #error You enabled EP15 for TX but didn't specify endpoint size 
4440
....................  #endif 
4440
....................  #endif 
4441
.................... #endif 
4441
.................... #endif 
4442
....................  
4442
....................  
4443
.................... const int8 usb_ep_tx_type[16]={ 
4443
.................... const int8 usb_ep_tx_type[16]={ 
4444
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
4444
....................   USB_EP0_TX_ENABLE, USB_EP1_TX_ENABLE, USB_EP2_TX_ENABLE, 
4445
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
4445
....................   USB_EP3_TX_ENABLE, USB_EP4_TX_ENABLE, USB_EP5_TX_ENABLE, 
4446
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
4446
....................   USB_EP6_TX_ENABLE, USB_EP7_TX_ENABLE, USB_EP8_TX_ENABLE, 
4447
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
4447
....................   USB_EP9_TX_ENABLE, USB_EP10_TX_ENABLE, USB_EP11_TX_ENABLE, 
4448
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
4448
....................   USB_EP12_TX_ENABLE, USB_EP13_TX_ENABLE, USB_EP14_TX_ENABLE, 
4449
....................   USB_EP15_TX_ENABLE 
4449
....................   USB_EP15_TX_ENABLE 
4450
.................... }; 
4450
.................... }; 
4451
....................  
4451
....................  
4452
.................... const int8 usb_ep_rx_type[16]={ 
4452
.................... const int8 usb_ep_rx_type[16]={ 
4453
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
4453
....................   USB_EP0_RX_ENABLE, USB_EP1_RX_ENABLE, USB_EP2_RX_ENABLE, 
4454
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
4454
....................   USB_EP3_RX_ENABLE, USB_EP4_RX_ENABLE, USB_EP5_RX_ENABLE, 
4455
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
4455
....................   USB_EP6_RX_ENABLE, USB_EP7_RX_ENABLE, USB_EP8_RX_ENABLE, 
4456
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
4456
....................   USB_EP9_RX_ENABLE, USB_EP10_RX_ENABLE, USB_EP11_RX_ENABLE, 
4457
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
4457
....................   USB_EP12_RX_ENABLE, USB_EP13_RX_ENABLE, USB_EP14_RX_ENABLE, 
4458
....................   USB_EP15_RX_ENABLE 
4458
....................   USB_EP15_RX_ENABLE 
4459
.................... }; 
4459
.................... }; 
4460
....................  
4460
....................  
4461
.................... const unsigned int16 usb_ep_tx_size[16]={ 
4461
.................... const unsigned int16 usb_ep_tx_size[16]={ 
4462
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
4462
....................   USB_EP0_TX_SIZE, USB_EP1_TX_SIZE, USB_EP2_TX_SIZE, 
4463
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
4463
....................   USB_EP3_TX_SIZE, USB_EP4_TX_SIZE, USB_EP5_TX_SIZE, 
4464
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
4464
....................   USB_EP6_TX_SIZE, USB_EP7_TX_SIZE, USB_EP8_TX_SIZE, 
4465
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
4465
....................   USB_EP9_TX_SIZE, USB_EP10_TX_SIZE, USB_EP11_TX_SIZE, 
4466
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
4466
....................   USB_EP12_TX_SIZE, USB_EP13_TX_SIZE, USB_EP14_TX_SIZE, 
4467
....................   USB_EP15_TX_SIZE 
4467
....................   USB_EP15_TX_SIZE 
4468
.................... }; 
4468
.................... }; 
4469
....................  
4469
....................  
4470
.................... const unsigned int16 usb_ep_rx_size[16]={ 
4470
.................... const unsigned int16 usb_ep_rx_size[16]={ 
4471
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
4471
....................   USB_EP0_RX_SIZE, USB_EP1_RX_SIZE, USB_EP2_RX_SIZE, 
4472
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
4472
....................   USB_EP3_RX_SIZE, USB_EP4_RX_SIZE, USB_EP5_RX_SIZE, 
4473
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
4473
....................   USB_EP6_RX_SIZE, USB_EP7_RX_SIZE, USB_EP8_RX_SIZE, 
4474
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
4474
....................   USB_EP9_RX_SIZE, USB_EP10_RX_SIZE, USB_EP11_RX_SIZE, 
4475
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
4475
....................   USB_EP12_RX_SIZE, USB_EP13_RX_SIZE, USB_EP14_RX_SIZE, 
4476
....................   USB_EP15_RX_SIZE 
4476
....................   USB_EP15_RX_SIZE 
4477
.................... }; 
4477
.................... }; 
4478
....................  
4478
....................  
4479
.................... #ENDIF 
4479
.................... #ENDIF 
4480
....................  
4480
....................  
4481
....................  
4481
....................  
4482
.................... //if you are worried that the PIC is not receiving packets because a bug in the 
4482
.................... //if you are worried that the PIC is not receiving packets because a bug in the 
4483
.................... //DATA0/DATA1 synch code, you can set this to TRUE to ignore the DTS on 
4483
.................... //DATA0/DATA1 synch code, you can set this to TRUE to ignore the DTS on 
4484
.................... //receiving. 
4484
.................... //receiving. 
4485
.................... #ifndef USB_IGNORE_RX_DTS 
4485
.................... #ifndef USB_IGNORE_RX_DTS 
4486
....................  #define USB_IGNORE_RX_DTS FALSE 
4486
....................  #define USB_IGNORE_RX_DTS FALSE 
4487
.................... #endif 
4487
.................... #endif 
4488
....................  
4488
....................  
4489
.................... #ifndef USB_IGNORE_TX_DTS 
4489
.................... #ifndef USB_IGNORE_TX_DTS 
4490
....................  #define USB_IGNORE_TX_DTS FALSE 
4490
....................  #define USB_IGNORE_TX_DTS FALSE 
4491
.................... #endif 
4491
.................... #endif 
4492
....................  
4492
....................  
4493
.................... #if ((getenv("DEVICE")=="PIC18F87J50") || (getenv("DEVICE")=="PIC18F86J55") || \ 
4493
.................... #if ((getenv("DEVICE")=="PIC18F87J50") || (getenv("DEVICE")=="PIC18F86J55") || \ 
4494
....................      (getenv("DEVICE")=="PIC18F86J50") || (getenv("DEVICE")=="PIC18F85J50") || \ 
4494
....................      (getenv("DEVICE")=="PIC18F86J50") || (getenv("DEVICE")=="PIC18F85J50") || \ 
4495
....................      (getenv("DEVICE")=="PIC18F67J50") || (getenv("DEVICE")=="PIC18F66J55") || \ 
4495
....................      (getenv("DEVICE")=="PIC18F67J50") || (getenv("DEVICE")=="PIC18F66J55") || \ 
4496
....................      (getenv("DEVICE")=="PIC18F66J50") || (getenv("DEVICE")=="PIC18F65J50")) 
4496
....................      (getenv("DEVICE")=="PIC18F66J50") || (getenv("DEVICE")=="PIC18F65J50")) 
4497
....................  #define __USB_87J50__ 
4497
....................  #define __USB_87J50__ 
4498
....................  #define USB_TOTAL_RAM_SPACE  ((int16)getenv("RAM")-0x400) 
4498
....................  #define USB_TOTAL_RAM_SPACE  ((int16)getenv("RAM")-0x400) 
4499
....................  #define USB_RAM_START  0x400 
4499
....................  #define USB_RAM_START  0x400 
4500
....................  #define USB_LAST_ALLOWED_ENDPOINT  16 
4500
....................  #define USB_LAST_ALLOWED_ENDPOINT  16 
4501
.................... #elif ((getenv("DEVICE")=="PIC18F2450") || (getenv("DEVICE")=="PIC18F4450")) 
4501
.................... #elif ((getenv("DEVICE")=="PIC18F2450") || (getenv("DEVICE")=="PIC18F4450")) 
4502
....................  #define __USB_4450__ 
4502
....................  #define __USB_4450__ 
4503
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x100) 
4503
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x100) 
4504
....................  #define USB_RAM_START  0x400 
4504
....................  #define USB_RAM_START  0x400 
4505
....................  #define USB_LAST_ALLOWED_ENDPOINT  3 
4505
....................  #define USB_LAST_ALLOWED_ENDPOINT  3 
4506
.................... #elif ((getenv("DEVICE")=="PIC18F13K50") || (getenv("DEVICE")=="PIC18F14K50")) 
4506
.................... #elif ((getenv("DEVICE")=="PIC18F13K50") || (getenv("DEVICE")=="PIC18F14K50")) 
4507
....................  #define __USB_K50__ 
4507
....................  #define __USB_K50__ 
4508
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x200) 
4508
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x200) 
4509
....................  #define USB_RAM_START  0x200 
4509
....................  #define USB_RAM_START  0x200 
4510
....................  #define USB_LAST_ALLOWED_ENDPOINT  8 
4510
....................  #define USB_LAST_ALLOWED_ENDPOINT  8 
4511
.................... #elif ((getenv("DEVICE")=="PIC18F2455") || (getenv("DEVICE")=="PIC18F2550") || \ 
4511
.................... #elif ((getenv("DEVICE")=="PIC18F2455") || (getenv("DEVICE")=="PIC18F2550") || \ 
4512
....................        (getenv("DEVICE")=="PIC18F4455") || (getenv("DEVICE")=="PIC18F4550") || \ 
4512
....................        (getenv("DEVICE")=="PIC18F4455") || (getenv("DEVICE")=="PIC18F4550") || \ 
4513
....................        (getenv("DEVICE")=="PIC18F2458") || (getenv("DEVICE")=="PIC18F2553") || \ 
4513
....................        (getenv("DEVICE")=="PIC18F2458") || (getenv("DEVICE")=="PIC18F2553") || \ 
4514
....................        (getenv("DEVICE")=="PIC18F4458") || (getenv("DEVICE")=="PIC18F4553") \ 
4514
....................        (getenv("DEVICE")=="PIC18F4458") || (getenv("DEVICE")=="PIC18F4553") \ 
4515
....................        ) 
4515
....................        ) 
4516
....................  #define __USB_4550__ 
4516
....................  #define __USB_4550__ 
4517
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x400) 
4517
....................  #define USB_TOTAL_RAM_SPACE  ((int16)0x400) 
4518
....................  #define USB_RAM_START  0x400 
4518
....................  #define USB_RAM_START  0x400 
4519
....................  #define USB_LAST_ALLOWED_ENDPOINT  16 
4519
....................  #define USB_LAST_ALLOWED_ENDPOINT  16 
4520
.................... #else 
4520
.................... #else 
4521
....................  #error Unknown PIC device, USB not supported in this library. 
4521
....................  #error Unknown PIC device, USB not supported in this library. 
4522
.................... #endif 
4522
.................... #endif 
4523
....................  
4523
....................  
4524
.................... #if USB_EP15_TX_SIZE || USB_EP15_RX_SIZE 
4524
.................... #if USB_EP15_TX_SIZE || USB_EP15_RX_SIZE 
4525
....................  #define USB_LAST_DEFINED_ENDPOINT  15 
4525
....................  #define USB_LAST_DEFINED_ENDPOINT  15 
4526
.................... #elif USB_EP14_TX_SIZE || USB_EP14_RX_SIZE 
4526
.................... #elif USB_EP14_TX_SIZE || USB_EP14_RX_SIZE 
4527
....................  #define USB_LAST_DEFINED_ENDPOINT  14 
4527
....................  #define USB_LAST_DEFINED_ENDPOINT  14 
4528
.................... #elif USB_EP13_TX_SIZE || USB_EP13_RX_SIZE 
4528
.................... #elif USB_EP13_TX_SIZE || USB_EP13_RX_SIZE 
4529
....................  #define USB_LAST_DEFINED_ENDPOINT  13 
4529
....................  #define USB_LAST_DEFINED_ENDPOINT  13 
4530
.................... #elif USB_EP12_TX_SIZE || USB_EP12_RX_SIZE 
4530
.................... #elif USB_EP12_TX_SIZE || USB_EP12_RX_SIZE 
4531
....................  #define USB_LAST_DEFINED_ENDPOINT  12 
4531
....................  #define USB_LAST_DEFINED_ENDPOINT  12 
4532
.................... #elif USB_EP11_TX_SIZE || USB_EP11_RX_SIZE 
4532
.................... #elif USB_EP11_TX_SIZE || USB_EP11_RX_SIZE 
4533
....................  #define USB_LAST_DEFINED_ENDPOINT  11 
4533
....................  #define USB_LAST_DEFINED_ENDPOINT  11 
4534
.................... #elif USB_EP10_TX_SIZE || USB_EP10_RX_SIZE 
4534
.................... #elif USB_EP10_TX_SIZE || USB_EP10_RX_SIZE 
4535
....................  #define USB_LAST_DEFINED_ENDPOINT  10 
4535
....................  #define USB_LAST_DEFINED_ENDPOINT  10 
4536
.................... #elif USB_EP9_TX_SIZE || USB_EP9_RX_SIZE 
4536
.................... #elif USB_EP9_TX_SIZE || USB_EP9_RX_SIZE 
4537
....................  #define USB_LAST_DEFINED_ENDPOINT  9 
4537
....................  #define USB_LAST_DEFINED_ENDPOINT  9 
4538
.................... #elif USB_EP8_TX_SIZE || USB_EP8_RX_SIZE 
4538
.................... #elif USB_EP8_TX_SIZE || USB_EP8_RX_SIZE 
4539
....................  #define USB_LAST_DEFINED_ENDPOINT  8 
4539
....................  #define USB_LAST_DEFINED_ENDPOINT  8 
4540
.................... #elif USB_EP7_TX_SIZE || USB_EP7_RX_SIZE 
4540
.................... #elif USB_EP7_TX_SIZE || USB_EP7_RX_SIZE 
4541
....................  #define USB_LAST_DEFINED_ENDPOINT  7 
4541
....................  #define USB_LAST_DEFINED_ENDPOINT  7 
4542
.................... #elif USB_EP6_TX_SIZE || USB_EP6_RX_SIZE 
4542
.................... #elif USB_EP6_TX_SIZE || USB_EP6_RX_SIZE 
4543
....................  #define USB_LAST_DEFINED_ENDPOINT  6 
4543
....................  #define USB_LAST_DEFINED_ENDPOINT  6 
4544
.................... #elif USB_EP5_TX_SIZE || USB_EP5_RX_SIZE 
4544
.................... #elif USB_EP5_TX_SIZE || USB_EP5_RX_SIZE 
4545
....................  #define USB_LAST_DEFINED_ENDPOINT  5 
4545
....................  #define USB_LAST_DEFINED_ENDPOINT  5 
4546
.................... #elif USB_EP4_TX_SIZE || USB_EP4_RX_SIZE 
4546
.................... #elif USB_EP4_TX_SIZE || USB_EP4_RX_SIZE 
4547
....................  #define USB_LAST_DEFINED_ENDPOINT  4 
4547
....................  #define USB_LAST_DEFINED_ENDPOINT  4 
4548
.................... #elif USB_EP3_TX_SIZE || USB_EP3_RX_SIZE 
4548
.................... #elif USB_EP3_TX_SIZE || USB_EP3_RX_SIZE 
4549
....................  #define USB_LAST_DEFINED_ENDPOINT  3 
4549
....................  #define USB_LAST_DEFINED_ENDPOINT  3 
4550
.................... #elif USB_EP2_TX_SIZE || USB_EP2_RX_SIZE 
4550
.................... #elif USB_EP2_TX_SIZE || USB_EP2_RX_SIZE 
4551
....................  #define USB_LAST_DEFINED_ENDPOINT  2 
4551
....................  #define USB_LAST_DEFINED_ENDPOINT  2 
4552
.................... #elif USB_EP1_TX_SIZE || USB_EP1_RX_SIZE 
4552
.................... #elif USB_EP1_TX_SIZE || USB_EP1_RX_SIZE 
4553
....................  #define USB_LAST_DEFINED_ENDPOINT  1 
4553
....................  #define USB_LAST_DEFINED_ENDPOINT  1 
4554
.................... #else 
4554
.................... #else 
4555
....................  #define USB_LAST_DEFINED_ENDPOINT  0 
4555
....................  #define USB_LAST_DEFINED_ENDPOINT  0 
4556
.................... #endif 
4556
.................... #endif 
4557
....................  
4557
....................  
4558
.................... #define USB_CONTROL_REGISTER_SIZE   ((USB_LAST_DEFINED_ENDPOINT+1)*8) 
4558
.................... #define USB_CONTROL_REGISTER_SIZE   ((USB_LAST_DEFINED_ENDPOINT+1)*8) 
4559
....................  
4559
....................  
4560
.................... #define USB_DATA_BUFFER_NEEDED (USB_EP0_TX_SIZE+USB_EP0_RX_SIZE+USB_EP1_TX_SIZE+\ 
4560
.................... #define USB_DATA_BUFFER_NEEDED (USB_EP0_TX_SIZE+USB_EP0_RX_SIZE+USB_EP1_TX_SIZE+\ 
4561
....................                            USB_EP1_RX_SIZE+USB_EP2_TX_SIZE+USB_EP2_RX_SIZE+\ 
4561
....................                            USB_EP1_RX_SIZE+USB_EP2_TX_SIZE+USB_EP2_RX_SIZE+\ 
4562
....................                            USB_EP3_TX_SIZE+USB_EP3_RX_SIZE+USB_EP4_TX_SIZE+\ 
4562
....................                            USB_EP3_TX_SIZE+USB_EP3_RX_SIZE+USB_EP4_TX_SIZE+\ 
4563
....................                            USB_EP4_RX_SIZE+USB_EP5_TX_SIZE+USB_EP5_RX_SIZE+\ 
4563
....................                            USB_EP4_RX_SIZE+USB_EP5_TX_SIZE+USB_EP5_RX_SIZE+\ 
4564
....................                            USB_EP6_TX_SIZE+USB_EP6_RX_SIZE+USB_EP7_TX_SIZE+\ 
4564
....................                            USB_EP6_TX_SIZE+USB_EP6_RX_SIZE+USB_EP7_TX_SIZE+\ 
4565
....................                            USB_EP7_RX_SIZE+USB_EP8_TX_SIZE+USB_EP8_RX_SIZE+\ 
4565
....................                            USB_EP7_RX_SIZE+USB_EP8_TX_SIZE+USB_EP8_RX_SIZE+\ 
4566
....................                            USB_EP9_TX_SIZE+USB_EP9_RX_SIZE+USB_EP10_TX_SIZE+\ 
4566
....................                            USB_EP9_TX_SIZE+USB_EP9_RX_SIZE+USB_EP10_TX_SIZE+\ 
4567
....................                            USB_EP10_RX_SIZE+USB_EP11_TX_SIZE+USB_EP11_RX_SIZE+\ 
4567
....................                            USB_EP10_RX_SIZE+USB_EP11_TX_SIZE+USB_EP11_RX_SIZE+\ 
4568
....................                            USB_EP12_TX_SIZE+USB_EP12_RX_SIZE+USB_EP13_TX_SIZE+\ 
4568
....................                            USB_EP12_TX_SIZE+USB_EP12_RX_SIZE+USB_EP13_TX_SIZE+\ 
4569
....................                            USB_EP13_RX_SIZE+USB_EP14_TX_SIZE+USB_EP14_RX_SIZE+\ 
4569
....................                            USB_EP13_RX_SIZE+USB_EP14_TX_SIZE+USB_EP14_RX_SIZE+\ 
4570
....................                            USB_EP15_TX_SIZE+USB_EP15_RX_SIZE) 
4570
....................                            USB_EP15_TX_SIZE+USB_EP15_RX_SIZE) 
4571
....................  
4571
....................  
4572
.................... #if ((USB_DATA_BUFFER_NEEDED+USB_CONTROL_REGISTER_SIZE) > USB_TOTAL_RAM_SPACE) 
4572
.................... #if ((USB_DATA_BUFFER_NEEDED+USB_CONTROL_REGISTER_SIZE) > USB_TOTAL_RAM_SPACE) 
4573
....................  #error You are trying to allocate more memory for endpoints than the PIC can handle 
4573
....................  #error You are trying to allocate more memory for endpoints than the PIC can handle 
4574
.................... #endif 
4574
.................... #endif 
4575
....................  
4575
....................  
4576
.................... #if (USB_LAST_DEFINED_ENDPOINT > USB_LAST_ALLOWED_ENDPOINT) 
4576
.................... #if (USB_LAST_DEFINED_ENDPOINT > USB_LAST_ALLOWED_ENDPOINT) 
4577
....................  #error You are trying ot use an invalid endpoint for this hardware! 
4577
....................  #error You are trying ot use an invalid endpoint for this hardware! 
4578
.................... #endif 
4578
.................... #endif 
4579
....................  
4579
....................  
4580
.................... #define USB_DATA_BUFFER_LOCATION ((int16)USB_RAM_START+USB_CONTROL_REGISTER_SIZE) 
4580
.................... #define USB_DATA_BUFFER_LOCATION ((int16)USB_RAM_START+USB_CONTROL_REGISTER_SIZE) 
4581
....................  
4581
....................  
4582
.................... typedef struct 
4582
.................... typedef struct 
4583
.................... { 
4583
.................... { 
4584
....................    int8 stat; 
4584
....................    int8 stat; 
4585
....................    int8 cnt; 
4585
....................    int8 cnt; 
4586
....................    int16 addr; 
4586
....................    int16 addr; 
4587
.................... } STRUCT_BD; 
4587
.................... } STRUCT_BD; 
4588
....................  
4588
....................  
4589
.................... struct 
4589
.................... struct 
4590
.................... { 
4590
.................... { 
4591
....................    struct 
4591
....................    struct 
4592
....................    { 
4592
....................    { 
4593
....................       STRUCT_BD out;    //pc -> pic 
4593
....................       STRUCT_BD out;    //pc -> pic 
4594
....................       STRUCT_BD in;     //pc <- pic 
4594
....................       STRUCT_BD in;     //pc <- pic 
4595
....................    } bd[USB_LAST_DEFINED_ENDPOINT+1]; 
4595
....................    } bd[USB_LAST_DEFINED_ENDPOINT+1]; 
4596
....................    union 
4596
....................    union 
4597
....................    { 
4597
....................    { 
4598
....................       struct 
4598
....................       struct 
4599
....................       { 
4599
....................       { 
4600
....................          int8 ep0_rx_buffer[USB_MAX_EP0_PACKET_LENGTH]; 
4600
....................          int8 ep0_rx_buffer[USB_MAX_EP0_PACKET_LENGTH]; 
4601
....................          int8 ep0_tx_buffer[USB_MAX_EP0_PACKET_LENGTH]; 
4601
....................          int8 ep0_tx_buffer[USB_MAX_EP0_PACKET_LENGTH]; 
4602
....................           
4602
....................           
4603
....................          //these buffer definitions needed for CDC library 
4603
....................          //these buffer definitions needed for CDC library 
4604
....................         #if USB_EP1_RX_SIZE 
4604
....................         #if USB_EP1_RX_SIZE 
4605
....................          int8 ep1_rx_buffer[USB_EP1_RX_SIZE]; 
4605
....................          int8 ep1_rx_buffer[USB_EP1_RX_SIZE]; 
4606
....................         #endif 
4606
....................         #endif 
4607
....................         #if USB_EP1_TX_SIZE 
4607
....................         #if USB_EP1_TX_SIZE 
4608
....................          int8 ep1_tx_buffer[USB_EP1_TX_SIZE]; 
4608
....................          int8 ep1_tx_buffer[USB_EP1_TX_SIZE]; 
4609
....................         #endif 
4609
....................         #endif 
4610
....................         #if USB_EP2_RX_SIZE 
4610
....................         #if USB_EP2_RX_SIZE 
4611
....................          int8 ep2_rx_buffer[USB_EP2_RX_SIZE]; 
4611
....................          int8 ep2_rx_buffer[USB_EP2_RX_SIZE]; 
4612
....................         #endif 
4612
....................         #endif 
4613
....................         #if USB_EP2_TX_SIZE 
4613
....................         #if USB_EP2_TX_SIZE 
4614
....................          int8 ep2_tx_buffer[USB_EP2_TX_SIZE]; 
4614
....................          int8 ep2_tx_buffer[USB_EP2_TX_SIZE]; 
4615
....................         #endif 
4615
....................         #endif 
4616
....................       }; 
4616
....................       }; 
4617
....................       int8 general[USB_DATA_BUFFER_NEEDED]; 
4617
....................       int8 general[USB_DATA_BUFFER_NEEDED]; 
4618
....................    } buffer; 
4618
....................    } buffer; 
4619
.................... } g_USBRAM; 
4619
.................... } g_USBRAM; 
4620
.................... #locate g_USBRAM=USB_RAM_START 
4620
.................... #locate g_USBRAM=USB_RAM_START 
4621
....................  
4621
....................  
4622
.................... #define usb_ep0_rx_buffer g_USBRAM.buffer.ep0_rx_buffer 
4622
.................... #define usb_ep0_rx_buffer g_USBRAM.buffer.ep0_rx_buffer 
4623
.................... #define usb_ep0_tx_buffer g_USBRAM.buffer.ep0_tx_buffer 
4623
.................... #define usb_ep0_tx_buffer g_USBRAM.buffer.ep0_tx_buffer 
4624
....................  
4624
....................  
4625
.................... //these buffer definitions needed for CDC library 
4625
.................... //these buffer definitions needed for CDC library 
4626
.................... #define usb_ep1_rx_buffer g_USBRAM.buffer.ep1_rx_buffer 
4626
.................... #define usb_ep1_rx_buffer g_USBRAM.buffer.ep1_rx_buffer 
4627
.................... #define usb_ep1_tx_buffer g_USBRAM.buffer.ep1_tx_buffer 
4627
.................... #define usb_ep1_tx_buffer g_USBRAM.buffer.ep1_tx_buffer 
4628
.................... #define usb_ep2_rx_buffer g_USBRAM.buffer.ep2_rx_buffer 
4628
.................... #define usb_ep2_rx_buffer g_USBRAM.buffer.ep2_rx_buffer 
4629
.................... #define usb_ep2_tx_buffer g_USBRAM.buffer.ep2_tx_buffer 
4629
.................... #define usb_ep2_tx_buffer g_USBRAM.buffer.ep2_tx_buffer 
4630
....................  
4630
....................  
4631
.................... #define debug_usb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) 
4631
.................... #define debug_usb(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) 
4632
.................... //#define debug_usb printf 
4632
.................... //#define debug_usb printf 
4633
.................... //#define debug_putc putc_tbe 
4633
.................... //#define debug_putc putc_tbe 
4634
.................... #define debug_display_ram(x,y) 
4634
.................... #define debug_display_ram(x,y) 
4635
.................... /* 
4635
.................... /* 
4636
.................... void debug_display_ram(int8 len, int8 *ptr) { 
4636
.................... void debug_display_ram(int8 len, int8 *ptr) { 
4637
....................    int8 max=16; 
4637
....................    int8 max=16; 
4638
....................    debug_usb(debug_putc,"%U - ",len); 
4638
....................    debug_usb(debug_putc,"%U - ",len); 
4639
....................    if (max>len) {max=len;} 
4639
....................    if (max>len) {max=len;} 
4640
....................    while(max--) { 
4640
....................    while(max--) { 
4641
....................       debug_usb(debug_putc,"%X",*ptr); 
4641
....................       debug_usb(debug_putc,"%X",*ptr); 
4642
....................       len--; 
4642
....................       len--; 
4643
....................       ptr++; 
4643
....................       ptr++; 
4644
....................    } 
4644
....................    } 
4645
....................    if (len) {debug_usb(debug_putc,"...");} 
4645
....................    if (len) {debug_usb(debug_putc,"...");} 
4646
.................... } 
4646
.................... } 
4647
.................... */ 
4647
.................... */ 
4648
....................  
4648
....................  
4649
.................... //if you enable this it will keep a counter of the 6 possible errors the 
4649
.................... //if you enable this it will keep a counter of the 6 possible errors the 
4650
.................... //pic can detect.  disabling this will save you ROM, RAM and execution time. 
4650
.................... //pic can detect.  disabling this will save you ROM, RAM and execution time. 
4651
.................... #if !defined(USB_USE_ERROR_COUNTER) 
4651
.................... #if !defined(USB_USE_ERROR_COUNTER) 
4652
....................    #define USB_USE_ERROR_COUNTER FALSE 
4652
....................    #define USB_USE_ERROR_COUNTER FALSE 
4653
.................... #endif 
4653
.................... #endif 
4654
....................  
4654
....................  
4655
.................... #define USB_PING_PONG_MODE_OFF   0  //no ping pong 
4655
.................... #define USB_PING_PONG_MODE_OFF   0  //no ping pong 
4656
.................... #define USB_PING_PONG_MODE_E0    1  //ping pong endpoint 0 only 
4656
.................... #define USB_PING_PONG_MODE_E0    1  //ping pong endpoint 0 only 
4657
.................... #define USB_PING_PONG_MODE_ON    2  //ping pong all endpoints 
4657
.................... #define USB_PING_PONG_MODE_ON    2  //ping pong all endpoints 
4658
....................  
4658
....................  
4659
.................... //NOTE - PING PONG MODE IS NOT SUPPORTED BY CCS! 
4659
.................... //NOTE - PING PONG MODE IS NOT SUPPORTED BY CCS! 
4660
.................... #if !defined(USB_PING_PONG_MODE) 
4660
.................... #if !defined(USB_PING_PONG_MODE) 
4661
....................    #define USB_PING_PONG_MODE USB_PING_PONG_MODE_OFF 
4661
....................    #define USB_PING_PONG_MODE USB_PING_PONG_MODE_OFF 
4662
.................... #endif 
4662
.................... #endif 
4663
....................  
4663
....................  
4664
.................... #if USB_USE_ERROR_COUNTER 
4664
.................... #if USB_USE_ERROR_COUNTER 
4665
....................    int ERROR_COUNTER[6]; 
4665
....................    int ERROR_COUNTER[6]; 
4666
.................... #endif 
4666
.................... #endif 
4667
....................  
4667
....................  
4668
.................... //---pic18fxx5x memory locations 
4668
.................... //---pic18fxx5x memory locations 
4669
.................... #if defined(__USB_4550__) || defined(__USB_4450__) 
4669
.................... #if defined(__USB_4550__) || defined(__USB_4450__) 
4670
....................    #byte UFRML   =  0xF66 
4670
....................    #byte UFRML   =  0xF66 
4671
....................    #byte UFRMH   =  0xF67 
4671
....................    #byte UFRMH   =  0xF67 
4672
....................    #byte UIR     =  0xF68 
4672
....................    #byte UIR     =  0xF68 
4673
....................    #byte UIE     =  0xF69 
4673
....................    #byte UIE     =  0xF69 
4674
....................    #byte UEIR    =  0xF6A 
4674
....................    #byte UEIR    =  0xF6A 
4675
....................    #byte UEIE    =  0xF6B 
4675
....................    #byte UEIE    =  0xF6B 
4676
....................    #byte USTAT   =  0xF6C 
4676
....................    #byte USTAT   =  0xF6C 
4677
....................    #byte UCON    =  0xF6D 
4677
....................    #byte UCON    =  0xF6D 
4678
....................    #byte UADDR   =  0xF6E 
4678
....................    #byte UADDR   =  0xF6E 
4679
....................    #byte UCFG    =  0xF6F 
4679
....................    #byte UCFG    =  0xF6F 
4680
....................    #define  UEP0_LOC 0xF70 
4680
....................    #define  UEP0_LOC 0xF70 
4681
.................... #elif defined(__USB_K50__) 
4681
.................... #elif defined(__USB_K50__) 
4682
....................    #byte UFRML   =  0xF5D 
4682
....................    #byte UFRML   =  0xF5D 
4683
....................    #byte UFRMH   =  0xF5E 
4683
....................    #byte UFRMH   =  0xF5E 
4684
....................    #byte UIR     =  0xF62 
4684
....................    #byte UIR     =  0xF62 
4685
....................    #byte UIE     =  0xF60 
4685
....................    #byte UIE     =  0xF60 
4686
....................    #byte UEIR    =  0xF5F 
4686
....................    #byte UEIR    =  0xF5F 
4687
....................    #byte UEIE    =  0xF5B 
4687
....................    #byte UEIE    =  0xF5B 
4688
....................    #byte USTAT   =  0xF63 
4688
....................    #byte USTAT   =  0xF63 
4689
....................    #byte UCON    =  0xF64 
4689
....................    #byte UCON    =  0xF64 
4690
....................    #byte UADDR   =  0xF5C 
4690
....................    #byte UADDR   =  0xF5C 
4691
....................    #byte UCFG    =  0xF61 
4691
....................    #byte UCFG    =  0xF61 
4692
....................    #define  UEP0_LOC 0xF53 
4692
....................    #define  UEP0_LOC 0xF53 
4693
.................... #else 
4693
.................... #else 
4694
....................    #byte UFRML   =  0xF60 
4694
....................    #byte UFRML   =  0xF60 
4695
....................    #byte UFRMH   =  0xF61 
4695
....................    #byte UFRMH   =  0xF61 
4696
....................    #byte UIR     =  0xF62 
4696
....................    #byte UIR     =  0xF62 
4697
....................    #byte UIE     =  0xF5C 
4697
....................    #byte UIE     =  0xF5C 
4698
....................    #byte UEIR    =  0xF63 
4698
....................    #byte UEIR    =  0xF63 
4699
....................    #byte UEIE    =  0xF5D 
4699
....................    #byte UEIE    =  0xF5D 
4700
....................    #byte USTAT   =  0xF64 
4700
....................    #byte USTAT   =  0xF64 
4701
....................    #byte UCON    =  0xF65 
4701
....................    #byte UCON    =  0xF65 
4702
....................    #byte UADDR   =  0xF5E 
4702
....................    #byte UADDR   =  0xF5E 
4703
....................    #byte UCFG    =  0xF5F 
4703
....................    #byte UCFG    =  0xF5F 
4704
....................    #define  UEP0_LOC 0xF4C 
4704
....................    #define  UEP0_LOC 0xF4C 
4705
.................... #endif 
4705
.................... #endif 
4706
....................  
4706
....................  
4707
.................... int8 g_UEP[16]; 
4707
.................... int8 g_UEP[16]; 
4708
.................... #locate g_UEP=UEP0_LOC 
4708
.................... #locate g_UEP=UEP0_LOC 
4709
.................... #define UEP(x) g_UEP[x] 
4709
.................... #define UEP(x) g_UEP[x] 
4710
....................  
4710
....................  
4711
.................... #BIT UIR_SOF = UIR.6 
4711
.................... #BIT UIR_SOF = UIR.6 
4712
.................... #BIT UIR_STALL = UIR.5 
4712
.................... #BIT UIR_STALL = UIR.5 
4713
.................... #BIT UIR_IDLE = UIR.4 
4713
.................... #BIT UIR_IDLE = UIR.4 
4714
.................... #BIT UIR_TRN = UIR.3 
4714
.................... #BIT UIR_TRN = UIR.3 
4715
.................... #BIT UIR_ACTV = UIR.2 
4715
.................... #BIT UIR_ACTV = UIR.2 
4716
.................... #BIT UIR_UERR = UIR.1 
4716
.................... #BIT UIR_UERR = UIR.1 
4717
.................... #BIT UIR_URST = UIR.0 
4717
.................... #BIT UIR_URST = UIR.0 
4718
....................  
4718
....................  
4719
.................... #BIT UIE_SOF = UIE.6 
4719
.................... #BIT UIE_SOF = UIE.6 
4720
.................... #BIT UIE_STALL = UIE.5 
4720
.................... #BIT UIE_STALL = UIE.5 
4721
.................... #BIT UIE_IDLE = UIE.4 
4721
.................... #BIT UIE_IDLE = UIE.4 
4722
.................... #BIT UIE_TRN = UIE.3 
4722
.................... #BIT UIE_TRN = UIE.3 
4723
.................... #BIT UIE_ACTV = UIE.2 
4723
.................... #BIT UIE_ACTV = UIE.2 
4724
.................... #BIT UIE_UERR = UIE.1 
4724
.................... #BIT UIE_UERR = UIE.1 
4725
.................... #BIT UIE_URST = UIE.0 
4725
.................... #BIT UIE_URST = UIE.0 
4726
....................  
4726
....................  
4727
.................... #bit UCON_PBRST=UCON.6 
4727
.................... #bit UCON_PBRST=UCON.6 
4728
.................... #bit UCON_SE0=UCON.5 
4728
.................... #bit UCON_SE0=UCON.5 
4729
.................... #bit UCON_PKTDIS=UCON.4 
4729
.................... #bit UCON_PKTDIS=UCON.4 
4730
.................... #bit UCON_USBEN=UCON.3 
4730
.................... #bit UCON_USBEN=UCON.3 
4731
.................... #bit UCON_RESUME=UCON.2 
4731
.................... #bit UCON_RESUME=UCON.2 
4732
.................... #bit UCON_SUSPND=UCON.1 
4732
.................... #bit UCON_SUSPND=UCON.1 
4733
....................  
4733
....................  
4734
.................... #if (USB_PING_PONG_MODE==USB_PING_PONG_MODE_OFF) 
4734
.................... #if (USB_PING_PONG_MODE==USB_PING_PONG_MODE_OFF) 
4735
....................  #define EP_BDxST_O(x)    g_USBRAM.bd[x].out.stat 
4735
....................  #define EP_BDxST_O(x)    g_USBRAM.bd[x].out.stat 
4736
....................  #define EP_BDxCNT_O(x)   g_USBRAM.bd[x].out.cnt 
4736
....................  #define EP_BDxCNT_O(x)   g_USBRAM.bd[x].out.cnt 
4737
....................  #define EP_BDxADR_O(x)   g_USBRAM.bd[x].out.addr 
4737
....................  #define EP_BDxADR_O(x)   g_USBRAM.bd[x].out.addr 
4738
....................  #define EP_BDxST_I(x)    g_USBRAM.bd[x].in.stat 
4738
....................  #define EP_BDxST_I(x)    g_USBRAM.bd[x].in.stat 
4739
....................  #define EP_BDxCNT_I(x)   g_USBRAM.bd[x].in.cnt 
4739
....................  #define EP_BDxCNT_I(x)   g_USBRAM.bd[x].in.cnt 
4740
....................  #define EP_BDxADR_I(x)   g_USBRAM.bd[x].in.addr 
4740
....................  #define EP_BDxADR_I(x)   g_USBRAM.bd[x].in.addr 
4741
.................... #else 
4741
.................... #else 
4742
.................... #error Right now this driver only supports no ping pong 
4742
.................... #error Right now this driver only supports no ping pong 
4743
.................... #endif 
4743
.................... #endif 
4744
....................  
4744
....................  
4745
.................... //See UEPn (0xF70-0xF7F) 
4745
.................... //See UEPn (0xF70-0xF7F) 
4746
.................... #define ENDPT_DISABLED   0x00   //endpoint not used 
4746
.................... #define ENDPT_DISABLED   0x00   //endpoint not used 
4747
.................... #define ENDPT_IN_ONLY   0x02    //endpoint supports IN transactions only 
4747
.................... #define ENDPT_IN_ONLY   0x02    //endpoint supports IN transactions only 
4748
.................... #define ENDPT_OUT_ONLY   0x04    //endpoint supports OUT transactions only 
4748
.................... #define ENDPT_OUT_ONLY   0x04    //endpoint supports OUT transactions only 
4749
.................... #define ENDPT_CONTROL   0x06    //Supports IN, OUT and CONTROL transactions - Only use with EP0 
4749
.................... #define ENDPT_CONTROL   0x06    //Supports IN, OUT and CONTROL transactions - Only use with EP0 
4750
.................... #define ENDPT_NON_CONTROL 0x0E  //Supports both IN and OUT transactions 
4750
.................... #define ENDPT_NON_CONTROL 0x0E  //Supports both IN and OUT transactions 
4751
....................  
4751
....................  
4752
.................... //Define the states that the USB interface can be in 
4752
.................... //Define the states that the USB interface can be in 
4753
.................... enum {USB_STATE_DETACHED=0, USB_STATE_ATTACHED=1, USB_STATE_POWERED=2, USB_STATE_DEFAULT=3, 
4753
.................... enum {USB_STATE_DETACHED=0, USB_STATE_ATTACHED=1, USB_STATE_POWERED=2, USB_STATE_DEFAULT=3, 
4754
....................     USB_STATE_ADDRESS=4, USB_STATE_CONFIGURED=5} usb_state=0; 
4754
....................     USB_STATE_ADDRESS=4, USB_STATE_CONFIGURED=5} usb_state=0; 
4755
....................  
4755
....................  
4756
.................... //--BDendST has their PIDs upshifed 2 
4756
.................... //--BDendST has their PIDs upshifed 2 
4757
.................... #define USB_PIC_PID_IN       0x24  //device to host transactions 
4757
.................... #define USB_PIC_PID_IN       0x24  //device to host transactions 
4758
.................... #define USB_PIC_PID_OUT      0x04  //host to device transactions 
4758
.................... #define USB_PIC_PID_OUT      0x04  //host to device transactions 
4759
.................... #define USB_PIC_PID_SETUP    0x34  //host to device setup transaction 
4759
.................... #define USB_PIC_PID_SETUP    0x34  //host to device setup transaction 
4760
....................  
4760
....................  
4761
.................... #define USTAT_IN_E0        4 
4761
.................... #define USTAT_IN_E0        4 
4762
.................... #define USTAT_OUT_SETUP_E0 0 
4762
.................... #define USTAT_OUT_SETUP_E0 0 
4763
....................  
4763
....................  
4764
.................... #define __USB_UIF_RESET    0x01 
4764
.................... #define __USB_UIF_RESET    0x01 
4765
.................... #define __USB_UIF_ERROR    0x02 
4765
.................... #define __USB_UIF_ERROR    0x02 
4766
.................... #define __USB_UIF_ACTIVE   0x04 
4766
.................... #define __USB_UIF_ACTIVE   0x04 
4767
.................... #define __USB_UIF_TOKEN    0x08 
4767
.................... #define __USB_UIF_TOKEN    0x08 
4768
.................... #define __USB_UIF_IDLE     0x10 
4768
.................... #define __USB_UIF_IDLE     0x10 
4769
.................... #define __USB_UIF_STALL    0x20 
4769
.................... #define __USB_UIF_STALL    0x20 
4770
.................... #define __USB_UIF_SOF      0x40 
4770
.................... #define __USB_UIF_SOF      0x40 
4771
....................  
4771
....................  
4772
.................... #if USB_USE_ERROR_COUNTER 
4772
.................... #if USB_USE_ERROR_COUNTER 
4773
....................  #define STANDARD_INTS __USB_UIF_STALL|__USB_UIF_IDLE|__USB_UIF_TOKEN|__USB_UIF_ACTIVE|__USB_UIF_ERROR|__USB_UIF_RESET 
4773
....................  #define STANDARD_INTS __USB_UIF_STALL|__USB_UIF_IDLE|__USB_UIF_TOKEN|__USB_UIF_ACTIVE|__USB_UIF_ERROR|__USB_UIF_RESET 
4774
.................... #else 
4774
.................... #else 
4775
....................  #define STANDARD_INTS __USB_UIF_STALL|__USB_UIF_IDLE|__USB_UIF_TOKEN|__USB_UIF_ACTIVE|__USB_UIF_RESET 
4775
....................  #define STANDARD_INTS __USB_UIF_STALL|__USB_UIF_IDLE|__USB_UIF_TOKEN|__USB_UIF_ACTIVE|__USB_UIF_RESET 
4776
.................... #endif 
4776
.................... #endif 
4777
....................  
4777
....................  
4778
.................... #define __USB_UCFG_UTEYE   0x80 
4778
.................... #define __USB_UCFG_UTEYE   0x80 
4779
.................... #if defined(__USB_4550__) 
4779
.................... #if defined(__USB_4550__) 
4780
....................  #define __USB_UCFG_UOEMON  0x40 
4780
....................  #define __USB_UCFG_UOEMON  0x40 
4781
.................... #endif 
4781
.................... #endif 
4782
.................... #define __USB_UCFG_UPUEN   0x10 
4782
.................... #define __USB_UCFG_UPUEN   0x10 
4783
.................... #define __USB_UCFG_UTRDIS  0x08 
4783
.................... #define __USB_UCFG_UTRDIS  0x08 
4784
.................... #define __USB_UCFG_FSEN    0x04 
4784
.................... #define __USB_UCFG_FSEN    0x04 
4785
....................  
4785
....................  
4786
.................... #if USB_USE_FULL_SPEED 
4786
.................... #if USB_USE_FULL_SPEED 
4787
....................    #define __UCFG_VAL_ENABLED__ (__USB_UCFG_UPUEN | __USB_UCFG_FSEN | USB_PING_PONG_MODE) 
4787
....................    #define __UCFG_VAL_ENABLED__ (__USB_UCFG_UPUEN | __USB_UCFG_FSEN | USB_PING_PONG_MODE) 
4788
.................... #else 
4788
.................... #else 
4789
....................    #define __UCFG_VAL_ENABLED__ (__USB_UCFG_UPUEN | USB_PING_PONG_MODE); 
4789
....................    #define __UCFG_VAL_ENABLED__ (__USB_UCFG_UPUEN | USB_PING_PONG_MODE); 
4790
.................... #endif 
4790
.................... #endif 
4791
....................  
4791
....................  
4792
.................... #define __UCFG_VAL_DISABLED__ 0x08 
4792
.................... #define __UCFG_VAL_DISABLED__ 0x08 
4793
....................  
4793
....................  
4794
.................... int8 __setup_0_tx_size; 
4794
.................... int8 __setup_0_tx_size; 
4795
....................  
4795
....................  
4796
.................... //interrupt handler, specific to PIC18Fxx5x peripheral only 
4796
.................... //interrupt handler, specific to PIC18Fxx5x peripheral only 
4797
.................... void usb_handle_interrupt(); 
4797
.................... void usb_handle_interrupt(); 
4798
.................... void usb_isr_rst(); 
4798
.................... void usb_isr_rst(); 
4799
.................... void usb_isr_uerr(); 
4799
.................... void usb_isr_uerr(); 
4800
.................... void usb_isr_sof(void); 
4800
.................... void usb_isr_sof(void); 
4801
.................... void usb_isr_activity(); 
4801
.................... void usb_isr_activity(); 
4802
.................... void usb_isr_uidle(); 
4802
.................... void usb_isr_uidle(); 
4803
.................... void usb_isr_tok_dne(); 
4803
.................... void usb_isr_tok_dne(); 
4804
.................... void usb_isr_stall(void); 
4804
.................... void usb_isr_stall(void); 
4805
.................... void usb_init_ep0_setup(void); 
4805
.................... void usb_init_ep0_setup(void); 
4806
....................  
4806
....................  
4807
.................... //// BEGIN User Functions: 
4807
.................... //// BEGIN User Functions: 
4808
....................  
4808
....................  
4809
.................... // see usb_hw_layer.h for more documentation 
4809
.................... // see usb_hw_layer.h for more documentation 
4810
.................... int1 usb_kbhit(int8 en) 
4810
.................... int1 usb_kbhit(int8 en) 
4811
.................... { 
4811
.................... { 
4812
....................    return((UEP(en)!=ENDPT_DISABLED)&&(!bit_test(EP_BDxST_O(en),7))); 
4812
....................    return((UEP(en)!=ENDPT_DISABLED)&&(!bit_test(EP_BDxST_O(en),7))); 
4813
.................... } 
4813
.................... } 
4814
....................  
4814
....................  
4815
.................... // see usb_hw_layer.h for documentation 
4815
.................... // see usb_hw_layer.h for documentation 
4816
.................... int1 usb_tbe(int8 en) 
4816
.................... int1 usb_tbe(int8 en) 
4817
.................... { 
4817
.................... { 
4818
....................    return((UEP(en)!=ENDPT_DISABLED)&&(!bit_test(EP_BDxST_I(en),7))); 
4818
....................    return((UEP(en)!=ENDPT_DISABLED)&&(!bit_test(EP_BDxST_I(en),7))); 
4819
*
4819
*
4820
0D06:  CLRF   03
4820
0D06:  CLRF   03
4821
0D08:  MOVLB  7
4821
0D08:  MOVLB  7
4822
0D0A:  MOVF   x47,W
4822
0D0A:  MOVF   x47,W
4823
0D0C:  ADDLW  70
4823
0D0C:  ADDLW  70
4824
0D0E:  MOVWF  FE9
4824
0D0E:  MOVWF  FE9
4825
0D10:  MOVLW  0F
4825
0D10:  MOVLW  0F
4826
0D12:  ADDWFC 03,W
4826
0D12:  ADDWFC 03,W
4827
0D14:  MOVWF  FEA
4827
0D14:  MOVWF  FEA
4828
0D16:  MOVF   FEF,F
4828
0D16:  MOVF   FEF,F
4829
0D18:  BZ    0D50
4829
0D18:  BZ    0D50
4830
0D1A:  CLRF   x49
4830
0D1A:  CLRF   x49
4831
0D1C:  MOVFF  747,748
4831
0D1C:  MOVFF  747,748
4832
0D20:  CLRF   x4B
4832
0D20:  CLRF   x4B
4833
0D22:  MOVLW  08
4833
0D22:  MOVLW  08
4834
0D24:  MOVWF  x4A
4834
0D24:  MOVWF  x4A
4835
0D26:  MOVLB  0
4835
0D26:  MOVLB  0
4836
0D28:  CALL   02BA
4836
0D28:  CALL   02BA
4837
0D2C:  MOVFF  02,749
4837
0D2C:  MOVFF  02,749
4838
0D30:  MOVFF  01,748
4838
0D30:  MOVFF  01,748
4839
0D34:  MOVLW  04
4839
0D34:  MOVLW  04
4840
0D36:  MOVLB  7
4840
0D36:  MOVLB  7
4841
0D38:  ADDWF  x48,F
4841
0D38:  ADDWF  x48,F
4842
0D3A:  MOVLW  00
4842
0D3A:  MOVLW  00
4843
0D3C:  ADDWFC x49,F
4843
0D3C:  ADDWFC x49,F
4844
0D3E:  MOVFF  748,FE9
4844
0D3E:  MOVFF  748,FE9
4845
0D42:  MOVLW  04
4845
0D42:  MOVLW  04
4846
0D44:  ADDWF  x49,W
4846
0D44:  ADDWF  x49,W
4847
0D46:  MOVWF  FEA
4847
0D46:  MOVWF  FEA
4848
0D48:  MOVFF  FEF,748
4848
0D48:  MOVFF  FEF,748
4849
0D4C:  BTFSS  x48.7
4849
0D4C:  BTFSS  x48.7
4850
0D4E:  BRA    0D54
4850
0D4E:  BRA    0D54
4851
0D50:  MOVLW  00
4851
0D50:  MOVLW  00
4852
0D52:  BRA    0D56
4852
0D52:  BRA    0D56
4853
0D54:  MOVLW  01
4853
0D54:  MOVLW  01
4854
0D56:  MOVWF  01
4854
0D56:  MOVWF  01
4855
.................... } 
4855
.................... } 
4856
0D58:  MOVLB  0
4856
0D58:  MOVLB  0
4857
0D5A:  RETLW  00
4857
0D5A:  RETLW  00
4858
....................  
4858
....................  
4859
.................... // see usb_hw_layer.h for documentation 
4859
.................... // see usb_hw_layer.h for documentation 
4860
.................... void usb_detach(void) 
4860
.................... void usb_detach(void) 
4861
.................... { 
4861
.................... { 
4862
....................    UCON = 0;  //disable USB hardware 
4862
....................    UCON = 0;  //disable USB hardware 
4863
*
4863
*
4864
12F4:  CLRF   F6D
4864
12F4:  CLRF   F6D
4865
....................    UIE = 0;   //disable USB interrupts 
4865
....................    UIE = 0;   //disable USB interrupts 
4866
12F6:  CLRF   F69
4866
12F6:  CLRF   F69
4867
....................    UCFG = __UCFG_VAL_DISABLED__; 
4867
....................    UCFG = __UCFG_VAL_DISABLED__; 
4868
12F8:  MOVLW  08
4868
12F8:  MOVLW  08
4869
12FA:  MOVWF  F6F
4869
12FA:  MOVWF  F6F
4870
....................     
4870
....................     
4871
....................    // set D+/D- to inputs 
4871
....................    // set D+/D- to inputs 
4872
....................   #if defined(__USB_87J50__) 
4872
....................   #if defined(__USB_87J50__) 
4873
....................    set_tris_f(get_tris_f() | 0x18); 
4873
....................    set_tris_f(get_tris_f() | 0x18); 
4874
....................   #elif defined(__USB_K50__) 
4874
....................   #elif defined(__USB_K50__) 
4875
....................    set_tris_a(get_tris_a() | 0x3); 
4875
....................    set_tris_a(get_tris_a() | 0x3); 
4876
....................   #else 
4876
....................   #else 
4877
....................    set_tris_c(get_tris_c() | 0x30); 
4877
....................    set_tris_c(get_tris_c() | 0x30); 
4878
12FC:  MOVF   F94,W
4878
12FC:  MOVF   F94,W
4879
12FE:  IORLW  30
4879
12FE:  IORLW  30
4880
1300:  MOVLB  6
4880
1300:  MOVLB  6
4881
1302:  MOVWF  F94
4881
1302:  MOVWF  F94
4882
....................   #endif 
4882
....................   #endif 
4883
....................    
4883
....................    
4884
....................    usb_state = USB_STATE_DETACHED; 
4884
....................    usb_state = USB_STATE_DETACHED; 
4885
1304:  CLRF   24
4885
1304:  CLRF   24
4886
1306:  CLRF   18
4886
1306:  CLRF   18
4887
1308:  BTFSC  FF2.7
4887
1308:  BTFSC  FF2.7
4888
130A:  BSF    18.7
4888
130A:  BSF    18.7
4889
130C:  BCF    FF2.7
4889
130C:  BCF    FF2.7
4890
....................     
4890
....................     
4891
....................    usb_token_reset();              //clear the chapter9 stack 
4891
....................    usb_token_reset();              //clear the chapter9 stack 
4892
130E:  MOVLB  0
4892
130E:  MOVLB  0
4893
1310:  CALL   037E
4893
1310:  CALL   037E
4894
1314:  BTFSC  18.7
4894
1314:  BTFSC  18.7
4895
1316:  BSF    FF2.7
4895
1316:  BSF    FF2.7
4896
....................    //__usb_kbhit_status=0; 
4896
....................    //__usb_kbhit_status=0; 
4897
.................... } 
4897
.................... } 
4898
1318:  GOTO   131E (RETURN)
4898
1318:  GOTO   131E (RETURN)
4899
....................  
4899
....................  
4900
.................... // see usb_hw_layer.h for documentation 
4900
.................... // see usb_hw_layer.h for documentation 
4901
.................... void usb_attach(void)  
4901
.................... void usb_attach(void)  
4902
.................... { 
4902
.................... { 
4903
*
4903
*
4904
1322:  CLRF   18
4904
1322:  CLRF   18
4905
1324:  BTFSC  FF2.7
4905
1324:  BTFSC  FF2.7
4906
1326:  BSF    18.7
4906
1326:  BSF    18.7
4907
1328:  BCF    FF2.7
4907
1328:  BCF    FF2.7
4908
....................    usb_token_reset(); 
4908
....................    usb_token_reset(); 
4909
132A:  CALL   037E
4909
132A:  CALL   037E
4910
132E:  BTFSC  18.7
4910
132E:  BTFSC  18.7
4911
1330:  BSF    FF2.7
4911
1330:  BSF    FF2.7
4912
....................    UCON = 0; 
4912
....................    UCON = 0; 
4913
1332:  CLRF   F6D
4913
1332:  CLRF   F6D
4914
....................    UCFG = __UCFG_VAL_ENABLED__; 
4914
....................    UCFG = __UCFG_VAL_ENABLED__; 
4915
1334:  MOVLW  14
4915
1334:  MOVLW  14
4916
1336:  MOVWF  F6F
4916
1336:  MOVWF  F6F
4917
....................    UIE = 0;                                // Mask all USB interrupts 
4917
....................    UIE = 0;                                // Mask all USB interrupts 
4918
1338:  CLRF   F69
4918
1338:  CLRF   F69
4919
....................    UCON_USBEN = 1;                     // Enable module & attach to bus 
4919
....................    UCON_USBEN = 1;                     // Enable module & attach to bus 
4920
133A:  BSF    F6D.3
4920
133A:  BSF    F6D.3
4921
....................    usb_state = USB_STATE_ATTACHED;      // Defined in usbmmap.c & .h 
4921
....................    usb_state = USB_STATE_ATTACHED;      // Defined in usbmmap.c & .h 
4922
133C:  MOVLW  01
4922
133C:  MOVLW  01
4923
133E:  MOVWF  24
4923
133E:  MOVWF  24
4924
.................... } 
4924
.................... } 
4925
1340:  GOTO   134A (RETURN)
4925
1340:  GOTO   134A (RETURN)
4926
....................  
4926
....................  
4927
.................... // see usb_hw_layer.h for documentation 
4927
.................... // see usb_hw_layer.h for documentation 
4928
.................... void usb_init_cs(void) 
4928
.................... void usb_init_cs(void) 
4929
.................... { 
4929
.................... { 
4930
....................    usb_detach(); 
4930
....................    usb_detach(); 
4931
*
4931
*
4932
131C:  BRA    12F4
4932
131C:  BRA    12F4
4933
.................... } 
4933
.................... } 
4934
131E:  GOTO   136A (RETURN)
4934
131E:  GOTO   136A (RETURN)
4935
....................  
4935
....................  
4936
.................... // see usb_hw_layer.h for documentation 
4936
.................... // see usb_hw_layer.h for documentation 
4937
.................... void usb_task(void)  
4937
.................... void usb_task(void)  
4938
.................... { 
4938
.................... { 
4939
....................    if (usb_attached())  
4939
....................    if (usb_attached())  
4940
....................    { 
4940
....................    { 
4941
....................       if (UCON_USBEN==0)  
4941
....................       if (UCON_USBEN==0)  
4942
*
4942
*
4943
1344:  BTFSC  F6D.3
4943
1344:  BTFSC  F6D.3
4944
1346:  BRA    134A
4944
1346:  BRA    134A
4945
....................       { 
4945
....................       { 
4946
....................          debug_usb(debug_putc, "\r\n\nUSB TASK: ATTACH"); 
4946
....................          debug_usb(debug_putc, "\r\n\nUSB TASK: ATTACH"); 
4947
....................          usb_attach(); 
4947
....................          usb_attach(); 
4948
1348:  BRA    1322
4948
1348:  BRA    1322
4949
....................       } 
4949
....................       } 
4950
....................    } 
4950
....................    } 
4951
....................    else  
4951
....................    else  
4952
....................    { 
4952
....................    { 
4953
....................       if (UCON_USBEN==1)   
4953
....................       if (UCON_USBEN==1)   
4954
....................       { 
4954
....................       { 
4955
....................          debug_usb(debug_putc, "\r\n\nUSB TASK: DE-ATTACH"); 
4955
....................          debug_usb(debug_putc, "\r\n\nUSB TASK: DE-ATTACH"); 
4956
....................          usb_detach(); 
4956
....................          usb_detach(); 
4957
....................       } 
4957
....................       } 
4958
....................    } 
4958
....................    } 
4959
....................  
4959
....................  
4960
....................    if ((usb_state == USB_STATE_ATTACHED)&&(!UCON_SE0))  
4960
....................    if ((usb_state == USB_STATE_ATTACHED)&&(!UCON_SE0))  
4961
134A:  DECFSZ 24,W
4961
134A:  DECFSZ 24,W
4962
134C:  BRA    1364
4962
134C:  BRA    1364
4963
134E:  BTFSC  F6D.5
4963
134E:  BTFSC  F6D.5
4964
1350:  BRA    1364
4964
1350:  BRA    1364
4965
....................    { 
4965
....................    { 
4966
....................       UIR=0; 
4966
....................       UIR=0; 
4967
1352:  CLRF   F68
4967
1352:  CLRF   F68
4968
....................       UIE=0; 
4968
....................       UIE=0; 
4969
1354:  CLRF   F69
4969
1354:  CLRF   F69
4970
....................       enable_interrupts(INT_USB); 
4970
....................       enable_interrupts(INT_USB); 
4971
1356:  BSF    FA0.5
4971
1356:  BSF    FA0.5
4972
....................       enable_interrupts(GLOBAL); 
4972
....................       enable_interrupts(GLOBAL); 
4973
1358:  MOVLW  C0
4973
1358:  MOVLW  C0
4974
135A:  IORWF  FF2,F
4974
135A:  IORWF  FF2,F
4975
....................       UIE=__USB_UIF_IDLE | __USB_UIF_RESET;  //enable IDLE and RESET USB ISR 
4975
....................       UIE=__USB_UIF_IDLE | __USB_UIF_RESET;  //enable IDLE and RESET USB ISR 
4976
135C:  MOVLW  11
4976
135C:  MOVLW  11
4977
135E:  MOVWF  F69
4977
135E:  MOVWF  F69
4978
....................       usb_state=USB_STATE_POWERED; 
4978
....................       usb_state=USB_STATE_POWERED; 
4979
1360:  MOVLW  02
4979
1360:  MOVLW  02
4980
1362:  MOVWF  24
4980
1362:  MOVWF  24
4981
....................       debug_usb(debug_putc, "\r\n\nUSB TASK: POWERED"); 
4981
....................       debug_usb(debug_putc, "\r\n\nUSB TASK: POWERED"); 
4982
....................    } 
4982
....................    } 
4983
.................... } 
4983
.................... } 
4984
1364:  GOTO   136C (RETURN)
4984
1364:  GOTO   136C (RETURN)
4985
....................  
4985
....................  
4986
.................... // see usb_hw_layer.h for documentation 
4986
.................... // see usb_hw_layer.h for documentation 
4987
.................... void usb_init(void)  
4987
.................... void usb_init(void)  
4988
.................... { 
4988
.................... { 
4989
....................    usb_init_cs(); 
4989
....................    usb_init_cs(); 
4990
1368:  BRA    131C
4990
1368:  BRA    131C
4991
....................  
4991
....................  
4992
....................    do  
4992
....................    do  
4993
....................    { 
4993
....................    { 
4994
....................       usb_task(); 
4994
....................       usb_task(); 
4995
136A:  BRA    1344
4995
136A:  BRA    1344
4996
....................    } while (usb_state != USB_STATE_POWERED); 
4996
....................    } while (usb_state != USB_STATE_POWERED); 
4997
136C:  MOVF   24,W
4997
136C:  MOVF   24,W
4998
136E:  SUBLW  02
4998
136E:  SUBLW  02
4999
1370:  BNZ   136A
4999
1370:  BNZ   136A
5000
.................... } 
5000
.................... } 
5001
1372:  GOTO   1FE4 (RETURN)
5001
1372:  GOTO   1FE4 (RETURN)
5002
....................  
5002
....................  
5003
....................  
5003
....................  
5004
.................... // see pic18_usb.h for documentation 
5004
.................... // see pic18_usb.h for documentation 
5005
.................... int1 usb_flush_in(int8 endpoint, int16 len, USB_DTS_BIT tgl)  
5005
.................... int1 usb_flush_in(int8 endpoint, int16 len, USB_DTS_BIT tgl)  
5006
.................... { 
5006
.................... { 
5007
....................    int8 i; 
5007
....................    int8 i; 
5008
....................  
5008
....................  
5009
....................    debug_usb(debug_putc,"\r\nPUT %X %U %LU",endpoint, tgl, len); 
5009
....................    debug_usb(debug_putc,"\r\nPUT %X %U %LU",endpoint, tgl, len); 
5010
....................  
5010
....................  
5011
....................    if (usb_tbe(endpoint))  
5011
....................    if (usb_tbe(endpoint))  
5012
*
5012
*
5013
0D5C:  MOVFF  742,747
5013
0D5C:  MOVFF  742,747
5014
0D60:  RCALL  0D06
5014
0D60:  RCALL  0D06
5015
0D62:  MOVF   01,F
5015
0D62:  MOVF   01,F
5016
0D64:  BTFSC  FD8.2
5016
0D64:  BTFSC  FD8.2
5017
0D66:  BRA    0E74
5017
0D66:  BRA    0E74
5018
....................    { 
5018
....................    { 
5019
....................       EP_BDxCNT_I(endpoint)=len; 
5019
....................       EP_BDxCNT_I(endpoint)=len; 
5020
0D68:  MOVLB  7
5020
0D68:  MOVLB  7
5021
0D6A:  CLRF   x49
5021
0D6A:  CLRF   x49
5022
0D6C:  MOVFF  742,748
5022
0D6C:  MOVFF  742,748
5023
0D70:  CLRF   x4B
5023
0D70:  CLRF   x4B
5024
0D72:  MOVLW  08
5024
0D72:  MOVLW  08
5025
0D74:  MOVWF  x4A
5025
0D74:  MOVWF  x4A
5026
0D76:  MOVLB  0
5026
0D76:  MOVLB  0
5027
0D78:  CALL   02BA
5027
0D78:  CALL   02BA
5028
0D7C:  MOVFF  02,748
5028
0D7C:  MOVFF  02,748
5029
0D80:  MOVFF  01,747
5029
0D80:  MOVFF  01,747
5030
0D84:  MOVLW  04
5030
0D84:  MOVLW  04
5031
0D86:  MOVLB  7
5031
0D86:  MOVLB  7
5032
0D88:  ADDWF  x47,F
5032
0D88:  ADDWF  x47,F
5033
0D8A:  MOVLW  00
5033
0D8A:  MOVLW  00
5034
0D8C:  ADDWFC x48,F
5034
0D8C:  ADDWFC x48,F
5035
0D8E:  MOVLW  01
5035
0D8E:  MOVLW  01
5036
0D90:  ADDWF  x47,W
5036
0D90:  ADDWF  x47,W
5037
0D92:  MOVWF  01
5037
0D92:  MOVWF  01
5038
0D94:  MOVLW  00
5038
0D94:  MOVLW  00
5039
0D96:  ADDWFC x48,W
5039
0D96:  ADDWFC x48,W
5040
0D98:  MOVWF  03
5040
0D98:  MOVWF  03
5041
0D9A:  MOVFF  01,FE9
5041
0D9A:  MOVFF  01,FE9
5042
0D9E:  MOVLW  04
5042
0D9E:  MOVLW  04
5043
0DA0:  ADDWF  03,W
5043
0DA0:  ADDWF  03,W
5044
0DA2:  MOVWF  FEA
5044
0DA2:  MOVWF  FEA
5045
0DA4:  MOVFF  743,FEF
5045
0DA4:  MOVFF  743,FEF
5046
....................  
5046
....................  
5047
....................       debug_display_ram(len, EP_BDxADR_I(endpoint)); 
5047
....................       debug_display_ram(len, EP_BDxADR_I(endpoint)); 
5048
....................  
5048
....................  
5049
....................      #if USB_IGNORE_TX_DTS 
5049
....................      #if USB_IGNORE_TX_DTS 
5050
....................       i=0x80; 
5050
....................       i=0x80; 
5051
....................      #else 
5051
....................      #else 
5052
....................       if (tgl == USB_DTS_TOGGLE)  
5052
....................       if (tgl == USB_DTS_TOGGLE)  
5053
0DA8:  MOVF   x45,W
5053
0DA8:  MOVF   x45,W
5054
0DAA:  SUBLW  02
5054
0DAA:  SUBLW  02
5055
0DAC:  BNZ   0DEE
5055
0DAC:  BNZ   0DEE
5056
....................       { 
5056
....................       { 
5057
....................          i = EP_BDxST_I(endpoint); 
5057
....................          i = EP_BDxST_I(endpoint); 
5058
0DAE:  CLRF   x49
5058
0DAE:  CLRF   x49
5059
0DB0:  MOVFF  742,748
5059
0DB0:  MOVFF  742,748
5060
0DB4:  CLRF   x4B
5060
0DB4:  CLRF   x4B
5061
0DB6:  MOVLW  08
5061
0DB6:  MOVLW  08
5062
0DB8:  MOVWF  x4A
5062
0DB8:  MOVWF  x4A
5063
0DBA:  MOVLB  0
5063
0DBA:  MOVLB  0
5064
0DBC:  CALL   02BA
5064
0DBC:  CALL   02BA
5065
0DC0:  MOVFF  02,748
5065
0DC0:  MOVFF  02,748
5066
0DC4:  MOVFF  01,747
5066
0DC4:  MOVFF  01,747
5067
0DC8:  MOVLW  04
5067
0DC8:  MOVLW  04
5068
0DCA:  MOVLB  7
5068
0DCA:  MOVLB  7
5069
0DCC:  ADDWF  x47,F
5069
0DCC:  ADDWF  x47,F
5070
0DCE:  MOVLW  00
5070
0DCE:  MOVLW  00
5071
0DD0:  ADDWFC x48,F
5071
0DD0:  ADDWFC x48,F
5072
0DD2:  MOVFF  747,FE9
5072
0DD2:  MOVFF  747,FE9
5073
0DD6:  MOVLW  04
5073
0DD6:  MOVLW  04
5074
0DD8:  ADDWF  x48,W
5074
0DD8:  ADDWF  x48,W
5075
0DDA:  MOVWF  FEA
5075
0DDA:  MOVWF  FEA
5076
0DDC:  MOVFF  FEF,746
5076
0DDC:  MOVFF  FEF,746
5077
....................          if (bit_test(i,6)) 
5077
....................          if (bit_test(i,6)) 
5078
0DE0:  BTFSS  x46.6
5078
0DE0:  BTFSS  x46.6
5079
0DE2:  BRA    0DE8
5079
0DE2:  BRA    0DE8
5080
....................             tgl = USB_DTS_DATA0;  //was DATA1, goto DATA0 
5080
....................             tgl = USB_DTS_DATA0;  //was DATA1, goto DATA0 
5081
0DE4:  CLRF   x45
5081
0DE4:  CLRF   x45
5082
....................          else 
5082
....................          else 
5083
0DE6:  BRA    0DEC
5083
0DE6:  BRA    0DEC
5084
....................             tgl = USB_DTS_DATA1;  //was DATA0, goto DATA1 
5084
....................             tgl = USB_DTS_DATA1;  //was DATA0, goto DATA1 
5085
0DE8:  MOVLW  01
5085
0DE8:  MOVLW  01
5086
0DEA:  MOVWF  x45
5086
0DEA:  MOVWF  x45
5087
....................       } 
5087
....................       } 
5088
....................       else if (tgl == USB_DTS_USERX)  
5088
....................       else if (tgl == USB_DTS_USERX)  
5089
0DEC:  BRA    0E22
5089
0DEC:  BRA    0E22
5090
0DEE:  MOVF   x45,W
5090
0DEE:  MOVF   x45,W
5091
0DF0:  SUBLW  04
5091
0DF0:  SUBLW  04
5092
0DF2:  BNZ   0E22
5092
0DF2:  BNZ   0E22
5093
....................       { 
5093
....................       { 
5094
....................          i = EP_BDxST_O(endpoint); 
5094
....................          i = EP_BDxST_O(endpoint); 
5095
0DF4:  CLRF   x49
5095
0DF4:  CLRF   x49
5096
0DF6:  MOVFF  742,748
5096
0DF6:  MOVFF  742,748
5097
0DFA:  CLRF   x4B
5097
0DFA:  CLRF   x4B
5098
0DFC:  MOVLW  08
5098
0DFC:  MOVLW  08
5099
0DFE:  MOVWF  x4A
5099
0DFE:  MOVWF  x4A
5100
0E00:  MOVLB  0
5100
0E00:  MOVLB  0
5101
0E02:  CALL   02BA
5101
0E02:  CALL   02BA
5102
0E06:  MOVLB  7
5102
0E06:  MOVLB  7
5103
0E08:  MOVFF  01,FE9
5103
0E08:  MOVFF  01,FE9
5104
0E0C:  MOVLW  04
5104
0E0C:  MOVLW  04
5105
0E0E:  ADDWF  02,W
5105
0E0E:  ADDWF  02,W
5106
0E10:  MOVWF  FEA
5106
0E10:  MOVWF  FEA
5107
0E12:  MOVFF  FEF,746
5107
0E12:  MOVFF  FEF,746
5108
....................          if (bit_test(i,6)) 
5108
....................          if (bit_test(i,6)) 
5109
0E16:  BTFSS  x46.6
5109
0E16:  BTFSS  x46.6
5110
0E18:  BRA    0E20
5110
0E18:  BRA    0E20
5111
....................             tgl = USB_DTS_DATA1; 
5111
....................             tgl = USB_DTS_DATA1; 
5112
0E1A:  MOVLW  01
5112
0E1A:  MOVLW  01
5113
0E1C:  MOVWF  x45
5113
0E1C:  MOVWF  x45
5114
....................          else 
5114
....................          else 
5115
0E1E:  BRA    0E22
5115
0E1E:  BRA    0E22
5116
....................             tgl = USB_DTS_DATA0; 
5116
....................             tgl = USB_DTS_DATA0; 
5117
0E20:  CLRF   x45
5117
0E20:  CLRF   x45
5118
....................       } 
5118
....................       } 
5119
....................       if (tgl == USB_DTS_DATA1)  
5119
....................       if (tgl == USB_DTS_DATA1)  
5120
0E22:  DECFSZ x45,W
5120
0E22:  DECFSZ x45,W
5121
0E24:  BRA    0E2C
5121
0E24:  BRA    0E2C
5122
....................          i=0xC8;  //DATA1, UOWN 
5122
....................          i=0xC8;  //DATA1, UOWN 
5123
0E26:  MOVLW  C8
5123
0E26:  MOVLW  C8
5124
0E28:  MOVWF  x46
5124
0E28:  MOVWF  x46
5125
....................       else //if (tgl == USB_DTS_DATA0)  
5125
....................       else //if (tgl == USB_DTS_DATA0)  
5126
0E2A:  BRA    0E30
5126
0E2A:  BRA    0E30
5127
....................          i=0x88; //DATA0, UOWN 
5127
....................          i=0x88; //DATA0, UOWN 
5128
0E2C:  MOVLW  88
5128
0E2C:  MOVLW  88
5129
0E2E:  MOVWF  x46
5129
0E2E:  MOVWF  x46
5130
....................      #endif 
5130
....................      #endif 
5131
....................  
5131
....................  
5132
....................       //set BC8 and BC9 
5132
....................       //set BC8 and BC9 
5133
....................       if (bit_test(len,8)) {bit_set(i,0);} 
5133
....................       if (bit_test(len,8)) {bit_set(i,0);} 
5134
0E30:  BTFSC  x44.0
5134
0E30:  BTFSC  x44.0
5135
0E32:  BSF    x46.0
5135
0E32:  BSF    x46.0
5136
....................       if (bit_test(len,9)) {bit_set(i,1);} 
5136
....................       if (bit_test(len,9)) {bit_set(i,1);} 
5137
0E34:  BTFSC  x44.1
5137
0E34:  BTFSC  x44.1
5138
0E36:  BSF    x46.1
5138
0E36:  BSF    x46.1
5139
....................  
5139
....................  
5140
....................       debug_usb(debug_putc, " %X", i); 
5140
....................       debug_usb(debug_putc, " %X", i); 
5141
....................  
5141
....................  
5142
....................       EP_BDxST_I(endpoint) = i;//save changes 
5142
....................       EP_BDxST_I(endpoint) = i;//save changes 
5143
0E38:  CLRF   x49
5143
0E38:  CLRF   x49
5144
0E3A:  MOVFF  742,748
5144
0E3A:  MOVFF  742,748
5145
0E3E:  CLRF   x4B
5145
0E3E:  CLRF   x4B
5146
0E40:  MOVLW  08
5146
0E40:  MOVLW  08
5147
0E42:  MOVWF  x4A
5147
0E42:  MOVWF  x4A
5148
0E44:  MOVLB  0
5148
0E44:  MOVLB  0
5149
0E46:  CALL   02BA
5149
0E46:  CALL   02BA
5150
0E4A:  MOVFF  02,748
5150
0E4A:  MOVFF  02,748
5151
0E4E:  MOVFF  01,747
5151
0E4E:  MOVFF  01,747
5152
0E52:  MOVLW  04
5152
0E52:  MOVLW  04
5153
0E54:  MOVLB  7
5153
0E54:  MOVLB  7
5154
0E56:  ADDWF  x47,F
5154
0E56:  ADDWF  x47,F
5155
0E58:  MOVLW  00
5155
0E58:  MOVLW  00
5156
0E5A:  ADDWFC x48,F
5156
0E5A:  ADDWFC x48,F
5157
0E5C:  MOVFF  747,FE9
5157
0E5C:  MOVFF  747,FE9
5158
0E60:  MOVLW  04
5158
0E60:  MOVLW  04
5159
0E62:  ADDWF  x48,W
5159
0E62:  ADDWF  x48,W
5160
0E64:  MOVWF  FEA
5160
0E64:  MOVWF  FEA
5161
0E66:  MOVFF  746,FEF
5161
0E66:  MOVFF  746,FEF
5162
....................        
5162
....................        
5163
....................       //putc('!'); 
5163
....................       //putc('!'); 
5164
....................        
5164
....................        
5165
....................       return(1); 
5165
....................       return(1); 
5166
0E6A:  MOVLW  01
5166
0E6A:  MOVLW  01
5167
0E6C:  MOVWF  01
5167
0E6C:  MOVWF  01
5168
0E6E:  BRA    0E7A
5168
0E6E:  BRA    0E7A
5169
....................    } 
5169
....................    } 
5170
....................    else  
5170
....................    else  
5171
0E70:  BRA    0E72
5171
0E70:  BRA    0E72
5172
0E72:  MOVLB  0
5172
0E72:  MOVLB  0
5173
....................    { 
5173
....................    { 
5174
....................       //putc('_'); 
5174
....................       //putc('_'); 
5175
....................       debug_usb(debug_putc,"\r\nPUT ERR"); 
5175
....................       debug_usb(debug_putc,"\r\nPUT ERR"); 
5176
....................    } 
5176
....................    } 
5177
....................    return(0); 
5177
....................    return(0); 
5178
0E74:  MOVLW  00
5178
0E74:  MOVLW  00
5179
0E76:  MOVWF  01
5179
0E76:  MOVWF  01
5180
0E78:  MOVLB  7
5180
0E78:  MOVLB  7
5181
.................... } 
5181
.................... } 
5182
0E7A:  MOVLB  0
5182
0E7A:  MOVLB  0
5183
0E7C:  RETLW  00
5183
0E7C:  RETLW  00
5184
....................  
5184
....................  
5185
.................... // see usb_hw_layer.h for documentation 
5185
.................... // see usb_hw_layer.h for documentation 
5186
.................... int1 usb_put_packet(int8 endpoint, int8 * ptr, int16 len, USB_DTS_BIT tgl)  
5186
.................... int1 usb_put_packet(int8 endpoint, int8 * ptr, int16 len, USB_DTS_BIT tgl)  
5187
.................... { 
5187
.................... { 
5188
....................    int8 * buff_add;     
5188
....................    int8 * buff_add;     
5189
....................  
5189
....................  
5190
....................    if (usb_tbe(endpoint))  
5190
....................    if (usb_tbe(endpoint))  
5191
*
5191
*
5192
0F88:  MOVFF  73A,747
5192
0F88:  MOVFF  73A,747
5193
0F8C:  RCALL  0D06
5193
0F8C:  RCALL  0D06
5194
0F8E:  MOVF   01,F
5194
0F8E:  MOVF   01,F
5195
0F90:  BZ    1026
5195
0F90:  BZ    1026
5196
....................    { 
5196
....................    { 
5197
....................       buff_add = EP_BDxADR_I(endpoint); 
5197
....................       buff_add = EP_BDxADR_I(endpoint); 
5198
0F92:  MOVLB  7
5198
0F92:  MOVLB  7
5199
0F94:  CLRF   x49
5199
0F94:  CLRF   x49
5200
0F96:  MOVFF  73A,748
5200
0F96:  MOVFF  73A,748
5201
0F9A:  CLRF   x4B
5201
0F9A:  CLRF   x4B
5202
0F9C:  MOVLW  08
5202
0F9C:  MOVLW  08
5203
0F9E:  MOVWF  x4A
5203
0F9E:  MOVWF  x4A
5204
0FA0:  MOVLB  0
5204
0FA0:  MOVLB  0
5205
0FA2:  CALL   02BA
5205
0FA2:  CALL   02BA
5206
0FA6:  MOVFF  02,743
5206
0FA6:  MOVFF  02,743
5207
0FAA:  MOVFF  01,742
5207
0FAA:  MOVFF  01,742
5208
0FAE:  MOVLW  04
5208
0FAE:  MOVLW  04
5209
0FB0:  MOVLB  7
5209
0FB0:  MOVLB  7
5210
0FB2:  ADDWF  x42,F
5210
0FB2:  ADDWF  x42,F
5211
0FB4:  MOVLW  00
5211
0FB4:  MOVLW  00
5212
0FB6:  ADDWFC x43,F
5212
0FB6:  ADDWFC x43,F
5213
0FB8:  MOVLW  02
5213
0FB8:  MOVLW  02
5214
0FBA:  ADDWF  x42,W
5214
0FBA:  ADDWF  x42,W
5215
0FBC:  MOVWF  01
5215
0FBC:  MOVWF  01
5216
0FBE:  MOVLW  00
5216
0FBE:  MOVLW  00
5217
0FC0:  ADDWFC x43,W
5217
0FC0:  ADDWFC x43,W
5218
0FC2:  MOVWF  03
5218
0FC2:  MOVWF  03
5219
0FC4:  MOVFF  01,FE9
5219
0FC4:  MOVFF  01,FE9
5220
0FC8:  MOVLW  04
5220
0FC8:  MOVLW  04
5221
0FCA:  ADDWF  03,W
5221
0FCA:  ADDWF  03,W
5222
0FCC:  MOVWF  FEA
5222
0FCC:  MOVWF  FEA
5223
0FCE:  MOVFF  FEC,03
5223
0FCE:  MOVFF  FEC,03
5224
0FD2:  MOVF   FED,F
5224
0FD2:  MOVF   FED,F
5225
0FD4:  MOVFF  FEF,740
5225
0FD4:  MOVFF  FEF,740
5226
0FD8:  MOVFF  03,741
5226
0FD8:  MOVFF  03,741
5227
....................       memcpy(buff_add, ptr, len);      
5227
....................       memcpy(buff_add, ptr, len);      
5228
0FDC:  MOVFF  741,FEA
5228
0FDC:  MOVFF  741,FEA
5229
0FE0:  MOVFF  740,FE9
5229
0FE0:  MOVFF  740,FE9
5230
0FE4:  MOVFF  73C,FE2
5230
0FE4:  MOVFF  73C,FE2
5231
0FE8:  MOVFF  73B,FE1
5231
0FE8:  MOVFF  73B,FE1
5232
0FEC:  MOVFF  73E,02
5232
0FEC:  MOVFF  73E,02
5233
0FF0:  MOVFF  73D,01
5233
0FF0:  MOVFF  73D,01
5234
0FF4:  MOVF   01,F
5234
0FF4:  MOVF   01,F
5235
0FF6:  BZ    0FFC
5235
0FF6:  BZ    0FFC
5236
0FF8:  INCF   02,F
5236
0FF8:  INCF   02,F
5237
0FFA:  BRA    1000
5237
0FFA:  BRA    1000
5238
0FFC:  MOVF   02,F
5238
0FFC:  MOVF   02,F
5239
0FFE:  BZ    100C
5239
0FFE:  BZ    100C
5240
1000:  MOVFF  FE6,FEE
5240
1000:  MOVFF  FE6,FEE
5241
1004:  DECFSZ 01,F
5241
1004:  DECFSZ 01,F
5242
1006:  BRA    1000
5242
1006:  BRA    1000
5243
1008:  DECFSZ 02,F
5243
1008:  DECFSZ 02,F
5244
100A:  BRA    1000
5244
100A:  BRA    1000
5245
....................        
5245
....................        
5246
....................       return(usb_flush_in(endpoint, len, tgl)); 
5246
....................       return(usb_flush_in(endpoint, len, tgl)); 
5247
100C:  MOVFF  73A,742
5247
100C:  MOVFF  73A,742
5248
1010:  MOVFF  73E,744
5248
1010:  MOVFF  73E,744
5249
1014:  MOVFF  73D,743
5249
1014:  MOVFF  73D,743
5250
1018:  MOVFF  73F,745
5250
1018:  MOVFF  73F,745
5251
101C:  MOVLB  0
5251
101C:  MOVLB  0
5252
101E:  RCALL  0D5C
5252
101E:  RCALL  0D5C
5253
1020:  MOVF   01,W
5253
1020:  MOVF   01,W
5254
1022:  BRA    102A
5254
1022:  BRA    102A
5255
....................    } 
5255
....................    } 
5256
....................    else  
5256
....................    else  
5257
1024:  BRA    1026
5257
1024:  BRA    1026
5258
....................    { 
5258
....................    { 
5259
....................       //putc('-'); 
5259
....................       //putc('-'); 
5260
....................       //printf("%X", EP_BDxST_I(endpoint)); 
5260
....................       //printf("%X", EP_BDxST_I(endpoint)); 
5261
....................       debug_usb(debug_putc,"\r\nPUT ERR"); 
5261
....................       debug_usb(debug_putc,"\r\nPUT ERR"); 
5262
....................    } 
5262
....................    } 
5263
....................  
5263
....................  
5264
....................    return(0); 
5264
....................    return(0); 
5265
1026:  MOVLW  00
5265
1026:  MOVLW  00
5266
1028:  MOVWF  01
5266
1028:  MOVWF  01
5267
.................... } 
5267
.................... } 
5268
102A:  RETLW  00
5268
102A:  RETLW  00
5269
....................  
5269
....................  
5270
.................... // see pic18_usb.h for documentation 
5270
.................... // see pic18_usb.h for documentation 
5271
.................... void usb_flush_out(int8 endpoint, USB_DTS_BIT tgl)  
5271
.................... void usb_flush_out(int8 endpoint, USB_DTS_BIT tgl)  
5272
.................... { 
5272
.................... { 
5273
....................    int8 i; 
5273
....................    int8 i; 
5274
....................    int16 len; 
5274
....................    int16 len; 
5275
....................  
5275
....................  
5276
....................   #if USB_IGNORE_RX_DTS 
5276
....................   #if USB_IGNORE_RX_DTS 
5277
....................    if (tgl == USB_DTS_STALL)  
5277
....................    if (tgl == USB_DTS_STALL)  
5278
....................    { 
5278
....................    { 
5279
....................       debug_usb(debug_putc, '*'); 
5279
....................       debug_usb(debug_putc, '*'); 
5280
....................       EP_BDxCNT_O(endpoint) = 0x84; 
5280
....................       EP_BDxCNT_O(endpoint) = 0x84; 
5281
....................       EP_BDxST_I(endpoint) = 0x84; 
5281
....................       EP_BDxST_I(endpoint) = 0x84; 
5282
....................       return; 
5282
....................       return; 
5283
....................    } 
5283
....................    } 
5284
....................    else 
5284
....................    else 
5285
....................       i=0x80; 
5285
....................       i=0x80; 
5286
....................   #else 
5286
....................   #else 
5287
....................    i = EP_BDxST_O(endpoint); 
5287
....................    i = EP_BDxST_O(endpoint); 
5288
*
5288
*
5289
0BEA:  MOVLB  7
5289
0BEA:  MOVLB  7
5290
0BEC:  CLRF   x49
5290
0BEC:  CLRF   x49
5291
0BEE:  MOVFF  6FD,748
5291
0BEE:  MOVFF  6FD,748
5292
0BF2:  CLRF   x4B
5292
0BF2:  CLRF   x4B
5293
0BF4:  MOVLW  08
5293
0BF4:  MOVLW  08
5294
0BF6:  MOVWF  x4A
5294
0BF6:  MOVWF  x4A
5295
0BF8:  MOVLB  0
5295
0BF8:  MOVLB  0
5296
0BFA:  CALL   02BA
5296
0BFA:  CALL   02BA
5297
0BFE:  MOVLB  7
5297
0BFE:  MOVLB  7
5298
0C00:  MOVFF  01,FE9
5298
0C00:  MOVFF  01,FE9
5299
0C04:  MOVLW  04
5299
0C04:  MOVLW  04
5300
0C06:  ADDWF  02,W
5300
0C06:  ADDWF  02,W
5301
0C08:  MOVWF  FEA
5301
0C08:  MOVWF  FEA
5302
0C0A:  MOVFF  FEF,6FF
5302
0C0A:  MOVFF  FEF,6FF
5303
0C0E:  MOVLB  6
5303
0C0E:  MOVLB  6
5304
....................    if (tgl == USB_DTS_TOGGLE)  
5304
....................    if (tgl == USB_DTS_TOGGLE)  
5305
0C10:  MOVF   xFE,W
5305
0C10:  MOVF   xFE,W
5306
0C12:  SUBLW  02
5306
0C12:  SUBLW  02
5307
0C14:  BNZ   0C22
5307
0C14:  BNZ   0C22
5308
....................    { 
5308
....................    { 
5309
....................       if (bit_test(i,6)) 
5309
....................       if (bit_test(i,6)) 
5310
0C16:  BTFSS  xFF.6
5310
0C16:  BTFSS  xFF.6
5311
0C18:  BRA    0C1E
5311
0C18:  BRA    0C1E
5312
....................          tgl = USB_DTS_DATA0;  //was DATA1, goto DATA0 
5312
....................          tgl = USB_DTS_DATA0;  //was DATA1, goto DATA0 
5313
0C1A:  CLRF   xFE
5313
0C1A:  CLRF   xFE
5314
....................       else 
5314
....................       else 
5315
0C1C:  BRA    0C22
5315
0C1C:  BRA    0C22
5316
....................          tgl = USB_DTS_DATA1;  //was DATA0, goto DATA1 
5316
....................          tgl = USB_DTS_DATA1;  //was DATA0, goto DATA1 
5317
0C1E:  MOVLW  01
5317
0C1E:  MOVLW  01
5318
0C20:  MOVWF  xFE
5318
0C20:  MOVWF  xFE
5319
....................    } 
5319
....................    } 
5320
....................    if (tgl == USB_DTS_STALL)  
5320
....................    if (tgl == USB_DTS_STALL)  
5321
0C22:  MOVF   xFE,W
5321
0C22:  MOVF   xFE,W
5322
0C24:  SUBLW  03
5322
0C24:  SUBLW  03
5323
0C26:  BNZ   0C64
5323
0C26:  BNZ   0C64
5324
....................    { 
5324
....................    { 
5325
....................       i = 0x84; 
5325
....................       i = 0x84; 
5326
0C28:  MOVLW  84
5326
0C28:  MOVLW  84
5327
0C2A:  MOVWF  xFF
5327
0C2A:  MOVWF  xFF
5328
....................       EP_BDxST_I(endpoint) = 0x84; //stall both in and out endpoints 
5328
....................       EP_BDxST_I(endpoint) = 0x84; //stall both in and out endpoints 
5329
0C2C:  MOVLB  7
5329
0C2C:  MOVLB  7
5330
0C2E:  CLRF   x49
5330
0C2E:  CLRF   x49
5331
0C30:  MOVFF  6FD,748
5331
0C30:  MOVFF  6FD,748
5332
0C34:  CLRF   x4B
5332
0C34:  CLRF   x4B
5333
0C36:  MOVLW  08
5333
0C36:  MOVLW  08
5334
0C38:  MOVWF  x4A
5334
0C38:  MOVWF  x4A
5335
0C3A:  MOVLB  0
5335
0C3A:  MOVLB  0
5336
0C3C:  CALL   02BA
5336
0C3C:  CALL   02BA
5337
0C40:  MOVFF  02,703
5337
0C40:  MOVFF  02,703
5338
0C44:  MOVFF  01,702
5338
0C44:  MOVFF  01,702
5339
0C48:  MOVLW  04
5339
0C48:  MOVLW  04
5340
0C4A:  MOVLB  7
5340
0C4A:  MOVLB  7
5341
0C4C:  ADDWF  x02,F
5341
0C4C:  ADDWF  x02,F
5342
0C4E:  MOVLW  00
5342
0C4E:  MOVLW  00
5343
0C50:  ADDWFC x03,F
5343
0C50:  ADDWFC x03,F
5344
0C52:  MOVFF  702,FE9
5344
0C52:  MOVFF  702,FE9
5345
0C56:  MOVLW  04
5345
0C56:  MOVLW  04
5346
0C58:  ADDWF  x03,W
5346
0C58:  ADDWF  x03,W
5347
0C5A:  MOVWF  FEA
5347
0C5A:  MOVWF  FEA
5348
0C5C:  MOVLW  84
5348
0C5C:  MOVLW  84
5349
0C5E:  MOVWF  FEF
5349
0C5E:  MOVWF  FEF
5350
....................    } 
5350
....................    } 
5351
....................    else if (tgl == USB_DTS_DATA1) 
5351
....................    else if (tgl == USB_DTS_DATA1) 
5352
0C60:  BRA    0C74
5352
0C60:  BRA    0C74
5353
0C62:  MOVLB  6
5353
0C62:  MOVLB  6
5354
0C64:  DECFSZ xFE,W
5354
0C64:  DECFSZ xFE,W
5355
0C66:  BRA    0C6E
5355
0C66:  BRA    0C6E
5356
....................       i = 0xC8;  //DATA1, UOWN 
5356
....................       i = 0xC8;  //DATA1, UOWN 
5357
0C68:  MOVLW  C8
5357
0C68:  MOVLW  C8
5358
0C6A:  MOVWF  xFF
5358
0C6A:  MOVWF  xFF
5359
....................    else //if (tgl == USB_DTS_DATA0)  
5359
....................    else //if (tgl == USB_DTS_DATA0)  
5360
0C6C:  BRA    0C72
5360
0C6C:  BRA    0C72
5361
....................       i = 0x88; //DATA0, UOWN 
5361
....................       i = 0x88; //DATA0, UOWN 
5362
0C6E:  MOVLW  88
5362
0C6E:  MOVLW  88
5363
0C70:  MOVWF  xFF
5363
0C70:  MOVWF  xFF
5364
0C72:  MOVLB  7
5364
0C72:  MOVLB  7
5365
....................   #endif 
5365
....................   #endif 
5366
....................  
5366
....................  
5367
....................    //bit_clear(__usb_kbhit_status,endpoint); 
5367
....................    //bit_clear(__usb_kbhit_status,endpoint); 
5368
....................  
5368
....................  
5369
....................    len = usb_ep_rx_size[endpoint]; 
5369
....................    len = usb_ep_rx_size[endpoint]; 
5370
0C74:  BCF    FD8.0
5370
0C74:  BCF    FD8.0
5371
0C76:  MOVLB  6
5371
0C76:  MOVLB  6
5372
0C78:  RLCF   xFD,W
5372
0C78:  RLCF   xFD,W
5373
0C7A:  CLRF   03
5373
0C7A:  CLRF   03
5374
0C7C:  MOVFF  FF2,702
5374
0C7C:  MOVFF  FF2,702
5375
0C80:  BCF    FF2.7
5375
0C80:  BCF    FF2.7
5376
0C82:  MOVLB  0
5376
0C82:  MOVLB  0
5377
0C84:  CALL   011A
5377
0C84:  CALL   011A
5378
0C88:  TBLRD*+
5378
0C88:  TBLRD*+
5379
0C8A:  MOVFF  FF5,03
5379
0C8A:  MOVFF  FF5,03
5380
0C8E:  MOVLB  7
5380
0C8E:  MOVLB  7
5381
0C90:  BTFSC  x02.7
5381
0C90:  BTFSC  x02.7
5382
0C92:  BSF    FF2.7
5382
0C92:  BSF    FF2.7
5383
0C94:  MOVWF  x00
5383
0C94:  MOVWF  x00
5384
0C96:  MOVFF  03,701
5384
0C96:  MOVFF  03,701
5385
....................    EP_BDxCNT_O(endpoint) = len; 
5385
....................    EP_BDxCNT_O(endpoint) = len; 
5386
0C9A:  CLRF   x49
5386
0C9A:  CLRF   x49
5387
0C9C:  MOVFF  6FD,748
5387
0C9C:  MOVFF  6FD,748
5388
0CA0:  CLRF   x4B
5388
0CA0:  CLRF   x4B
5389
0CA2:  MOVLW  08
5389
0CA2:  MOVLW  08
5390
0CA4:  MOVWF  x4A
5390
0CA4:  MOVWF  x4A
5391
0CA6:  MOVLB  0
5391
0CA6:  MOVLB  0
5392
0CA8:  CALL   02BA
5392
0CA8:  CALL   02BA
5393
0CAC:  MOVFF  01,702
5393
0CAC:  MOVFF  01,702
5394
0CB0:  MOVLW  01
5394
0CB0:  MOVLW  01
5395
0CB2:  MOVLB  7
5395
0CB2:  MOVLB  7
5396
0CB4:  ADDWF  01,W
5396
0CB4:  ADDWF  01,W
5397
0CB6:  MOVWF  01
5397
0CB6:  MOVWF  01
5398
0CB8:  MOVLW  00
5398
0CB8:  MOVLW  00
5399
0CBA:  ADDWFC 02,W
5399
0CBA:  ADDWFC 02,W
5400
0CBC:  MOVWF  03
5400
0CBC:  MOVWF  03
5401
0CBE:  MOVFF  01,FE9
5401
0CBE:  MOVFF  01,FE9
5402
0CC2:  MOVLW  04
5402
0CC2:  MOVLW  04
5403
0CC4:  ADDWF  03,W
5403
0CC4:  ADDWF  03,W
5404
0CC6:  MOVWF  FEA
5404
0CC6:  MOVWF  FEA
5405
0CC8:  MOVFF  700,FEF
5405
0CC8:  MOVFF  700,FEF
5406
....................    if (bit_test(len,8)) {bit_set(i,0);} 
5406
....................    if (bit_test(len,8)) {bit_set(i,0);} 
5407
0CCC:  BTFSS  x01.0
5407
0CCC:  BTFSS  x01.0
5408
0CCE:  BRA    0CD6
5408
0CCE:  BRA    0CD6
5409
0CD0:  MOVLB  6
5409
0CD0:  MOVLB  6
5410
0CD2:  BSF    xFF.0
5410
0CD2:  BSF    xFF.0
5411
0CD4:  MOVLB  7
5411
0CD4:  MOVLB  7
5412
....................    if (bit_test(len,9)) {bit_set(i,1);} 
5412
....................    if (bit_test(len,9)) {bit_set(i,1);} 
5413
0CD6:  BTFSS  x01.1
5413
0CD6:  BTFSS  x01.1
5414
0CD8:  BRA    0CE0
5414
0CD8:  BRA    0CE0
5415
0CDA:  MOVLB  6
5415
0CDA:  MOVLB  6
5416
0CDC:  BSF    xFF.1
5416
0CDC:  BSF    xFF.1
5417
0CDE:  MOVLB  7
5417
0CDE:  MOVLB  7
5418
....................  
5418
....................  
5419
....................    EP_BDxST_O(endpoint) = i; 
5419
....................    EP_BDxST_O(endpoint) = i; 
5420
0CE0:  CLRF   x49
5420
0CE0:  CLRF   x49
5421
0CE2:  MOVFF  6FD,748
5421
0CE2:  MOVFF  6FD,748
5422
0CE6:  CLRF   x4B
5422
0CE6:  CLRF   x4B
5423
0CE8:  MOVLW  08
5423
0CE8:  MOVLW  08
5424
0CEA:  MOVWF  x4A
5424
0CEA:  MOVWF  x4A
5425
0CEC:  MOVLB  0
5425
0CEC:  MOVLB  0
5426
0CEE:  CALL   02BA
5426
0CEE:  CALL   02BA
5427
0CF2:  MOVLB  7
5427
0CF2:  MOVLB  7
5428
0CF4:  MOVFF  01,FE9
5428
0CF4:  MOVFF  01,FE9
5429
0CF8:  MOVLW  04
5429
0CF8:  MOVLW  04
5430
0CFA:  ADDWF  02,W
5430
0CFA:  ADDWF  02,W
5431
0CFC:  MOVWF  FEA
5431
0CFC:  MOVWF  FEA
5432
0CFE:  MOVFF  6FF,FEF
5432
0CFE:  MOVFF  6FF,FEF
5433
.................... } 
5433
.................... } 
5434
0D02:  MOVLB  0
5434
0D02:  MOVLB  0
5435
0D04:  RETLW  00
5435
0D04:  RETLW  00
5436
....................  
5436
....................  
5437
.................... // see pic18_usb.h for documentation 
5437
.................... // see pic18_usb.h for documentation 
5438
.................... int16 usb_rx_packet_size(int8 endpoint)  
5438
.................... int16 usb_rx_packet_size(int8 endpoint)  
5439
.................... { 
5439
.................... { 
5440
....................    return(EP_BDxCNT_O(endpoint)); 
5440
....................    return(EP_BDxCNT_O(endpoint)); 
5441
*
5441
*
5442
0EE6:  MOVLB  7
5442
0EE6:  MOVLB  7
5443
0EE8:  CLRF   x49
5443
0EE8:  CLRF   x49
5444
0EEA:  MOVFF  6FE,748
5444
0EEA:  MOVFF  6FE,748
5445
0EEE:  CLRF   x4B
5445
0EEE:  CLRF   x4B
5446
0EF0:  MOVLW  08
5446
0EF0:  MOVLW  08
5447
0EF2:  MOVWF  x4A
5447
0EF2:  MOVWF  x4A
5448
0EF4:  MOVLB  0
5448
0EF4:  MOVLB  0
5449
0EF6:  CALL   02BA
5449
0EF6:  CALL   02BA
5450
0EFA:  MOVFF  02,700
5450
0EFA:  MOVFF  02,700
5451
0EFE:  MOVFF  01,6FF
5451
0EFE:  MOVFF  01,6FF
5452
0F02:  MOVLW  01
5452
0F02:  MOVLW  01
5453
0F04:  MOVLB  6
5453
0F04:  MOVLB  6
5454
0F06:  ADDWF  01,W
5454
0F06:  ADDWF  01,W
5455
0F08:  MOVWF  01
5455
0F08:  MOVWF  01
5456
0F0A:  MOVLW  00
5456
0F0A:  MOVLW  00
5457
0F0C:  MOVLB  7
5457
0F0C:  MOVLB  7
5458
0F0E:  ADDWFC 02,W
5458
0F0E:  ADDWFC 02,W
5459
0F10:  MOVWF  03
5459
0F10:  MOVWF  03
5460
0F12:  MOVFF  01,FE9
5460
0F12:  MOVFF  01,FE9
5461
0F16:  MOVLW  04
5461
0F16:  MOVLW  04
5462
0F18:  ADDWF  03,W
5462
0F18:  ADDWF  03,W
5463
0F1A:  MOVWF  FEA
5463
0F1A:  MOVWF  FEA
5464
0F1C:  CLRF   03
5464
0F1C:  CLRF   03
5465
0F1E:  MOVFF  FEF,01
5465
0F1E:  MOVFF  FEF,01
5466
0F22:  MOVFF  03,02
5466
0F22:  MOVFF  03,02
5467
.................... } 
5467
.................... } 
5468
0F26:  MOVLB  0
5468
0F26:  MOVLB  0
5469
0F28:  GOTO   0F3A (RETURN)
5469
0F28:  GOTO   0F3A (RETURN)
5470
....................  
5470
....................  
5471
.................... /// END User Functions 
5471
.................... /// END User Functions 
5472
....................  
5472
....................  
5473
....................  
5473
....................  
5474
.................... /// BEGIN Hardware layer functions required by USB. 
5474
.................... /// BEGIN Hardware layer functions required by USB. 
5475
....................  
5475
....................  
5476
.................... /***************************************************************************** 
5476
.................... /***************************************************************************** 
5477
.................... /* usb_get_packet_buffer(endpoint, *ptr, max) 
5477
.................... /* usb_get_packet_buffer(endpoint, *ptr, max) 
5478
.................... /* 
5478
.................... /* 
5479
.................... /* Input: endpoint - endpoint to get data from 
5479
.................... /* Input: endpoint - endpoint to get data from 
5480
.................... /*        ptr - where to save data to local PIC RAM 
5480
.................... /*        ptr - where to save data to local PIC RAM 
5481
.................... /*        max - max amount of data to receive from buffer 
5481
.................... /*        max - max amount of data to receive from buffer 
5482
.................... /* 
5482
.................... /* 
5483
.................... /* Output: the amount of data taken from the buffer. 
5483
.................... /* Output: the amount of data taken from the buffer. 
5484
.................... /* 
5484
.................... /* 
5485
.................... /* Summary: Gets a packet of data from the USB buffer and puts into local PIC  
5485
.................... /* Summary: Gets a packet of data from the USB buffer and puts into local PIC  
5486
.................... /*          RAM. 
5486
.................... /*          RAM. 
5487
.................... /*          Does not mark the endpoint as ready for more data.  Once you are 
5487
.................... /*          Does not mark the endpoint as ready for more data.  Once you are 
5488
.................... /*          done with data, call usb_flush_out() to mark the endpoint ready 
5488
.................... /*          done with data, call usb_flush_out() to mark the endpoint ready 
5489
.................... /*          to receive more data. 
5489
.................... /*          to receive more data. 
5490
.................... /* 
5490
.................... /* 
5491
.................... /*****************************************************************************/ 
5491
.................... /*****************************************************************************/ 
5492
.................... static int16 usb_get_packet_buffer(int8 endpoint, int8 *ptr, int16 max)  
5492
.................... static int16 usb_get_packet_buffer(int8 endpoint, int8 *ptr, int16 max)  
5493
.................... { 
5493
.................... { 
5494
....................    int8 * al; 
5494
....................    int8 * al; 
5495
....................    int8 st; 
5495
....................    int8 st; 
5496
....................    int16 i; 
5496
....................    int16 i; 
5497
....................  
5497
....................  
5498
....................    al = EP_BDxADR_O(endpoint); 
5498
....................    al = EP_BDxADR_O(endpoint); 
5499
....................    i = EP_BDxCNT_O(endpoint); 
5499
....................    i = EP_BDxCNT_O(endpoint); 
5500
....................    st = EP_BDxST_O(endpoint); 
5500
....................    st = EP_BDxST_O(endpoint); 
5501
....................  
5501
....................  
5502
....................    //read BC8 and BC9 
5502
....................    //read BC8 and BC9 
5503
....................    if (bit_test(st,0)) {bit_set(i,8);} 
5503
....................    if (bit_test(st,0)) {bit_set(i,8);} 
5504
....................    if (bit_test(st,1)) {bit_set(i,9);} 
5504
....................    if (bit_test(st,1)) {bit_set(i,9);} 
5505
....................  
5505
....................  
5506
....................    if (i < max) {max = i;} 
5506
....................    if (i < max) {max = i;} 
5507
....................     
5507
....................     
5508
....................    memcpy(ptr, al ,max); 
5508
....................    memcpy(ptr, al ,max); 
5509
....................  
5509
....................  
5510
....................    return(max); 
5510
....................    return(max); 
5511
.................... } 
5511
.................... } 
5512
....................  
5512
....................  
5513
.................... // see usb_hw_layer.h for documentation 
5513
.................... // see usb_hw_layer.h for documentation 
5514
.................... unsigned int16 usb_get_packet(int8 endpoint, int8 * ptr, unsigned int16 max) 
5514
.................... unsigned int16 usb_get_packet(int8 endpoint, int8 * ptr, unsigned int16 max) 
5515
.................... { 
5515
.................... { 
5516
....................    max = usb_get_packet_buffer(endpoint, ptr, max); 
5516
....................    max = usb_get_packet_buffer(endpoint, ptr, max); 
5517
....................    usb_flush_out(endpoint, USB_DTS_TOGGLE); 
5517
....................    usb_flush_out(endpoint, USB_DTS_TOGGLE); 
5518
....................  
5518
....................  
5519
....................    return(max); 
5519
....................    return(max); 
5520
.................... } 
5520
.................... } 
5521
....................  
5521
....................  
5522
.................... // see usb_hw_layer.h for documentation 
5522
.................... // see usb_hw_layer.h for documentation 
5523
.................... void usb_stall_ep(int8 endpoint)  
5523
.................... void usb_stall_ep(int8 endpoint)  
5524
.................... { 
5524
.................... { 
5525
....................    int1 direction; 
5525
....................    int1 direction; 
5526
....................     
5526
....................     
5527
....................    direction = bit_test(endpoint,7); 
5527
....................    direction = bit_test(endpoint,7); 
5528
*
5528
*
5529
09B4:  MOVLB  6
5529
09B4:  MOVLB  6
5530
09B6:  BCF    xFE.0
5530
09B6:  BCF    xFE.0
5531
09B8:  BTFSC  xFD.7
5531
09B8:  BTFSC  xFD.7
5532
09BA:  BSF    xFE.0
5532
09BA:  BSF    xFE.0
5533
....................    endpoint &= 0x7F; 
5533
....................    endpoint &= 0x7F; 
5534
09BC:  BCF    xFD.7
5534
09BC:  BCF    xFD.7
5535
....................     
5535
....................     
5536
....................    if (direction)  
5536
....................    if (direction)  
5537
09BE:  BTFSS  xFE.0
5537
09BE:  BTFSS  xFE.0
5538
09C0:  BRA    09FC
5538
09C0:  BRA    09FC
5539
....................    { 
5539
....................    { 
5540
....................       EP_BDxST_I(endpoint) = 0x84; 
5540
....................       EP_BDxST_I(endpoint) = 0x84; 
5541
09C2:  MOVLB  7
5541
09C2:  MOVLB  7
5542
09C4:  CLRF   x49
5542
09C4:  CLRF   x49
5543
09C6:  MOVFF  6FD,748
5543
09C6:  MOVFF  6FD,748
5544
09CA:  CLRF   x4B
5544
09CA:  CLRF   x4B
5545
09CC:  MOVLW  08
5545
09CC:  MOVLW  08
5546
09CE:  MOVWF  x4A
5546
09CE:  MOVWF  x4A
5547
09D0:  MOVLB  0
5547
09D0:  MOVLB  0
5548
09D2:  RCALL  02BA
5548
09D2:  RCALL  02BA
5549
09D4:  MOVFF  02,700
5549
09D4:  MOVFF  02,700
5550
09D8:  MOVFF  01,6FF
5550
09D8:  MOVFF  01,6FF
5551
09DC:  MOVLW  04
5551
09DC:  MOVLW  04
5552
09DE:  MOVLB  6
5552
09DE:  MOVLB  6
5553
09E0:  ADDWF  xFF,F
5553
09E0:  ADDWF  xFF,F
5554
09E2:  MOVLW  00
5554
09E2:  MOVLW  00
5555
09E4:  MOVLB  7
5555
09E4:  MOVLB  7
5556
09E6:  ADDWFC x00,F
5556
09E6:  ADDWFC x00,F
5557
09E8:  MOVFF  6FF,FE9
5557
09E8:  MOVFF  6FF,FE9
5558
09EC:  MOVLW  04
5558
09EC:  MOVLW  04
5559
09EE:  MOVLB  7
5559
09EE:  MOVLB  7
5560
09F0:  ADDWF  x00,W
5560
09F0:  ADDWF  x00,W
5561
09F2:  MOVWF  FEA
5561
09F2:  MOVWF  FEA
5562
09F4:  MOVLW  84
5562
09F4:  MOVLW  84
5563
09F6:  MOVWF  FEF
5563
09F6:  MOVWF  FEF
5564
....................    } 
5564
....................    } 
5565
....................    else  
5565
....................    else  
5566
09F8:  BRA    0A1E
5566
09F8:  BRA    0A1E
5567
09FA:  MOVLB  6
5567
09FA:  MOVLB  6
5568
....................    { 
5568
....................    { 
5569
....................       EP_BDxST_O(endpoint) = 0x84; 
5569
....................       EP_BDxST_O(endpoint) = 0x84; 
5570
09FC:  MOVLB  7
5570
09FC:  MOVLB  7
5571
09FE:  CLRF   x49
5571
09FE:  CLRF   x49
5572
0A00:  MOVFF  6FD,748
5572
0A00:  MOVFF  6FD,748
5573
0A04:  CLRF   x4B
5573
0A04:  CLRF   x4B
5574
0A06:  MOVLW  08
5574
0A06:  MOVLW  08
5575
0A08:  MOVWF  x4A
5575
0A08:  MOVWF  x4A
5576
0A0A:  MOVLB  0
5576
0A0A:  MOVLB  0
5577
0A0C:  RCALL  02BA
5577
0A0C:  RCALL  02BA
5578
0A0E:  MOVFF  01,FE9
5578
0A0E:  MOVFF  01,FE9
5579
0A12:  MOVLW  04
5579
0A12:  MOVLW  04
5580
0A14:  MOVLB  7
5580
0A14:  MOVLB  7
5581
0A16:  ADDWF  02,W
5581
0A16:  ADDWF  02,W
5582
0A18:  MOVWF  FEA
5582
0A18:  MOVWF  FEA
5583
0A1A:  MOVLW  84
5583
0A1A:  MOVLW  84
5584
0A1C:  MOVWF  FEF
5584
0A1C:  MOVWF  FEF
5585
....................    } 
5585
....................    } 
5586
.................... } 
5586
.................... } 
5587
0A1E:  MOVLB  0
5587
0A1E:  MOVLB  0
5588
0A20:  GOTO   0AD6 (RETURN)
5588
0A20:  GOTO   0AD6 (RETURN)
5589
....................  
5589
....................  
5590
.................... // see usb_hw_layer.h for documentation 
5590
.................... // see usb_hw_layer.h for documentation 
5591
.................... void usb_unstall_ep(int8 endpoint)  
5591
.................... void usb_unstall_ep(int8 endpoint)  
5592
.................... { 
5592
.................... { 
5593
....................    int1 direction; 
5593
....................    int1 direction; 
5594
....................     
5594
....................     
5595
....................    direction = bit_test(endpoint,7); 
5595
....................    direction = bit_test(endpoint,7); 
5596
*
5596
*
5597
0946:  MOVLB  6
5597
0946:  MOVLB  6
5598
0948:  BCF    xFE.0
5598
0948:  BCF    xFE.0
5599
094A:  BTFSC  xFD.7
5599
094A:  BTFSC  xFD.7
5600
094C:  BSF    xFE.0
5600
094C:  BSF    xFE.0
5601
....................    endpoint &= 0x7F; 
5601
....................    endpoint &= 0x7F; 
5602
094E:  BCF    xFD.7
5602
094E:  BCF    xFD.7
5603
....................     
5603
....................     
5604
....................    if (direction)  
5604
....................    if (direction)  
5605
0950:  BTFSS  xFE.0
5605
0950:  BTFSS  xFE.0
5606
0952:  BRA    098E
5606
0952:  BRA    098E
5607
....................    { 
5607
....................    { 
5608
....................      #if USB_IGNORE_RX_DTS 
5608
....................      #if USB_IGNORE_RX_DTS 
5609
....................       EP_BDxST_I(endpoint) = 0x80; 
5609
....................       EP_BDxST_I(endpoint) = 0x80; 
5610
....................      #else 
5610
....................      #else 
5611
....................       EP_BDxST_I(endpoint) = 0x88; 
5611
....................       EP_BDxST_I(endpoint) = 0x88; 
5612
0954:  MOVLB  7
5612
0954:  MOVLB  7
5613
0956:  CLRF   x49
5613
0956:  CLRF   x49
5614
0958:  MOVFF  6FD,748
5614
0958:  MOVFF  6FD,748
5615
095C:  CLRF   x4B
5615
095C:  CLRF   x4B
5616
095E:  MOVLW  08
5616
095E:  MOVLW  08
5617
0960:  MOVWF  x4A
5617
0960:  MOVWF  x4A
5618
0962:  MOVLB  0
5618
0962:  MOVLB  0
5619
0964:  RCALL  02BA
5619
0964:  RCALL  02BA
5620
0966:  MOVFF  02,700
5620
0966:  MOVFF  02,700
5621
096A:  MOVFF  01,6FF
5621
096A:  MOVFF  01,6FF
5622
096E:  MOVLW  04
5622
096E:  MOVLW  04
5623
0970:  MOVLB  6
5623
0970:  MOVLB  6
5624
0972:  ADDWF  xFF,F
5624
0972:  ADDWF  xFF,F
5625
0974:  MOVLW  00
5625
0974:  MOVLW  00
5626
0976:  MOVLB  7
5626
0976:  MOVLB  7
5627
0978:  ADDWFC x00,F
5627
0978:  ADDWFC x00,F
5628
097A:  MOVFF  6FF,FE9
5628
097A:  MOVFF  6FF,FE9
5629
097E:  MOVLW  04
5629
097E:  MOVLW  04
5630
0980:  MOVLB  7
5630
0980:  MOVLB  7
5631
0982:  ADDWF  x00,W
5631
0982:  ADDWF  x00,W
5632
0984:  MOVWF  FEA
5632
0984:  MOVWF  FEA
5633
0986:  MOVLW  88
5633
0986:  MOVLW  88
5634
0988:  MOVWF  FEF
5634
0988:  MOVWF  FEF
5635
....................      #endif 
5635
....................      #endif 
5636
....................    } 
5636
....................    } 
5637
....................    else  
5637
....................    else  
5638
098A:  BRA    09AE
5638
098A:  BRA    09AE
5639
098C:  MOVLB  6
5639
098C:  MOVLB  6
5640
....................    { 
5640
....................    { 
5641
....................       EP_BDxST_O(endpoint) = 0x00; 
5641
....................       EP_BDxST_O(endpoint) = 0x00; 
5642
098E:  MOVLB  7
5642
098E:  MOVLB  7
5643
0990:  CLRF   x49
5643
0990:  CLRF   x49
5644
0992:  MOVFF  6FD,748
5644
0992:  MOVFF  6FD,748
5645
0996:  CLRF   x4B
5645
0996:  CLRF   x4B
5646
0998:  MOVLW  08
5646
0998:  MOVLW  08
5647
099A:  MOVWF  x4A
5647
099A:  MOVWF  x4A
5648
099C:  MOVLB  0
5648
099C:  MOVLB  0
5649
099E:  RCALL  02BA
5649
099E:  RCALL  02BA
5650
09A0:  MOVFF  01,FE9
5650
09A0:  MOVFF  01,FE9
5651
09A4:  MOVLW  04
5651
09A4:  MOVLW  04
5652
09A6:  MOVLB  7
5652
09A6:  MOVLB  7
5653
09A8:  ADDWF  02,W
5653
09A8:  ADDWF  02,W
5654
09AA:  MOVWF  FEA
5654
09AA:  MOVWF  FEA
5655
09AC:  CLRF   FEF
5655
09AC:  CLRF   FEF
5656
....................    } 
5656
....................    } 
5657
.................... } 
5657
.................... } 
5658
09AE:  MOVLB  0
5658
09AE:  MOVLB  0
5659
09B0:  GOTO   0AC6 (RETURN)
5659
09B0:  GOTO   0AC6 (RETURN)
5660
....................  
5660
....................  
5661
.................... // see usb_hw_layer.h for documentation 
5661
.................... // see usb_hw_layer.h for documentation 
5662
.................... int1 usb_endpoint_stalled(int8 endpoint)  
5662
.................... int1 usb_endpoint_stalled(int8 endpoint)  
5663
.................... { 
5663
.................... { 
5664
....................    int1 direction; 
5664
....................    int1 direction; 
5665
....................    int8 st; 
5665
....................    int8 st; 
5666
....................     
5666
....................     
5667
....................    direction = bit_test(endpoint,7); 
5667
....................    direction = bit_test(endpoint,7); 
5668
*
5668
*
5669
0A24:  MOVLB  6
5669
0A24:  MOVLB  6
5670
0A26:  BCF    xFE.0
5670
0A26:  BCF    xFE.0
5671
0A28:  BTFSC  xFD.7
5671
0A28:  BTFSC  xFD.7
5672
0A2A:  BSF    xFE.0
5672
0A2A:  BSF    xFE.0
5673
....................    endpoint &= 0x7F; 
5673
....................    endpoint &= 0x7F; 
5674
0A2C:  BCF    xFD.7
5674
0A2C:  BCF    xFD.7
5675
....................     
5675
....................     
5676
....................    if (direction)  
5676
....................    if (direction)  
5677
0A2E:  BTFSS  xFE.0
5677
0A2E:  BTFSS  xFE.0
5678
0A30:  BRA    0A68
5678
0A30:  BRA    0A68
5679
....................    { 
5679
....................    { 
5680
....................       st=EP_BDxST_I(endpoint); 
5680
....................       st=EP_BDxST_I(endpoint); 
5681
0A32:  MOVLB  7
5681
0A32:  MOVLB  7
5682
0A34:  CLRF   x49
5682
0A34:  CLRF   x49
5683
0A36:  MOVFF  6FD,748
5683
0A36:  MOVFF  6FD,748
5684
0A3A:  CLRF   x4B
5684
0A3A:  CLRF   x4B
5685
0A3C:  MOVLW  08
5685
0A3C:  MOVLW  08
5686
0A3E:  MOVWF  x4A
5686
0A3E:  MOVWF  x4A
5687
0A40:  MOVLB  0
5687
0A40:  MOVLB  0
5688
0A42:  RCALL  02BA
5688
0A42:  RCALL  02BA
5689
0A44:  MOVFF  02,701
5689
0A44:  MOVFF  02,701
5690
0A48:  MOVFF  01,700
5690
0A48:  MOVFF  01,700
5691
0A4C:  MOVLW  04
5691
0A4C:  MOVLW  04
5692
0A4E:  MOVLB  7
5692
0A4E:  MOVLB  7
5693
0A50:  ADDWF  x00,F
5693
0A50:  ADDWF  x00,F
5694
0A52:  MOVLW  00
5694
0A52:  MOVLW  00
5695
0A54:  ADDWFC x01,F
5695
0A54:  ADDWFC x01,F
5696
0A56:  MOVFF  700,FE9
5696
0A56:  MOVFF  700,FE9
5697
0A5A:  MOVLW  04
5697
0A5A:  MOVLW  04
5698
0A5C:  ADDWF  x01,W
5698
0A5C:  ADDWF  x01,W
5699
0A5E:  MOVWF  FEA
5699
0A5E:  MOVWF  FEA
5700
0A60:  MOVFF  FEF,6FF
5700
0A60:  MOVFF  FEF,6FF
5701
0A64:  MOVLB  6
5701
0A64:  MOVLB  6
5702
....................    } 
5702
....................    } 
5703
....................    else  
5703
....................    else  
5704
0A66:  BRA    0A8C
5704
0A66:  BRA    0A8C
5705
....................    { 
5705
....................    { 
5706
....................       st=EP_BDxST_O(endpoint); 
5706
....................       st=EP_BDxST_O(endpoint); 
5707
0A68:  MOVLB  7
5707
0A68:  MOVLB  7
5708
0A6A:  CLRF   x49
5708
0A6A:  CLRF   x49
5709
0A6C:  MOVFF  6FD,748
5709
0A6C:  MOVFF  6FD,748
5710
0A70:  CLRF   x4B
5710
0A70:  CLRF   x4B
5711
0A72:  MOVLW  08
5711
0A72:  MOVLW  08
5712
0A74:  MOVWF  x4A
5712
0A74:  MOVWF  x4A
5713
0A76:  MOVLB  0
5713
0A76:  MOVLB  0
5714
0A78:  RCALL  02BA
5714
0A78:  RCALL  02BA
5715
0A7A:  MOVLB  7
5715
0A7A:  MOVLB  7
5716
0A7C:  MOVFF  01,FE9
5716
0A7C:  MOVFF  01,FE9
5717
0A80:  MOVLW  04
5717
0A80:  MOVLW  04
5718
0A82:  ADDWF  02,W
5718
0A82:  ADDWF  02,W
5719
0A84:  MOVWF  FEA
5719
0A84:  MOVWF  FEA
5720
0A86:  MOVFF  FEF,6FF
5720
0A86:  MOVFF  FEF,6FF
5721
0A8A:  MOVLB  6
5721
0A8A:  MOVLB  6
5722
....................    } 
5722
....................    } 
5723
....................     
5723
....................     
5724
....................    return(bit_test(st,7) && bit_test(st,2)); 
5724
....................    return(bit_test(st,7) && bit_test(st,2)); 
5725
0A8C:  BTFSS  xFF.7
5725
0A8C:  BTFSS  xFF.7
5726
0A8E:  BRA    0A94
5726
0A8E:  BRA    0A94
5727
0A90:  BTFSC  xFF.2
5727
0A90:  BTFSC  xFF.2
5728
0A92:  BRA    0A98
5728
0A92:  BRA    0A98
5729
0A94:  MOVLW  00
5729
0A94:  MOVLW  00
5730
0A96:  BRA    0A9A
5730
0A96:  BRA    0A9A
5731
0A98:  MOVLW  01
5731
0A98:  MOVLW  01
5732
0A9A:  MOVWF  01
5732
0A9A:  MOVWF  01
5733
.................... } 
5733
.................... } 
5734
0A9C:  MOVLB  0
5734
0A9C:  MOVLB  0
5735
0A9E:  GOTO   0AEE (RETURN)
5735
0A9E:  GOTO   0AEE (RETURN)
5736
....................  
5736
....................  
5737
.................... // see usb_hw_layer.h for documentation 
5737
.................... // see usb_hw_layer.h for documentation 
5738
.................... void usb_set_address(int8 address)  
5738
.................... void usb_set_address(int8 address)  
5739
.................... { 
5739
.................... { 
5740
....................    UADDR = address; 
5740
....................    UADDR = address; 
5741
*
5741
*
5742
0F60:  MOVFF  6FE,F6E
5742
0F60:  MOVFF  6FE,F6E
5743
....................     
5743
....................     
5744
....................    if (address)  
5744
....................    if (address)  
5745
0F64:  MOVLB  6
5745
0F64:  MOVLB  6
5746
0F66:  MOVF   xFE,F
5746
0F66:  MOVF   xFE,F
5747
0F68:  BZ    0F70
5747
0F68:  BZ    0F70
5748
....................    { 
5748
....................    { 
5749
....................       usb_state = USB_STATE_ADDRESS; 
5749
....................       usb_state = USB_STATE_ADDRESS; 
5750
0F6A:  MOVLW  04
5750
0F6A:  MOVLW  04
5751
0F6C:  MOVWF  24
5751
0F6C:  MOVWF  24
5752
....................    } 
5752
....................    } 
5753
....................    else  
5753
....................    else  
5754
0F6E:  BRA    0F74
5754
0F6E:  BRA    0F74
5755
....................    { 
5755
....................    { 
5756
....................       usb_state = USB_STATE_POWERED; 
5756
....................       usb_state = USB_STATE_POWERED; 
5757
0F70:  MOVLW  02
5757
0F70:  MOVLW  02
5758
0F72:  MOVWF  24
5758
0F72:  MOVWF  24
5759
....................    } 
5759
....................    } 
5760
.................... } 
5760
.................... } 
5761
0F74:  MOVLB  0
5761
0F74:  MOVLB  0
5762
0F76:  GOTO   0F84 (RETURN)
5762
0F76:  GOTO   0F84 (RETURN)
5763
....................  
5763
....................  
5764
.................... // see usb_hw_layer.h for documentation 
5764
.................... // see usb_hw_layer.h for documentation 
5765
.................... void usb_set_configured(int8 config)  
5765
.................... void usb_set_configured(int8 config)  
5766
.................... { 
5766
.................... { 
5767
....................    int8 en; 
5767
....................    int8 en; 
5768
....................    int16 addy; 
5768
....................    int16 addy; 
5769
....................    int8 new_uep; 
5769
....................    int8 new_uep; 
5770
....................    int16 len; 
5770
....................    int16 len; 
5771
....................    int8 i; 
5771
....................    int8 i; 
5772
....................     
5772
....................     
5773
....................    if (config == 0) 
5773
....................    if (config == 0) 
5774
*
5774
*
5775
055C:  MOVLB  6
5775
055C:  MOVLB  6
5776
055E:  MOVF   xFD,F
5776
055E:  MOVF   xFD,F
5777
0560:  BNZ   056E
5777
0560:  BNZ   056E
5778
....................    { 
5778
....................    { 
5779
....................       // if config=0 then set addressed state 
5779
....................       // if config=0 then set addressed state 
5780
....................       usb_state = USB_STATE_ADDRESS; 
5780
....................       usb_state = USB_STATE_ADDRESS; 
5781
0562:  MOVLW  04
5781
0562:  MOVLW  04
5782
0564:  MOVWF  24
5782
0564:  MOVWF  24
5783
....................       usb_disable_endpoints(); 
5783
....................       usb_disable_endpoints(); 
5784
0566:  MOVLB  0
5784
0566:  MOVLB  0
5785
0568:  RCALL  033E
5785
0568:  RCALL  033E
5786
....................    } 
5786
....................    } 
5787
....................    else  
5787
....................    else  
5788
056A:  BRA    0786
5788
056A:  BRA    0786
5789
056C:  MOVLB  6
5789
056C:  MOVLB  6
5790
....................    { 
5790
....................    { 
5791
....................       // else set configed state 
5791
....................       // else set configed state 
5792
....................       usb_state = USB_STATE_CONFIGURED;  
5792
....................       usb_state = USB_STATE_CONFIGURED;  
5793
056E:  MOVLW  05
5793
056E:  MOVLW  05
5794
0570:  MOVWF  24
5794
0570:  MOVWF  24
5795
....................       addy = (int16)USB_DATA_BUFFER_LOCATION+(2*USB_MAX_EP0_PACKET_LENGTH); 
5795
....................       addy = (int16)USB_DATA_BUFFER_LOCATION+(2*USB_MAX_EP0_PACKET_LENGTH); 
5796
0572:  MOVLW  04
5796
0572:  MOVLW  04
5797
0574:  MOVLB  7
5797
0574:  MOVLB  7
5798
0576:  MOVWF  x00
5798
0576:  MOVWF  x00
5799
0578:  MOVLW  98
5799
0578:  MOVLW  98
5800
057A:  MOVLB  6
5800
057A:  MOVLB  6
5801
057C:  MOVWF  xFF
5801
057C:  MOVWF  xFF
5802
....................       for (en=1; en<16; en++)  
5802
....................       for (en=1; en<16; en++)  
5803
057E:  MOVLW  01
5803
057E:  MOVLW  01
5804
0580:  MOVWF  xFE
5804
0580:  MOVWF  xFE
5805
0582:  MOVF   xFE,W
5805
0582:  MOVF   xFE,W
5806
0584:  SUBLW  0F
5806
0584:  SUBLW  0F
5807
0586:  BTFSS  FD8.0
5807
0586:  BTFSS  FD8.0
5808
0588:  BRA    0786
5808
0588:  BRA    0786
5809
....................       { 
5809
....................       { 
5810
....................          // enable and config endpoints based upon user configuration 
5810
....................          // enable and config endpoints based upon user configuration 
5811
....................          usb_disable_endpoint(en); 
5811
....................          usb_disable_endpoint(en); 
5812
058A:  MOVFF  6FE,706
5812
058A:  MOVFF  6FE,706
5813
058E:  MOVLB  0
5813
058E:  MOVLB  0
5814
0590:  RCALL  02DC
5814
0590:  RCALL  02DC
5815
....................          new_uep = 0; 
5815
....................          new_uep = 0; 
5816
0592:  MOVLB  7
5816
0592:  MOVLB  7
5817
0594:  CLRF   x01
5817
0594:  CLRF   x01
5818
....................          if (usb_ep_rx_type[en] != USB_ENABLE_DISABLED)  
5818
....................          if (usb_ep_rx_type[en] != USB_ENABLE_DISABLED)  
5819
0596:  CLRF   03
5819
0596:  CLRF   03
5820
0598:  MOVLB  6
5820
0598:  MOVLB  6
5821
059A:  MOVF   xFE,W
5821
059A:  MOVF   xFE,W
5822
059C:  MOVFF  FF2,705
5822
059C:  MOVFF  FF2,705
5823
05A0:  BCF    FF2.7
5823
05A0:  BCF    FF2.7
5824
05A2:  MOVLB  0
5824
05A2:  MOVLB  0
5825
05A4:  RCALL  00CA
5825
05A4:  RCALL  00CA
5826
05A6:  MOVLB  7
5826
05A6:  MOVLB  7
5827
05A8:  BTFSC  x05.7
5827
05A8:  BTFSC  x05.7
5828
05AA:  BSF    FF2.7
5828
05AA:  BSF    FF2.7
5829
05AC:  SUBLW  FF
5829
05AC:  SUBLW  FF
5830
05AE:  BZ    0692
5830
05AE:  BZ    0692
5831
....................          { 
5831
....................          { 
5832
....................             new_uep = 0x04; 
5832
....................             new_uep = 0x04; 
5833
05B0:  MOVLW  04
5833
05B0:  MOVLW  04
5834
05B2:  MOVWF  x01
5834
05B2:  MOVWF  x01
5835
....................             len = usb_ep_rx_size[en]; 
5835
....................             len = usb_ep_rx_size[en]; 
5836
05B4:  BCF    FD8.0
5836
05B4:  BCF    FD8.0
5837
05B6:  MOVLB  6
5837
05B6:  MOVLB  6
5838
05B8:  RLCF   xFE,W
5838
05B8:  RLCF   xFE,W
5839
05BA:  CLRF   03
5839
05BA:  CLRF   03
5840
05BC:  MOVFF  FF2,705
5840
05BC:  MOVFF  FF2,705
5841
05C0:  BCF    FF2.7
5841
05C0:  BCF    FF2.7
5842
05C2:  MOVLB  0
5842
05C2:  MOVLB  0
5843
05C4:  RCALL  011A
5843
05C4:  RCALL  011A
5844
05C6:  TBLRD*+
5844
05C6:  TBLRD*+
5845
05C8:  MOVFF  FF5,03
5845
05C8:  MOVFF  FF5,03
5846
05CC:  MOVLB  7
5846
05CC:  MOVLB  7
5847
05CE:  BTFSC  x05.7
5847
05CE:  BTFSC  x05.7
5848
05D0:  BSF    FF2.7
5848
05D0:  BSF    FF2.7
5849
05D2:  MOVWF  x02
5849
05D2:  MOVWF  x02
5850
05D4:  MOVFF  03,703
5850
05D4:  MOVFF  03,703
5851
....................             EP_BDxCNT_O(en) = len; 
5851
....................             EP_BDxCNT_O(en) = len; 
5852
05D8:  CLRF   x49
5852
05D8:  CLRF   x49
5853
05DA:  MOVFF  6FE,748
5853
05DA:  MOVFF  6FE,748
5854
05DE:  CLRF   x4B
5854
05DE:  CLRF   x4B
5855
05E0:  MOVLW  08
5855
05E0:  MOVLW  08
5856
05E2:  MOVWF  x4A
5856
05E2:  MOVWF  x4A
5857
05E4:  MOVLB  0
5857
05E4:  MOVLB  0
5858
05E6:  RCALL  02BA
5858
05E6:  RCALL  02BA
5859
05E8:  MOVFF  01,705
5859
05E8:  MOVFF  01,705
5860
05EC:  MOVLW  01
5860
05EC:  MOVLW  01
5861
05EE:  MOVLB  7
5861
05EE:  MOVLB  7
5862
05F0:  ADDWF  01,W
5862
05F0:  ADDWF  01,W
5863
05F2:  MOVWF  01
5863
05F2:  MOVWF  01
5864
05F4:  MOVLW  00
5864
05F4:  MOVLW  00
5865
05F6:  ADDWFC 02,W
5865
05F6:  ADDWFC 02,W
5866
05F8:  MOVWF  03
5866
05F8:  MOVWF  03
5867
05FA:  MOVFF  01,FE9
5867
05FA:  MOVFF  01,FE9
5868
05FE:  MOVLW  04
5868
05FE:  MOVLW  04
5869
0600:  ADDWF  03,W
5869
0600:  ADDWF  03,W
5870
0602:  MOVWF  FEA
5870
0602:  MOVWF  FEA
5871
0604:  MOVFF  702,FEF
5871
0604:  MOVFF  702,FEF
5872
....................             EP_BDxADR_O(en) = addy; 
5872
....................             EP_BDxADR_O(en) = addy; 
5873
0608:  CLRF   x49
5873
0608:  CLRF   x49
5874
060A:  MOVFF  6FE,748
5874
060A:  MOVFF  6FE,748
5875
060E:  CLRF   x4B
5875
060E:  CLRF   x4B
5876
0610:  MOVLW  08
5876
0610:  MOVLW  08
5877
0612:  MOVWF  x4A
5877
0612:  MOVWF  x4A
5878
0614:  MOVLB  0
5878
0614:  MOVLB  0
5879
0616:  RCALL  02BA
5879
0616:  RCALL  02BA
5880
0618:  MOVFF  01,705
5880
0618:  MOVFF  01,705
5881
061C:  MOVLW  02
5881
061C:  MOVLW  02
5882
061E:  MOVLB  7
5882
061E:  MOVLB  7
5883
0620:  ADDWF  01,W
5883
0620:  ADDWF  01,W
5884
0622:  MOVWF  01
5884
0622:  MOVWF  01
5885
0624:  MOVLW  00
5885
0624:  MOVLW  00
5886
0626:  ADDWFC 02,W
5886
0626:  ADDWFC 02,W
5887
0628:  MOVWF  03
5887
0628:  MOVWF  03
5888
062A:  MOVFF  01,FE9
5888
062A:  MOVFF  01,FE9
5889
062E:  MOVLW  04
5889
062E:  MOVLW  04
5890
0630:  ADDWF  03,W
5890
0630:  ADDWF  03,W
5891
0632:  MOVWF  FEA
5891
0632:  MOVWF  FEA
5892
0634:  MOVFF  700,FEC
5892
0634:  MOVFF  700,FEC
5893
0638:  MOVF   FED,F
5893
0638:  MOVF   FED,F
5894
063A:  MOVFF  6FF,FEF
5894
063A:  MOVFF  6FF,FEF
5895
....................             addy += usb_ep_rx_size[en]; 
5895
....................             addy += usb_ep_rx_size[en]; 
5896
063E:  BCF    FD8.0
5896
063E:  BCF    FD8.0
5897
0640:  MOVLB  6
5897
0640:  MOVLB  6
5898
0642:  RLCF   xFE,W
5898
0642:  RLCF   xFE,W
5899
0644:  CLRF   03
5899
0644:  CLRF   03
5900
0646:  MOVFF  FF2,705
5900
0646:  MOVFF  FF2,705
5901
064A:  BCF    FF2.7
5901
064A:  BCF    FF2.7
5902
064C:  MOVLB  0
5902
064C:  MOVLB  0
5903
064E:  RCALL  011A
5903
064E:  RCALL  011A
5904
0650:  TBLRD*+
5904
0650:  TBLRD*+
5905
0652:  MOVFF  FF5,03
5905
0652:  MOVFF  FF5,03
5906
0656:  MOVLB  7
5906
0656:  MOVLB  7
5907
0658:  BTFSC  x05.7
5907
0658:  BTFSC  x05.7
5908
065A:  BSF    FF2.7
5908
065A:  BSF    FF2.7
5909
065C:  MOVLB  6
5909
065C:  MOVLB  6
5910
065E:  ADDWF  xFF,F
5910
065E:  ADDWF  xFF,F
5911
0660:  MOVF   03,W
5911
0660:  MOVF   03,W
5912
0662:  MOVLB  7
5912
0662:  MOVLB  7
5913
0664:  ADDWFC x00,F
5913
0664:  ADDWFC x00,F
5914
....................            #if USB_IGNORE_RX_DTS 
5914
....................            #if USB_IGNORE_RX_DTS 
5915
....................             i = 0x80; 
5915
....................             i = 0x80; 
5916
....................            #else 
5916
....................            #else 
5917
....................             i = 0x88; 
5917
....................             i = 0x88; 
5918
0666:  MOVLW  88
5918
0666:  MOVLW  88
5919
0668:  MOVWF  x04
5919
0668:  MOVWF  x04
5920
....................            #endif 
5920
....................            #endif 
5921
....................             if (bit_test(len,8)) {bit_set(i,0);} 
5921
....................             if (bit_test(len,8)) {bit_set(i,0);} 
5922
066A:  BTFSC  x03.0
5922
066A:  BTFSC  x03.0
5923
066C:  BSF    x04.0
5923
066C:  BSF    x04.0
5924
....................             if (bit_test(len,9)) {bit_set(i,1);} 
5924
....................             if (bit_test(len,9)) {bit_set(i,1);} 
5925
066E:  BTFSC  x03.1
5925
066E:  BTFSC  x03.1
5926
0670:  BSF    x04.1
5926
0670:  BSF    x04.1
5927
....................             EP_BDxST_O(en) = i; 
5927
....................             EP_BDxST_O(en) = i; 
5928
0672:  CLRF   x49
5928
0672:  CLRF   x49
5929
0674:  MOVFF  6FE,748
5929
0674:  MOVFF  6FE,748
5930
0678:  CLRF   x4B
5930
0678:  CLRF   x4B
5931
067A:  MOVLW  08
5931
067A:  MOVLW  08
5932
067C:  MOVWF  x4A
5932
067C:  MOVWF  x4A
5933
067E:  MOVLB  0
5933
067E:  MOVLB  0
5934
0680:  RCALL  02BA
5934
0680:  RCALL  02BA
5935
0682:  MOVLB  7
5935
0682:  MOVLB  7
5936
0684:  MOVFF  01,FE9
5936
0684:  MOVFF  01,FE9
5937
0688:  MOVLW  04
5937
0688:  MOVLW  04
5938
068A:  ADDWF  02,W
5938
068A:  ADDWF  02,W
5939
068C:  MOVWF  FEA
5939
068C:  MOVWF  FEA
5940
068E:  MOVFF  704,FEF
5940
068E:  MOVFF  704,FEF
5941
....................          } 
5941
....................          } 
5942
....................          if (usb_ep_tx_type[en] != USB_ENABLE_DISABLED)  
5942
....................          if (usb_ep_tx_type[en] != USB_ENABLE_DISABLED)  
5943
0692:  CLRF   03
5943
0692:  CLRF   03
5944
0694:  MOVLB  6
5944
0694:  MOVLB  6
5945
0696:  MOVF   xFE,W
5945
0696:  MOVF   xFE,W
5946
0698:  MOVFF  FF2,705
5946
0698:  MOVFF  FF2,705
5947
069C:  BCF    FF2.7
5947
069C:  BCF    FF2.7
5948
069E:  MOVLB  0
5948
069E:  MOVLB  0
5949
06A0:  RCALL  00AA
5949
06A0:  RCALL  00AA
5950
06A2:  MOVLB  7
5950
06A2:  MOVLB  7
5951
06A4:  BTFSC  x05.7
5951
06A4:  BTFSC  x05.7
5952
06A6:  BSF    FF2.7
5952
06A6:  BSF    FF2.7
5953
06A8:  SUBLW  FF
5953
06A8:  SUBLW  FF
5954
06AA:  BZ    0748
5954
06AA:  BZ    0748
5955
....................          { 
5955
....................          { 
5956
....................             new_uep |= 0x02; 
5956
....................             new_uep |= 0x02; 
5957
06AC:  BSF    x01.1
5957
06AC:  BSF    x01.1
5958
....................             EP_BDxADR_I(en) = addy; 
5958
....................             EP_BDxADR_I(en) = addy; 
5959
06AE:  CLRF   x49
5959
06AE:  CLRF   x49
5960
06B0:  MOVFF  6FE,748
5960
06B0:  MOVFF  6FE,748
5961
06B4:  CLRF   x4B
5961
06B4:  CLRF   x4B
5962
06B6:  MOVLW  08
5962
06B6:  MOVLW  08
5963
06B8:  MOVWF  x4A
5963
06B8:  MOVWF  x4A
5964
06BA:  MOVLB  0
5964
06BA:  MOVLB  0
5965
06BC:  RCALL  02BA
5965
06BC:  RCALL  02BA
5966
06BE:  MOVFF  02,706
5966
06BE:  MOVFF  02,706
5967
06C2:  MOVFF  01,705
5967
06C2:  MOVFF  01,705
5968
06C6:  MOVLW  04
5968
06C6:  MOVLW  04
5969
06C8:  MOVLB  7
5969
06C8:  MOVLB  7
5970
06CA:  ADDWF  x05,F
5970
06CA:  ADDWF  x05,F
5971
06CC:  MOVLW  00
5971
06CC:  MOVLW  00
5972
06CE:  ADDWFC x06,F
5972
06CE:  ADDWFC x06,F
5973
06D0:  MOVLW  02
5973
06D0:  MOVLW  02
5974
06D2:  ADDWF  x05,W
5974
06D2:  ADDWF  x05,W
5975
06D4:  MOVWF  01
5975
06D4:  MOVWF  01
5976
06D6:  MOVLW  00
5976
06D6:  MOVLW  00
5977
06D8:  ADDWFC x06,W
5977
06D8:  ADDWFC x06,W
5978
06DA:  MOVWF  03
5978
06DA:  MOVWF  03
5979
06DC:  MOVFF  01,FE9
5979
06DC:  MOVFF  01,FE9
5980
06E0:  MOVLW  04
5980
06E0:  MOVLW  04
5981
06E2:  ADDWF  03,W
5981
06E2:  ADDWF  03,W
5982
06E4:  MOVWF  FEA
5982
06E4:  MOVWF  FEA
5983
06E6:  MOVFF  700,FEC
5983
06E6:  MOVFF  700,FEC
5984
06EA:  MOVF   FED,F
5984
06EA:  MOVF   FED,F
5985
06EC:  MOVFF  6FF,FEF
5985
06EC:  MOVFF  6FF,FEF
5986
....................             addy += usb_ep_tx_size[en]; 
5986
....................             addy += usb_ep_tx_size[en]; 
5987
06F0:  BCF    FD8.0
5987
06F0:  BCF    FD8.0
5988
06F2:  MOVLB  6
5988
06F2:  MOVLB  6
5989
06F4:  RLCF   xFE,W
5989
06F4:  RLCF   xFE,W
5990
06F6:  CLRF   03
5990
06F6:  CLRF   03
5991
06F8:  MOVFF  FF2,705
5991
06F8:  MOVFF  FF2,705
5992
06FC:  BCF    FF2.7
5992
06FC:  BCF    FF2.7
5993
06FE:  MOVLB  0
5993
06FE:  MOVLB  0
5994
0700:  RCALL  00EA
5994
0700:  RCALL  00EA
5995
0702:  TBLRD*+
5995
0702:  TBLRD*+
5996
0704:  MOVFF  FF5,03
5996
0704:  MOVFF  FF5,03
5997
0708:  MOVLB  7
5997
0708:  MOVLB  7
5998
070A:  BTFSC  x05.7
5998
070A:  BTFSC  x05.7
5999
070C:  BSF    FF2.7
5999
070C:  BSF    FF2.7
6000
070E:  MOVLB  6
6000
070E:  MOVLB  6
6001
0710:  ADDWF  xFF,F
6001
0710:  ADDWF  xFF,F
6002
0712:  MOVF   03,W
6002
0712:  MOVF   03,W
6003
0714:  MOVLB  7
6003
0714:  MOVLB  7
6004
0716:  ADDWFC x00,F
6004
0716:  ADDWFC x00,F
6005
....................             EP_BDxST_I(en) = 0x40; 
6005
....................             EP_BDxST_I(en) = 0x40; 
6006
0718:  CLRF   x49
6006
0718:  CLRF   x49
6007
071A:  MOVFF  6FE,748
6007
071A:  MOVFF  6FE,748
6008
071E:  CLRF   x4B
6008
071E:  CLRF   x4B
6009
0720:  MOVLW  08
6009
0720:  MOVLW  08
6010
0722:  MOVWF  x4A
6010
0722:  MOVWF  x4A
6011
0724:  MOVLB  0
6011
0724:  MOVLB  0
6012
0726:  RCALL  02BA
6012
0726:  RCALL  02BA
6013
0728:  MOVFF  02,706
6013
0728:  MOVFF  02,706
6014
072C:  MOVFF  01,705
6014
072C:  MOVFF  01,705
6015
0730:  MOVLW  04
6015
0730:  MOVLW  04
6016
0732:  MOVLB  7
6016
0732:  MOVLB  7
6017
0734:  ADDWF  x05,F
6017
0734:  ADDWF  x05,F
6018
0736:  MOVLW  00
6018
0736:  MOVLW  00
6019
0738:  ADDWFC x06,F
6019
0738:  ADDWFC x06,F
6020
073A:  MOVFF  705,FE9
6020
073A:  MOVFF  705,FE9
6021
073E:  MOVLW  04
6021
073E:  MOVLW  04
6022
0740:  ADDWF  x06,W
6022
0740:  ADDWF  x06,W
6023
0742:  MOVWF  FEA
6023
0742:  MOVWF  FEA
6024
0744:  MOVLW  40
6024
0744:  MOVLW  40
6025
0746:  MOVWF  FEF
6025
0746:  MOVWF  FEF
6026
....................          } 
6026
....................          } 
6027
....................          if (new_uep == 0x06) {new_uep = 0x0E;} 
6027
....................          if (new_uep == 0x06) {new_uep = 0x0E;} 
6028
0748:  MOVF   x01,W
6028
0748:  MOVF   x01,W
6029
074A:  SUBLW  06
6029
074A:  SUBLW  06
6030
074C:  BNZ   0752
6030
074C:  BNZ   0752
6031
074E:  MOVLW  0E
6031
074E:  MOVLW  0E
6032
0750:  MOVWF  x01
6032
0750:  MOVWF  x01
6033
....................          if (usb_ep_tx_type[en] != USB_ENABLE_ISOCHRONOUS) {new_uep |= 0x10;} 
6033
....................          if (usb_ep_tx_type[en] != USB_ENABLE_ISOCHRONOUS) {new_uep |= 0x10;} 
6034
0752:  CLRF   03
6034
0752:  CLRF   03
6035
0754:  MOVLB  6
6035
0754:  MOVLB  6
6036
0756:  MOVF   xFE,W
6036
0756:  MOVF   xFE,W
6037
0758:  MOVFF  FF2,705
6037
0758:  MOVFF  FF2,705
6038
075C:  BCF    FF2.7
6038
075C:  BCF    FF2.7
6039
075E:  MOVLB  0
6039
075E:  MOVLB  0
6040
0760:  RCALL  00AA
6040
0760:  RCALL  00AA
6041
0762:  MOVLB  7
6041
0762:  MOVLB  7
6042
0764:  BTFSC  x05.7
6042
0764:  BTFSC  x05.7
6043
0766:  BSF    FF2.7
6043
0766:  BSF    FF2.7
6044
0768:  SUBLW  01
6044
0768:  SUBLW  01
6045
076A:  BTFSS  FD8.2
6045
076A:  BTFSS  FD8.2
6046
076C:  BSF    x01.4
6046
076C:  BSF    x01.4
6047
....................           
6047
....................           
6048
....................          UEP(en) = new_uep; 
6048
....................          UEP(en) = new_uep; 
6049
076E:  CLRF   03
6049
076E:  CLRF   03
6050
0770:  MOVLB  6
6050
0770:  MOVLB  6
6051
0772:  MOVF   xFE,W
6051
0772:  MOVF   xFE,W
6052
0774:  ADDLW  70
6052
0774:  ADDLW  70
6053
0776:  MOVWF  FE9
6053
0776:  MOVWF  FE9
6054
0778:  MOVLW  0F
6054
0778:  MOVLW  0F
6055
077A:  ADDWFC 03,W
6055
077A:  ADDWFC 03,W
6056
077C:  MOVWF  FEA
6056
077C:  MOVWF  FEA
6057
077E:  MOVFF  701,FEF
6057
077E:  MOVFF  701,FEF
6058
....................       } 
6058
....................       } 
6059
0782:  INCF   xFE,F
6059
0782:  INCF   xFE,F
6060
0784:  BRA    0582
6060
0784:  BRA    0582
6061
0786:  MOVLB  0
6061
0786:  MOVLB  0
6062
....................    } 
6062
....................    } 
6063
.................... } 
6063
.................... } 
6064
0788:  GOTO   082C (RETURN)
6064
0788:  GOTO   082C (RETURN)
6065
....................  
6065
....................  
6066
.................... // see usb_hw_layer.h for documentation 
6066
.................... // see usb_hw_layer.h for documentation 
6067
.................... void usb_disable_endpoint(int8 en)  
6067
.................... void usb_disable_endpoint(int8 en)  
6068
.................... { 
6068
.................... { 
6069
....................    UEP(en) = ENDPT_DISABLED; 
6069
....................    UEP(en) = ENDPT_DISABLED; 
6070
*
6070
*
6071
02DC:  CLRF   03
6071
02DC:  CLRF   03
6072
02DE:  MOVLB  7
6072
02DE:  MOVLB  7
6073
02E0:  MOVF   x06,W
6073
02E0:  MOVF   x06,W
6074
02E2:  ADDLW  70
6074
02E2:  ADDLW  70
6075
02E4:  MOVWF  FE9
6075
02E4:  MOVWF  FE9
6076
02E6:  MOVLW  0F
6076
02E6:  MOVLW  0F
6077
02E8:  ADDWFC 03,W
6077
02E8:  ADDWFC 03,W
6078
02EA:  MOVWF  FEA
6078
02EA:  MOVWF  FEA
6079
02EC:  CLRF   FEF
6079
02EC:  CLRF   FEF
6080
....................    EP_BDxST_O(en) = 0;   //clear state, deque if necessary       
6080
....................    EP_BDxST_O(en) = 0;   //clear state, deque if necessary       
6081
02EE:  CLRF   x49
6081
02EE:  CLRF   x49
6082
02F0:  MOVFF  706,748
6082
02F0:  MOVFF  706,748
6083
02F4:  CLRF   x4B
6083
02F4:  CLRF   x4B
6084
02F6:  MOVLW  08
6084
02F6:  MOVLW  08
6085
02F8:  MOVWF  x4A
6085
02F8:  MOVWF  x4A
6086
02FA:  MOVLB  0
6086
02FA:  MOVLB  0
6087
02FC:  RCALL  02BA
6087
02FC:  RCALL  02BA
6088
02FE:  MOVLB  7
6088
02FE:  MOVLB  7
6089
0300:  MOVFF  01,FE9
6089
0300:  MOVFF  01,FE9
6090
0304:  MOVLW  04
6090
0304:  MOVLW  04
6091
0306:  ADDWF  02,W
6091
0306:  ADDWF  02,W
6092
0308:  MOVWF  FEA
6092
0308:  MOVWF  FEA
6093
030A:  CLRF   FEF
6093
030A:  CLRF   FEF
6094
....................    EP_BDxST_I(en) = 0;   //clear state, deque if necessary 
6094
....................    EP_BDxST_I(en) = 0;   //clear state, deque if necessary 
6095
030C:  CLRF   x49
6095
030C:  CLRF   x49
6096
030E:  MOVFF  706,748
6096
030E:  MOVFF  706,748
6097
0312:  CLRF   x4B
6097
0312:  CLRF   x4B
6098
0314:  MOVLW  08
6098
0314:  MOVLW  08
6099
0316:  MOVWF  x4A
6099
0316:  MOVWF  x4A
6100
0318:  MOVLB  0
6100
0318:  MOVLB  0
6101
031A:  RCALL  02BA
6101
031A:  RCALL  02BA
6102
031C:  MOVFF  02,708
6102
031C:  MOVFF  02,708
6103
0320:  MOVFF  01,707
6103
0320:  MOVFF  01,707
6104
0324:  MOVLW  04
6104
0324:  MOVLW  04
6105
0326:  MOVLB  7
6105
0326:  MOVLB  7
6106
0328:  ADDWF  x07,F
6106
0328:  ADDWF  x07,F
6107
032A:  MOVLW  00
6107
032A:  MOVLW  00
6108
032C:  ADDWFC x08,F
6108
032C:  ADDWFC x08,F
6109
032E:  MOVFF  707,FE9
6109
032E:  MOVFF  707,FE9
6110
0332:  MOVLW  04
6110
0332:  MOVLW  04
6111
0334:  ADDWF  x08,W
6111
0334:  ADDWF  x08,W
6112
0336:  MOVWF  FEA
6112
0336:  MOVWF  FEA
6113
0338:  CLRF   FEF
6113
0338:  CLRF   FEF
6114
.................... } 
6114
.................... } 
6115
033A:  MOVLB  0
6115
033A:  MOVLB  0
6116
033C:  RETLW  00
6116
033C:  RETLW  00
6117
....................  
6117
....................  
6118
.................... // see usb_hw_layer.h for documentation 
6118
.................... // see usb_hw_layer.h for documentation 
6119
.................... void usb_disable_endpoints(void)  
6119
.................... void usb_disable_endpoints(void)  
6120
.................... { 
6120
.................... { 
6121
....................    int8 i; 
6121
....................    int8 i; 
6122
....................     
6122
....................     
6123
....................    for (i=1; i<16; i++) 
6123
....................    for (i=1; i<16; i++) 
6124
033E:  MOVLW  01
6124
033E:  MOVLW  01
6125
0340:  MOVLB  7
6125
0340:  MOVLB  7
6126
0342:  MOVWF  x05
6126
0342:  MOVWF  x05
6127
0344:  MOVF   x05,W
6127
0344:  MOVF   x05,W
6128
0346:  SUBLW  0F
6128
0346:  SUBLW  0F
6129
0348:  BNC   0358
6129
0348:  BNC   0358
6130
....................       usb_disable_endpoint(i); 
6130
....................       usb_disable_endpoint(i); 
6131
034A:  MOVFF  705,706
6131
034A:  MOVFF  705,706
6132
034E:  MOVLB  0
6132
034E:  MOVLB  0
6133
0350:  RCALL  02DC
6133
0350:  RCALL  02DC
6134
0352:  MOVLB  7
6134
0352:  MOVLB  7
6135
0354:  INCF   x05,F
6135
0354:  INCF   x05,F
6136
0356:  BRA    0344
6136
0356:  BRA    0344
6137
....................        
6137
....................        
6138
....................    //__usb_kbhit_status=0; 
6138
....................    //__usb_kbhit_status=0; 
6139
.................... } 
6139
.................... } 
6140
0358:  MOVLB  0
6140
0358:  MOVLB  0
6141
035A:  RETLW  00
6141
035A:  RETLW  00
6142
....................  
6142
....................  
6143
.................... /// END Hardware layer functions required by USB.C 
6143
.................... /// END Hardware layer functions required by USB.C 
6144
....................  
6144
....................  
6145
....................  
6145
....................  
6146
.................... /// BEGIN USB Interrupt Service Routine 
6146
.................... /// BEGIN USB Interrupt Service Routine 
6147
....................  
6147
....................  
6148
.................... static void usb_clear_trn(void) 
6148
.................... static void usb_clear_trn(void) 
6149
.................... { 
6149
.................... { 
6150
....................    UIR_TRN = 0;             
6150
....................    UIR_TRN = 0;             
6151
*
6151
*
6152
03AA:  BCF    F68.3
6152
03AA:  BCF    F68.3
6153
....................    delay_cycles(6); 
6153
....................    delay_cycles(6); 
6154
03AC:  BRA    03AE
6154
03AC:  BRA    03AE
6155
03AE:  BRA    03B0
6155
03AE:  BRA    03B0
6156
03B0:  BRA    03B2
6156
03B0:  BRA    03B2
6157
.................... } 
6157
.................... } 
6158
03B2:  RETLW  00
6158
03B2:  RETLW  00
6159
....................  
6159
....................  
6160
.................... /***************************************************************************** 
6160
.................... /***************************************************************************** 
6161
.................... /* usb_handle_interrupt() 
6161
.................... /* usb_handle_interrupt() 
6162
.................... /* 
6162
.................... /* 
6163
.................... /* Summary: Checks the interrupt, and acts upon event.  Processing finished 
6163
.................... /* Summary: Checks the interrupt, and acts upon event.  Processing finished 
6164
.................... /*          tokens is the majority of this code, and is handled by usb.c 
6164
.................... /*          tokens is the majority of this code, and is handled by usb.c 
6165
.................... /* 
6165
.................... /* 
6166
.................... /* NOTE: If you wish to change to a polling method (and not an interrupt  
6166
.................... /* NOTE: If you wish to change to a polling method (and not an interrupt  
6167
.................... /*       method), then you must call this function rapidly.  If there is more  
6167
.................... /*       method), then you must call this function rapidly.  If there is more  
6168
.................... /*       than 10ms latency the PC may think the USB device is stalled and 
6168
.................... /*       than 10ms latency the PC may think the USB device is stalled and 
6169
.................... /*       disable it. 
6169
.................... /*       disable it. 
6170
.................... /*       To switch to a polling method, remove the #int_usb line above this  
6170
.................... /*       To switch to a polling method, remove the #int_usb line above this  
6171
.................... /*       fuction.  Also, goto usb_init() and remove the code that enables the  
6171
.................... /*       fuction.  Also, goto usb_init() and remove the code that enables the  
6172
.................... /*       USB interrupt. 
6172
.................... /*       USB interrupt. 
6173
.................... /******************************************************************************/ 
6173
.................... /******************************************************************************/ 
6174
.................... #int_usb 
6174
.................... #int_usb 
6175
.................... void usb_isr()  
6175
.................... void usb_isr()  
6176
.................... { 
6176
.................... { 
6177
....................    int8 TRNAttempts; 
6177
....................    int8 TRNAttempts; 
6178
....................     
6178
....................     
6179
....................    if (usb_state == USB_STATE_DETACHED) return;   //should never happen, though 
6179
....................    if (usb_state == USB_STATE_DETACHED) return;   //should never happen, though 
6180
*
6180
*
6181
1274:  MOVF   24,F
6181
1274:  MOVF   24,F
6182
1276:  BNZ   127A
6182
1276:  BNZ   127A
6183
1278:  BRA    12EE
6183
1278:  BRA    12EE
6184
....................    if (UIR)  
6184
....................    if (UIR)  
6185
127A:  MOVF   F68,F
6185
127A:  MOVF   F68,F
6186
127C:  BZ    12EE
6186
127C:  BZ    12EE
6187
....................    { 
6187
....................    { 
6188
....................       debug_usb(debug_putc,"\r\n\n[%X] ",UIR); 
6188
....................       debug_usb(debug_putc,"\r\n\n[%X] ",UIR); 
6189
....................        
6189
....................        
6190
....................       //activity detected.  (only enable after sleep) 
6190
....................       //activity detected.  (only enable after sleep) 
6191
....................       if (UIR_ACTV && UIE_ACTV) {usb_isr_activity();} 
6191
....................       if (UIR_ACTV && UIE_ACTV) {usb_isr_activity();} 
6192
127E:  BTFSS  F68.2
6192
127E:  BTFSS  F68.2
6193
1280:  BRA    128A
6193
1280:  BRA    128A
6194
1282:  BTFSS  F69.2
6194
1282:  BTFSS  F69.2
6195
1284:  BRA    128A
6195
1284:  BRA    128A
6196
1286:  GOTO   0274
6196
1286:  GOTO   0274
6197
....................  
6197
....................  
6198
....................       if (UCON_SUSPND) return; 
6198
....................       if (UCON_SUSPND) return; 
6199
128A:  BTFSS  F6D.1
6199
128A:  BTFSS  F6D.1
6200
128C:  BRA    1290
6200
128C:  BRA    1290
6201
128E:  BRA    12EE
6201
128E:  BRA    12EE
6202
....................  
6202
....................  
6203
....................       if (UIR_STALL && UIE_STALL) {usb_isr_stall();}        //a stall handshake was sent 
6203
....................       if (UIR_STALL && UIE_STALL) {usb_isr_stall();}        //a stall handshake was sent 
6204
1290:  BTFSS  F68.5
6204
1290:  BTFSS  F68.5
6205
1292:  BRA    129C
6205
1292:  BRA    129C
6206
1294:  BTFSS  F69.5
6206
1294:  BTFSS  F69.5
6207
1296:  BRA    129C
6207
1296:  BRA    129C
6208
1298:  GOTO   02A4
6208
1298:  GOTO   02A4
6209
....................  
6209
....................  
6210
....................       if (UIR_UERR && UIE_UERR) {usb_isr_uerr();}          //error has been detected 
6210
....................       if (UIR_UERR && UIE_UERR) {usb_isr_uerr();}          //error has been detected 
6211
129C:  BTFSS  F68.1
6211
129C:  BTFSS  F68.1
6212
129E:  BRA    12A8
6212
129E:  BRA    12A8
6213
12A0:  BTFSS  F69.1
6213
12A0:  BTFSS  F69.1
6214
12A2:  BRA    12A8
6214
12A2:  BRA    12A8
6215
12A4:  GOTO   02B2
6215
12A4:  GOTO   02B2
6216
....................  
6216
....................  
6217
....................       if (UIR_URST && UIE_URST) {usb_isr_rst();}        //usb reset has been detected 
6217
....................       if (UIR_URST && UIE_URST) {usb_isr_rst();}        //usb reset has been detected 
6218
12A8:  BTFSS  F68.0
6218
12A8:  BTFSS  F68.0
6219
12AA:  BRA    12B4
6219
12AA:  BRA    12B4
6220
12AC:  BTFSS  F69.0
6220
12AC:  BTFSS  F69.0
6221
12AE:  BRA    12B4
6221
12AE:  BRA    12B4
6222
12B0:  GOTO   03B4
6222
12B0:  GOTO   03B4
6223
....................  
6223
....................  
6224
....................       if (UIR_IDLE && UIE_IDLE) {usb_isr_uidle();}        //idle time, we can go to sleep 
6224
....................       if (UIR_IDLE && UIE_IDLE) {usb_isr_uidle();}        //idle time, we can go to sleep 
6225
12B4:  BTFSS  F68.4
6225
12B4:  BTFSS  F68.4
6226
12B6:  BRA    12C0
6226
12B6:  BRA    12C0
6227
12B8:  BTFSS  F69.4
6227
12B8:  BTFSS  F69.4
6228
12BA:  BRA    12C0
6228
12BA:  BRA    12C0
6229
12BC:  GOTO   03DE
6229
12BC:  GOTO   03DE
6230
....................        
6230
....................        
6231
....................       if (UIR_SOF && UIE_SOF) {usb_isr_sof();} 
6231
....................       if (UIR_SOF && UIE_SOF) {usb_isr_sof();} 
6232
12C0:  BTFSS  F68.6
6232
12C0:  BTFSS  F68.6
6233
12C2:  BRA    12CC
6233
12C2:  BRA    12CC
6234
12C4:  BTFSS  F69.6
6234
12C4:  BTFSS  F69.6
6235
12C6:  BRA    12CC
6235
12C6:  BRA    12CC
6236
12C8:  GOTO   03E8
6236
12C8:  GOTO   03E8
6237
....................  
6237
....................  
6238
....................       TRNAttempts = 0; 
6238
....................       TRNAttempts = 0; 
6239
12CC:  MOVLB  6
6239
12CC:  MOVLB  6
6240
12CE:  CLRF   xFA
6240
12CE:  CLRF   xFA
6241
....................       do 
6241
....................       do 
6242
....................       { 
6242
....................       { 
6243
....................          if (UIR_TRN && UIE_TRN)  
6243
....................          if (UIR_TRN && UIE_TRN)  
6244
12D0:  BTFSS  F68.3
6244
12D0:  BTFSS  F68.3
6245
12D2:  BRA    12E0
6245
12D2:  BRA    12E0
6246
12D4:  BTFSS  F69.3
6246
12D4:  BTFSS  F69.3
6247
12D6:  BRA    12E0
6247
12D6:  BRA    12E0
6248
....................          { 
6248
....................          { 
6249
....................             usb_isr_tok_dne(); 
6249
....................             usb_isr_tok_dne(); 
6250
12D8:  MOVLB  0
6250
12D8:  MOVLB  0
6251
12DA:  BRA    108A
6251
12DA:  BRA    108A
6252
....................          } 
6252
....................          } 
6253
....................          else 
6253
....................          else 
6254
12DC:  BRA    12E2
6254
12DC:  BRA    12E2
6255
12DE:  MOVLB  6
6255
12DE:  MOVLB  6
6256
....................             break; 
6256
....................             break; 
6257
12E0:  BRA    12EC
6257
12E0:  BRA    12EC
6258
....................       } while (TRNAttempts++ < 4); 
6258
....................       } while (TRNAttempts++ < 4); 
6259
12E2:  MOVLB  6
6259
12E2:  MOVLB  6
6260
12E4:  MOVF   xFA,W
6260
12E4:  MOVF   xFA,W
6261
12E6:  INCF   xFA,F
6261
12E6:  INCF   xFA,F
6262
12E8:  SUBLW  03
6262
12E8:  SUBLW  03
6263
12EA:  BC    12D0
6263
12EA:  BC    12D0
6264
12EC:  MOVLB  0
6264
12EC:  MOVLB  0
6265
....................    } 
6265
....................    } 
6266
.................... } 
6266
.................... } 
6267
....................  
6267
....................  
6268
.................... // SOF interrupt not handled.  user must add this depending on application 
6268
.................... // SOF interrupt not handled.  user must add this depending on application 
6269
12EE:  BCF    FA1.5
6269
12EE:  BCF    FA1.5
6270
12F0:  GOTO   0064
6270
12F0:  GOTO   0064
6271
.................... void usb_isr_sof(void)  
6271
.................... void usb_isr_sof(void)  
6272
.................... { 
6272
.................... { 
6273
....................    debug_usb(debug_putc, "\r\nSOF"); 
6273
....................    debug_usb(debug_putc, "\r\nSOF"); 
6274
....................     
6274
....................     
6275
....................    UIR_SOF = 0; 
6275
....................    UIR_SOF = 0; 
6276
*
6276
*
6277
03E8:  BCF    F68.6
6277
03E8:  BCF    F68.6
6278
.................... } 
6278
.................... } 
6279
03EA:  GOTO   12CC (RETURN)
6279
03EA:  GOTO   12CC (RETURN)
6280
....................  
6280
....................  
6281
.................... /***************************************************************************** 
6281
.................... /***************************************************************************** 
6282
.................... /* usb_isr_rst() 
6282
.................... /* usb_isr_rst() 
6283
.................... /* 
6283
.................... /* 
6284
.................... /* Summary: The host (computer) sent us a RESET command.  Reset USB device 
6284
.................... /* Summary: The host (computer) sent us a RESET command.  Reset USB device 
6285
.................... /*          and token handler code to initial state. 
6285
.................... /*          and token handler code to initial state. 
6286
.................... /* 
6286
.................... /* 
6287
.................... /******************************************************************************/ 
6287
.................... /******************************************************************************/ 
6288
.................... void usb_isr_rst(void)  
6288
.................... void usb_isr_rst(void)  
6289
.................... { 
6289
.................... { 
6290
....................    debug_usb(debug_putc,"R"); 
6290
....................    debug_usb(debug_putc,"R"); 
6291
....................  
6291
....................  
6292
....................    UEIR = 0; 
6292
....................    UEIR = 0; 
6293
*
6293
*
6294
03B4:  CLRF   F6A
6294
03B4:  CLRF   F6A
6295
....................    UIR = 0; 
6295
....................    UIR = 0; 
6296
03B6:  CLRF   F68
6296
03B6:  CLRF   F68
6297
....................    UEIE = 0x9F; 
6297
....................    UEIE = 0x9F; 
6298
03B8:  MOVLW  9F
6298
03B8:  MOVLW  9F
6299
03BA:  MOVWF  F6B
6299
03BA:  MOVWF  F6B
6300
....................    UIE = STANDARD_INTS & ~__USB_UIF_ACTIVE; 
6300
....................    UIE = STANDARD_INTS & ~__USB_UIF_ACTIVE; 
6301
03BC:  MOVLW  3D
6301
03BC:  MOVLW  3D
6302
03BE:  MOVWF  F69
6302
03BE:  MOVWF  F69
6303
....................  
6303
....................  
6304
....................    UADDR = 0; 
6304
....................    UADDR = 0; 
6305
03C0:  CLRF   F6E
6305
03C0:  CLRF   F6E
6306
....................  
6306
....................  
6307
....................    usb_disable_endpoints(); 
6307
....................    usb_disable_endpoints(); 
6308
03C2:  RCALL  033E
6308
03C2:  RCALL  033E
6309
....................     
6309
....................     
6310
....................    usb_token_reset(); 
6310
....................    usb_token_reset(); 
6311
03C4:  RCALL  037E
6311
03C4:  RCALL  037E
6312
....................  
6312
....................  
6313
....................    UEP(0) = ENDPT_CONTROL | 0x10; 
6313
....................    UEP(0) = ENDPT_CONTROL | 0x10; 
6314
03C6:  MOVLW  16
6314
03C6:  MOVLW  16
6315
03C8:  MOVWF  F70
6315
03C8:  MOVWF  F70
6316
....................  
6316
....................  
6317
....................    while (UIR_TRN)  
6317
....................    while (UIR_TRN)  
6318
....................    { 
6318
....................    { 
6319
03CA:  BTFSS  F68.3
6319
03CA:  BTFSS  F68.3
6320
03CC:  BRA    03D2
6320
03CC:  BRA    03D2
6321
....................       usb_clear_trn(); 
6321
....................       usb_clear_trn(); 
6322
03CE:  RCALL  03AA
6322
03CE:  RCALL  03AA
6323
....................    } 
6323
....................    } 
6324
03D0:  BRA    03CA
6324
03D0:  BRA    03CA
6325
....................  
6325
....................  
6326
....................    UCON_PKTDIS = 0; //SIE token and packet processing enabled 
6326
....................    UCON_PKTDIS = 0; //SIE token and packet processing enabled 
6327
03D2:  BCF    F6D.4
6327
03D2:  BCF    F6D.4
6328
....................  
6328
....................  
6329
....................    usb_init_ep0_setup(); 
6329
....................    usb_init_ep0_setup(); 
6330
03D4:  RCALL  0284
6330
03D4:  RCALL  0284
6331
....................  
6331
....................  
6332
....................    usb_state = USB_STATE_DEFAULT; //put usb mcu into default state 
6332
....................    usb_state = USB_STATE_DEFAULT; //put usb mcu into default state 
6333
03D6:  MOVLW  03
6333
03D6:  MOVLW  03
6334
03D8:  MOVWF  24
6334
03D8:  MOVWF  24
6335
.................... } 
6335
.................... } 
6336
03DA:  GOTO   12B4 (RETURN)
6336
03DA:  GOTO   12B4 (RETURN)
6337
....................  
6337
....................  
6338
.................... /***************************************************************************** 
6338
.................... /***************************************************************************** 
6339
.................... /* usb_init_ep0_setup() 
6339
.................... /* usb_init_ep0_setup() 
6340
.................... /* 
6340
.................... /* 
6341
.................... /* Summary: Configure EP0 to receive setup packets 
6341
.................... /* Summary: Configure EP0 to receive setup packets 
6342
.................... /* 
6342
.................... /* 
6343
.................... /*****************************************************************************/ 
6343
.................... /*****************************************************************************/ 
6344
.................... void usb_init_ep0_setup(void)  
6344
.................... void usb_init_ep0_setup(void)  
6345
.................... { 
6345
.................... { 
6346
....................     EP_BDxCNT_O(0) = USB_MAX_EP0_PACKET_LENGTH; 
6346
....................     EP_BDxCNT_O(0) = USB_MAX_EP0_PACKET_LENGTH; 
6347
*
6347
*
6348
0284:  MOVLW  40
6348
0284:  MOVLW  40
6349
0286:  MOVLB  4
6349
0286:  MOVLB  4
6350
0288:  MOVWF  x01
6350
0288:  MOVWF  x01
6351
....................     EP_BDxADR_O(0) = USB_DATA_BUFFER_LOCATION; 
6351
....................     EP_BDxADR_O(0) = USB_DATA_BUFFER_LOCATION; 
6352
028A:  MOVLW  04
6352
028A:  MOVLW  04
6353
028C:  MOVWF  x03
6353
028C:  MOVWF  x03
6354
028E:  MOVLW  18
6354
028E:  MOVLW  18
6355
0290:  MOVWF  x02
6355
0290:  MOVWF  x02
6356
....................    #if USB_IGNORE_RX_DTS 
6356
....................    #if USB_IGNORE_RX_DTS 
6357
....................     EP_BDxST_O(0) = 0x80; //give control to SIE, data toggle synch off 
6357
....................     EP_BDxST_O(0) = 0x80; //give control to SIE, data toggle synch off 
6358
....................    #else 
6358
....................    #else 
6359
....................     EP_BDxST_O(0) = 0x88; //give control to SIE, DATA0, data toggle synch on 
6359
....................     EP_BDxST_O(0) = 0x88; //give control to SIE, DATA0, data toggle synch on 
6360
0292:  MOVLW  88
6360
0292:  MOVLW  88
6361
0294:  MOVWF  x00
6361
0294:  MOVWF  x00
6362
....................    #endif 
6362
....................    #endif 
6363
....................  
6363
....................  
6364
....................     EP_BDxST_I(0) = 0; 
6364
....................     EP_BDxST_I(0) = 0; 
6365
0296:  CLRF   x04
6365
0296:  CLRF   x04
6366
....................     EP_BDxADR_I(0) = USB_DATA_BUFFER_LOCATION + (int16)USB_MAX_EP0_PACKET_LENGTH; 
6366
....................     EP_BDxADR_I(0) = USB_DATA_BUFFER_LOCATION + (int16)USB_MAX_EP0_PACKET_LENGTH; 
6367
0298:  MOVLW  04
6367
0298:  MOVLW  04
6368
029A:  MOVWF  x07
6368
029A:  MOVWF  x07
6369
029C:  MOVLW  58
6369
029C:  MOVLW  58
6370
029E:  MOVWF  x06
6370
029E:  MOVWF  x06
6371
.................... } 
6371
.................... } 
6372
02A0:  MOVLB  0
6372
02A0:  MOVLB  0
6373
02A2:  RETLW  00
6373
02A2:  RETLW  00
6374
....................  
6374
....................  
6375
.................... /******************************************************************************* 
6375
.................... /******************************************************************************* 
6376
.................... /* usb_isr_uerr() 
6376
.................... /* usb_isr_uerr() 
6377
.................... /* 
6377
.................... /* 
6378
.................... /* Summary: The USB peripheral had an error.  If user specified, error counter 
6378
.................... /* Summary: The USB peripheral had an error.  If user specified, error counter 
6379
.................... /*          will incerement.  If having problems check the status of these 8 bytes. 
6379
.................... /*          will incerement.  If having problems check the status of these 8 bytes. 
6380
.................... /* 
6380
.................... /* 
6381
.................... /* NOTE: This code is not enabled by default. 
6381
.................... /* NOTE: This code is not enabled by default. 
6382
.................... /********************************************************************************/ 
6382
.................... /********************************************************************************/ 
6383
.................... void usb_isr_uerr(void) 
6383
.................... void usb_isr_uerr(void) 
6384
.................... { 
6384
.................... { 
6385
....................   #if USB_USE_ERROR_COUNTER 
6385
....................   #if USB_USE_ERROR_COUNTER 
6386
....................    int ints; 
6386
....................    int ints; 
6387
....................   #endif 
6387
....................   #endif 
6388
....................  
6388
....................  
6389
....................    debug_usb(debug_putc,"E %X ",UEIR); 
6389
....................    debug_usb(debug_putc,"E %X ",UEIR); 
6390
....................  
6390
....................  
6391
....................   #if USB_USE_ERROR_COUNTER 
6391
....................   #if USB_USE_ERROR_COUNTER 
6392
....................    ints=UEIR & UEIE; //mask off the flags with the ones that are enabled 
6392
....................    ints=UEIR & UEIE; //mask off the flags with the ones that are enabled 
6393
....................  
6393
....................  
6394
....................    if ( bit_test(ints,0) )  
6394
....................    if ( bit_test(ints,0) )  
6395
....................    {  
6395
....................    {  
6396
....................       //increment pid_error counter 
6396
....................       //increment pid_error counter 
6397
....................       debug_usb(debug_putc,"PID "); 
6397
....................       debug_usb(debug_putc,"PID "); 
6398
....................       ERROR_COUNTER[0]++; 
6398
....................       ERROR_COUNTER[0]++; 
6399
....................    } 
6399
....................    } 
6400
....................  
6400
....................  
6401
....................    if ( bit_test(ints,1) )  
6401
....................    if ( bit_test(ints,1) )  
6402
....................    {   
6402
....................    {   
6403
....................       //increment crc5 error counter 
6403
....................       //increment crc5 error counter 
6404
....................       debug_usb(debug_putc,"CRC5 "); 
6404
....................       debug_usb(debug_putc,"CRC5 "); 
6405
....................       ERROR_COUNTER[1]++; 
6405
....................       ERROR_COUNTER[1]++; 
6406
....................    } 
6406
....................    } 
6407
....................  
6407
....................  
6408
....................    if ( bit_test(ints,2) )  
6408
....................    if ( bit_test(ints,2) )  
6409
....................    { 
6409
....................    { 
6410
....................       //increment crc16 error counter 
6410
....................       //increment crc16 error counter 
6411
....................       debug_usb(debug_putc,"CRC16 "); 
6411
....................       debug_usb(debug_putc,"CRC16 "); 
6412
....................       ERROR_COUNTER[2]++; 
6412
....................       ERROR_COUNTER[2]++; 
6413
....................    } 
6413
....................    } 
6414
....................  
6414
....................  
6415
....................    if ( bit_test(ints,3) )  
6415
....................    if ( bit_test(ints,3) )  
6416
....................    {   
6416
....................    {   
6417
....................       //increment dfn8 error counter 
6417
....................       //increment dfn8 error counter 
6418
....................       debug_usb(debug_putc,"DFN8 "); 
6418
....................       debug_usb(debug_putc,"DFN8 "); 
6419
....................       ERROR_COUNTER[3]++; 
6419
....................       ERROR_COUNTER[3]++; 
6420
....................    } 
6420
....................    } 
6421
....................  
6421
....................  
6422
....................    if ( bit_test(ints,4) )  
6422
....................    if ( bit_test(ints,4) )  
6423
....................    {   
6423
....................    {   
6424
....................       //increment bto error counter 
6424
....................       //increment bto error counter 
6425
....................       debug_usb(debug_putc,"BTO "); 
6425
....................       debug_usb(debug_putc,"BTO "); 
6426
....................       ERROR_COUNTER[4]++; 
6426
....................       ERROR_COUNTER[4]++; 
6427
....................    } 
6427
....................    } 
6428
....................  
6428
....................  
6429
....................    if ( bit_test(ints,7) )  
6429
....................    if ( bit_test(ints,7) )  
6430
....................    {  
6430
....................    {  
6431
....................       //increment bts error counter 
6431
....................       //increment bts error counter 
6432
....................       debug_usb(debug_putc,"BTS "); 
6432
....................       debug_usb(debug_putc,"BTS "); 
6433
....................       ERROR_COUNTER[5]++; 
6433
....................       ERROR_COUNTER[5]++; 
6434
....................    } 
6434
....................    } 
6435
....................   #endif 
6435
....................   #endif 
6436
....................  
6436
....................  
6437
....................    UEIR = 0; 
6437
....................    UEIR = 0; 
6438
*
6438
*
6439
02B2:  CLRF   F6A
6439
02B2:  CLRF   F6A
6440
....................    UIR_UERR = 0; 
6440
....................    UIR_UERR = 0; 
6441
02B4:  BCF    F68.1
6441
02B4:  BCF    F68.1
6442
.................... } 
6442
.................... } 
6443
02B6:  GOTO   12A8 (RETURN)
6443
02B6:  GOTO   12A8 (RETURN)
6444
....................  
6444
....................  
6445
.................... /***************************************************************************** 
6445
.................... /***************************************************************************** 
6446
.................... /* usb_isr_uidle() 
6446
.................... /* usb_isr_uidle() 
6447
.................... /* 
6447
.................... /* 
6448
.................... /* Summary: USB peripheral detected IDLE.  Put the USB peripheral to sleep. 
6448
.................... /* Summary: USB peripheral detected IDLE.  Put the USB peripheral to sleep. 
6449
.................... /* 
6449
.................... /* 
6450
.................... /*****************************************************************************/ 
6450
.................... /*****************************************************************************/ 
6451
.................... void usb_isr_uidle(void) 
6451
.................... void usb_isr_uidle(void) 
6452
.................... { 
6452
.................... { 
6453
....................    debug_usb(debug_putc, "I"); 
6453
....................    debug_usb(debug_putc, "I"); 
6454
....................  
6454
....................  
6455
....................    UIE_ACTV = 1;   //enable activity interrupt flag. (we are now suspended until we get an activity interrupt. nice) 
6455
....................    UIE_ACTV = 1;   //enable activity interrupt flag. (we are now suspended until we get an activity interrupt. nice) 
6456
*
6456
*
6457
03DE:  BSF    F69.2
6457
03DE:  BSF    F69.2
6458
....................    UIR_IDLE = 0; //clear idle interrupt flag 
6458
....................    UIR_IDLE = 0; //clear idle interrupt flag 
6459
03E0:  BCF    F68.4
6459
03E0:  BCF    F68.4
6460
....................    UCON_SUSPND = 1; //set suspend. we are now suspended 
6460
....................    UCON_SUSPND = 1; //set suspend. we are now suspended 
6461
03E2:  BSF    F6D.1
6461
03E2:  BSF    F6D.1
6462
.................... } 
6462
.................... } 
6463
03E4:  GOTO   12C0 (RETURN)
6463
03E4:  GOTO   12C0 (RETURN)
6464
....................  
6464
....................  
6465
....................  
6465
....................  
6466
.................... /****************************************************************************** 
6466
.................... /****************************************************************************** 
6467
.................... /* usb_isr_activity() 
6467
.................... /* usb_isr_activity() 
6468
.................... /* 
6468
.................... /* 
6469
.................... /* Summary: USB peripheral detected activity on the USB device.  Wake-up the USB 
6469
.................... /* Summary: USB peripheral detected activity on the USB device.  Wake-up the USB 
6470
.................... /*          peripheral. 
6470
.................... /*          peripheral. 
6471
.................... /* 
6471
.................... /* 
6472
.................... /*****************************************************************************/ 
6472
.................... /*****************************************************************************/ 
6473
.................... void usb_isr_activity(void) 
6473
.................... void usb_isr_activity(void) 
6474
.................... { 
6474
.................... { 
6475
....................    debug_usb(debug_putc, "A"); 
6475
....................    debug_usb(debug_putc, "A"); 
6476
....................  
6476
....................  
6477
....................    UCON_SUSPND = 0; //turn off low power suspending 
6477
....................    UCON_SUSPND = 0; //turn off low power suspending 
6478
*
6478
*
6479
0274:  BCF    F6D.1
6479
0274:  BCF    F6D.1
6480
....................    UIE_ACTV = 0; //clear activity interupt enabling 
6480
....................    UIE_ACTV = 0; //clear activity interupt enabling 
6481
0276:  BCF    F69.2
6481
0276:  BCF    F69.2
6482
....................     
6482
....................     
6483
....................    while(UIR_ACTV) 
6483
....................    while(UIR_ACTV) 
6484
....................       UIR_ACTV = 0; 
6484
....................       UIR_ACTV = 0; 
6485
0278:  BTFSS  F68.2
6485
0278:  BTFSS  F68.2
6486
027A:  BRA    0280
6486
027A:  BRA    0280
6487
027C:  BCF    F68.2
6487
027C:  BCF    F68.2
6488
027E:  BRA    0278
6488
027E:  BRA    0278
6489
.................... } 
6489
.................... } 
6490
0280:  GOTO   128A (RETURN)
6490
0280:  GOTO   128A (RETURN)
6491
....................  
6491
....................  
6492
.................... /****************************************************************************** 
6492
.................... /****************************************************************************** 
6493
.................... /* usb_isr_stall() 
6493
.................... /* usb_isr_stall() 
6494
.................... /* 
6494
.................... /* 
6495
.................... /* Summary: Stall handshake detected. 
6495
.................... /* Summary: Stall handshake detected. 
6496
.................... /* 
6496
.................... /* 
6497
.................... /*****************************************************************************/ 
6497
.................... /*****************************************************************************/ 
6498
.................... void usb_isr_stall(void)  
6498
.................... void usb_isr_stall(void)  
6499
.................... { 
6499
.................... { 
6500
....................    debug_usb(debug_putc, "S"); 
6500
....................    debug_usb(debug_putc, "S"); 
6501
....................     
6501
....................     
6502
....................     
6502
....................     
6503
....................    if (bit_test(UEP(0),0))  
6503
....................    if (bit_test(UEP(0),0))  
6504
*
6504
*
6505
02A4:  BTFSS  F70.0
6505
02A4:  BTFSS  F70.0
6506
02A6:  BRA    02AC
6506
02A6:  BRA    02AC
6507
....................    { 
6507
....................    { 
6508
....................       usb_init_ep0_setup(); 
6508
....................       usb_init_ep0_setup(); 
6509
02A8:  RCALL  0284
6509
02A8:  RCALL  0284
6510
....................       bit_clear(UEP(0), 0); 
6510
....................       bit_clear(UEP(0), 0); 
6511
02AA:  BCF    F70.0
6511
02AA:  BCF    F70.0
6512
....................    } 
6512
....................    } 
6513
....................     
6513
....................     
6514
....................    UIR_STALL = 0; 
6514
....................    UIR_STALL = 0; 
6515
02AC:  BCF    F68.5
6515
02AC:  BCF    F68.5
6516
.................... } 
6516
.................... } 
6517
02AE:  GOTO   129C (RETURN)
6517
02AE:  GOTO   129C (RETURN)
6518
....................  
6518
....................  
6519
.................... // see usb_hw_layer.h for documentation 
6519
.................... // see usb_hw_layer.h for documentation 
6520
.................... void usb_request_send_response(unsigned int8 len) {__setup_0_tx_size = len;} 
6520
.................... void usb_request_send_response(unsigned int8 len) {__setup_0_tx_size = len;} 
6521
*
6521
*
6522
03EE:  MOVFF  700,25
6522
03EE:  MOVFF  700,25
6523
03F2:  RETLW  00
6523
03F2:  RETLW  00
6524
.................... void usb_request_get_data(void)  {__setup_0_tx_size = 0xFE;} 
6524
.................... void usb_request_get_data(void)  {__setup_0_tx_size = 0xFE;} 
6525
*
6525
*
6526
0B0C:  MOVLW  FE
6526
0B0C:  MOVLW  FE
6527
0B0E:  MOVWF  25
6527
0B0E:  MOVWF  25
6528
0B10:  RETLW  00
6528
0B10:  RETLW  00
6529
.................... void usb_request_stall(void)  {__setup_0_tx_size = 0xFF;} 
6529
.................... void usb_request_stall(void)  {__setup_0_tx_size = 0xFF;} 
6530
*
6530
*
6531
03F4:  MOVLW  FF
6531
03F4:  MOVLW  FF
6532
03F6:  MOVWF  25
6532
03F6:  MOVWF  25
6533
03F8:  RETLW  00
6533
03F8:  RETLW  00
6534
....................  
6534
....................  
6535
.................... /***************************************************************************** 
6535
.................... /***************************************************************************** 
6536
.................... /* usb_isr_tok_dne() 
6536
.................... /* usb_isr_tok_dne() 
6537
.................... /* 
6537
.................... /* 
6538
.................... /* Summary: A Token (IN/OUT/SETUP) has been received by the USB peripheral. 
6538
.................... /* Summary: A Token (IN/OUT/SETUP) has been received by the USB peripheral. 
6539
.................... /*          If a setup token on EP0 was received, run the chapter 9 code and 
6539
.................... /*          If a setup token on EP0 was received, run the chapter 9 code and 
6540
.................... /*          handle the request. 
6540
.................... /*          handle the request. 
6541
.................... /*          If an IN token on EP0 was received, continue transmitting any 
6541
.................... /*          If an IN token on EP0 was received, continue transmitting any 
6542
.................... /*          unfinished requests that may take more than one packet to transmit 
6542
.................... /*          unfinished requests that may take more than one packet to transmit 
6543
.................... /*          (if necessary). 
6543
.................... /*          (if necessary). 
6544
.................... /*          If an OUT token on any other EP was received, mark that EP as ready 
6544
.................... /*          If an OUT token on any other EP was received, mark that EP as ready 
6545
.................... /*          for a usb_get_packet(). 
6545
.................... /*          for a usb_get_packet(). 
6546
.................... /*          Does not handle any IN or OUT tokens on EP0. 
6546
.................... /*          Does not handle any IN or OUT tokens on EP0. 
6547
.................... /* 
6547
.................... /* 
6548
.................... /*****************************************************************************/ 
6548
.................... /*****************************************************************************/ 
6549
.................... void usb_isr_tok_dne(void)  
6549
.................... void usb_isr_tok_dne(void)  
6550
.................... { 
6550
.................... { 
6551
....................    int8 en; 
6551
....................    int8 en; 
6552
....................  
6552
....................  
6553
....................    en = USTAT>>3; 
6553
....................    en = USTAT>>3; 
6554
*
6554
*
6555
108A:  RRCF   F6C,W
6555
108A:  RRCF   F6C,W
6556
108C:  MOVLB  6
6556
108C:  MOVLB  6
6557
108E:  MOVWF  xFB
6557
108E:  MOVWF  xFB
6558
1090:  RRCF   xFB,F
6558
1090:  RRCF   xFB,F
6559
1092:  RRCF   xFB,F
6559
1092:  RRCF   xFB,F
6560
1094:  MOVLW  1F
6560
1094:  MOVLW  1F
6561
1096:  ANDWF  xFB,F
6561
1096:  ANDWF  xFB,F
6562
....................  
6562
....................  
6563
....................    debug_usb(debug_putc, "T "); 
6563
....................    debug_usb(debug_putc, "T "); 
6564
....................    debug_usb(debug_putc, "%X ", USTAT); 
6564
....................    debug_usb(debug_putc, "%X ", USTAT); 
6565
....................  
6565
....................  
6566
....................    if (USTAT == USTAT_OUT_SETUP_E0)  
6566
....................    if (USTAT == USTAT_OUT_SETUP_E0)  
6567
1098:  MOVF   F6C,F
6567
1098:  MOVF   F6C,F
6568
109A:  BNZ   1138
6568
109A:  BNZ   1138
6569
....................    {    
6569
....................    {    
6570
....................       //new out or setup token in the buffer 
6570
....................       //new out or setup token in the buffer 
6571
....................       int8 pidKey; 
6571
....................       int8 pidKey; 
6572
....................        
6572
....................        
6573
....................       debug_usb(debug_putc,"%X ", EP_BDxST_O(0)); 
6573
....................       debug_usb(debug_putc,"%X ", EP_BDxST_O(0)); 
6574
....................        
6574
....................        
6575
....................       pidKey = EP_BDxST_O(0) & 0x3C;  //save PID 
6575
....................       pidKey = EP_BDxST_O(0) & 0x3C;  //save PID 
6576
109C:  MOVLB  4
6576
109C:  MOVLB  4
6577
109E:  MOVF   x00,W
6577
109E:  MOVF   x00,W
6578
10A0:  ANDLW  3C
6578
10A0:  ANDLW  3C
6579
10A2:  MOVLB  6
6579
10A2:  MOVLB  6
6580
10A4:  MOVWF  xFC
6580
10A4:  MOVWF  xFC
6581
....................        
6581
....................        
6582
....................       EP_BDxST_O(0) &= 0x43;  //clear pid, prevent bdstal/pid confusion 
6582
....................       EP_BDxST_O(0) &= 0x43;  //clear pid, prevent bdstal/pid confusion 
6583
10A6:  MOVLW  43
6583
10A6:  MOVLW  43
6584
10A8:  MOVLB  4
6584
10A8:  MOVLB  4
6585
10AA:  ANDWF  x00,F
6585
10AA:  ANDWF  x00,F
6586
....................       usb_clear_trn(); 
6586
....................       usb_clear_trn(); 
6587
10AC:  MOVLB  0
6587
10AC:  MOVLB  0
6588
10AE:  CALL   03AA
6588
10AE:  CALL   03AA
6589
....................        
6589
....................        
6590
....................       if (pidKey == USB_PIC_PID_SETUP)  
6590
....................       if (pidKey == USB_PIC_PID_SETUP)  
6591
10B2:  MOVLB  6
6591
10B2:  MOVLB  6
6592
10B4:  MOVF   xFC,W
6592
10B4:  MOVF   xFC,W
6593
10B6:  SUBLW  34
6593
10B6:  SUBLW  34
6594
10B8:  BNZ   10FE
6594
10B8:  BNZ   10FE
6595
....................       { 
6595
....................       { 
6596
....................          EP_BDxST_I(0)=0;   // return the in buffer to us (dequeue any pending requests) 
6596
....................          EP_BDxST_I(0)=0;   // return the in buffer to us (dequeue any pending requests) 
6597
10BA:  MOVLB  4
6597
10BA:  MOVLB  4
6598
10BC:  CLRF   x04
6598
10BC:  CLRF   x04
6599
....................  
6599
....................  
6600
....................          debug_usb(debug_putc,"(%U) ", EP_BDxCNT_O(0)); 
6600
....................          debug_usb(debug_putc,"(%U) ", EP_BDxCNT_O(0)); 
6601
....................          debug_display_ram(EP_BDxCNT_O(0), usb_ep0_rx_buffer); 
6601
....................          debug_display_ram(EP_BDxCNT_O(0), usb_ep0_rx_buffer); 
6602
....................  
6602
....................  
6603
....................          usb_isr_tok_setup_dne(); 
6603
....................          usb_isr_tok_setup_dne(); 
6604
10BE:  MOVLB  0
6604
10BE:  MOVLB  0
6605
10C0:  BRA    0BC0
6605
10C0:  BRA    0BC0
6606
....................  
6606
....................  
6607
....................          UCON_PKTDIS=0;       // UCON,PKT_DIS ; Assuming there is nothing to dequeue, clear the packet disable bit 
6607
....................          UCON_PKTDIS=0;       // UCON,PKT_DIS ; Assuming there is nothing to dequeue, clear the packet disable bit 
6608
10C2:  BCF    F6D.4
6608
10C2:  BCF    F6D.4
6609
....................  
6609
....................  
6610
....................          //if setup_0_tx_size==0xFF - stall ep0 (unhandled request) (see usb_request_stall()) 
6610
....................          //if setup_0_tx_size==0xFF - stall ep0 (unhandled request) (see usb_request_stall()) 
6611
....................          //if setup_0_tx_size==0xFE - get EP0OUT ready for a data packet, leave EP0IN alone (see usb_request_get_data()) 
6611
....................          //if setup_0_tx_size==0xFE - get EP0OUT ready for a data packet, leave EP0IN alone (see usb_request_get_data()) 
6612
....................          //else setup_0_tx_size=size of response, get EP0OUT ready for a setup packet, mark EPOIN ready for transmit (see usb_request_send_response()) 
6612
....................          //else setup_0_tx_size=size of response, get EP0OUT ready for a setup packet, mark EPOIN ready for transmit (see usb_request_send_response()) 
6613
....................          if (__setup_0_tx_size == 0xFF) 
6613
....................          if (__setup_0_tx_size == 0xFF) 
6614
10C4:  INCFSZ 25,W
6614
10C4:  INCFSZ 25,W
6615
10C6:  BRA    10D6
6615
10C6:  BRA    10D6
6616
....................             usb_flush_out(0, USB_DTS_STALL); 
6616
....................             usb_flush_out(0, USB_DTS_STALL); 
6617
10C8:  MOVLB  6
6617
10C8:  MOVLB  6
6618
10CA:  CLRF   xFD
6618
10CA:  CLRF   xFD
6619
10CC:  MOVLW  03
6619
10CC:  MOVLW  03
6620
10CE:  MOVWF  xFE
6620
10CE:  MOVWF  xFE
6621
10D0:  MOVLB  0
6621
10D0:  MOVLB  0
6622
10D2:  RCALL  0BEA
6622
10D2:  RCALL  0BEA
6623
....................          else  
6623
....................          else  
6624
10D4:  BRA    10FA
6624
10D4:  BRA    10FA
6625
....................          { 
6625
....................          { 
6626
....................             usb_flush_out(0, USB_DTS_TOGGLE); 
6626
....................             usb_flush_out(0, USB_DTS_TOGGLE); 
6627
10D6:  MOVLB  6
6627
10D6:  MOVLB  6
6628
10D8:  CLRF   xFD
6628
10D8:  CLRF   xFD
6629
10DA:  MOVLW  02
6629
10DA:  MOVLW  02
6630
10DC:  MOVWF  xFE
6630
10DC:  MOVWF  xFE
6631
10DE:  MOVLB  0
6631
10DE:  MOVLB  0
6632
10E0:  RCALL  0BEA
6632
10E0:  RCALL  0BEA
6633
....................             if (__setup_0_tx_size != 0xFE) 
6633
....................             if (__setup_0_tx_size != 0xFE) 
6634
10E2:  MOVF   25,W
6634
10E2:  MOVF   25,W
6635
10E4:  SUBLW  FE
6635
10E4:  SUBLW  FE
6636
10E6:  BZ    10FA
6636
10E6:  BZ    10FA
6637
....................                usb_flush_in(0 ,__setup_0_tx_size, USB_DTS_USERX); 
6637
....................                usb_flush_in(0 ,__setup_0_tx_size, USB_DTS_USERX); 
6638
10E8:  MOVLB  7
6638
10E8:  MOVLB  7
6639
10EA:  CLRF   x42
6639
10EA:  CLRF   x42
6640
10EC:  CLRF   x44
6640
10EC:  CLRF   x44
6641
10EE:  MOVFF  25,743
6641
10EE:  MOVFF  25,743
6642
10F2:  MOVLW  04
6642
10F2:  MOVLW  04
6643
10F4:  MOVWF  x45
6643
10F4:  MOVWF  x45
6644
10F6:  MOVLB  0
6644
10F6:  MOVLB  0
6645
10F8:  RCALL  0D5C
6645
10F8:  RCALL  0D5C
6646
....................          } 
6646
....................          } 
6647
....................          //why was this here? 
6647
....................          //why was this here? 
6648
....................          //UCON_PKTDIS=0;       // UCON,PKT_DIS ; Assuming there is nothing to dequeue, clear the packet disable bit 
6648
....................          //UCON_PKTDIS=0;       // UCON,PKT_DIS ; Assuming there is nothing to dequeue, clear the packet disable bit 
6649
....................       } 
6649
....................       } 
6650
....................       else if (pidKey == USB_PIC_PID_OUT)  
6650
....................       else if (pidKey == USB_PIC_PID_OUT)  
6651
10FA:  BRA    1134
6651
10FA:  BRA    1134
6652
10FC:  MOVLB  6
6652
10FC:  MOVLB  6
6653
10FE:  MOVF   xFC,W
6653
10FE:  MOVF   xFC,W
6654
1100:  SUBLW  04
6654
1100:  SUBLW  04
6655
1102:  BNZ   1136
6655
1102:  BNZ   1136
6656
....................       { 
6656
....................       { 
6657
....................          usb_isr_tok_out_dne(0); 
6657
....................          usb_isr_tok_out_dne(0); 
6658
1104:  CLRF   xFD
6658
1104:  CLRF   xFD
6659
1106:  MOVLB  0
6659
1106:  MOVLB  0
6660
1108:  RCALL  0F42
6660
1108:  RCALL  0F42
6661
....................          usb_flush_out(0, USB_DTS_TOGGLE); 
6661
....................          usb_flush_out(0, USB_DTS_TOGGLE); 
6662
110A:  MOVLB  6
6662
110A:  MOVLB  6
6663
110C:  CLRF   xFD
6663
110C:  CLRF   xFD
6664
110E:  MOVLW  02
6664
110E:  MOVLW  02
6665
1110:  MOVWF  xFE
6665
1110:  MOVWF  xFE
6666
1112:  MOVLB  0
6666
1112:  MOVLB  0
6667
1114:  RCALL  0BEA
6667
1114:  RCALL  0BEA
6668
....................          if ((__setup_0_tx_size!=0xFE) && (__setup_0_tx_size!=0xFF)) 
6668
....................          if ((__setup_0_tx_size!=0xFE) && (__setup_0_tx_size!=0xFF)) 
6669
1116:  MOVF   25,W
6669
1116:  MOVF   25,W
6670
1118:  SUBLW  FE
6670
1118:  SUBLW  FE
6671
111A:  BZ    1134
6671
111A:  BZ    1134
6672
111C:  INCFSZ 25,W
6672
111C:  INCFSZ 25,W
6673
111E:  BRA    1122
6673
111E:  BRA    1122
6674
1120:  BRA    1134
6674
1120:  BRA    1134
6675
....................          { 
6675
....................          { 
6676
....................             usb_flush_in(0,__setup_0_tx_size,USB_DTS_DATA1);   //send response (usually a 0len) 
6676
....................             usb_flush_in(0,__setup_0_tx_size,USB_DTS_DATA1);   //send response (usually a 0len) 
6677
1122:  MOVLB  7
6677
1122:  MOVLB  7
6678
1124:  CLRF   x42
6678
1124:  CLRF   x42
6679
1126:  CLRF   x44
6679
1126:  CLRF   x44
6680
1128:  MOVFF  25,743
6680
1128:  MOVFF  25,743
6681
112C:  MOVLW  01
6681
112C:  MOVLW  01
6682
112E:  MOVWF  x45
6682
112E:  MOVWF  x45
6683
1130:  MOVLB  0
6683
1130:  MOVLB  0
6684
1132:  RCALL  0D5C
6684
1132:  RCALL  0D5C
6685
1134:  MOVLB  6
6685
1134:  MOVLB  6
6686
....................          } 
6686
....................          } 
6687
....................       } 
6687
....................       } 
6688
....................    } 
6688
....................    } 
6689
....................    else if (USTAT == USTAT_IN_E0)  
6689
....................    else if (USTAT == USTAT_IN_E0)  
6690
1136:  BRA    126E
6690
1136:  BRA    126E
6691
1138:  MOVF   F6C,W
6691
1138:  MOVF   F6C,W
6692
113A:  SUBLW  04
6692
113A:  SUBLW  04
6693
113C:  BNZ   1178
6693
113C:  BNZ   1178
6694
....................    {    
6694
....................    {    
6695
....................       //pic -> host transfer completed 
6695
....................       //pic -> host transfer completed 
6696
....................       EP_BDxST_I(0) = EP_BDxST_I(0) & 0x43;   //clear up any BDSTAL confusion 
6696
....................       EP_BDxST_I(0) = EP_BDxST_I(0) & 0x43;   //clear up any BDSTAL confusion 
6697
113E:  MOVLW  43
6697
113E:  MOVLW  43
6698
1140:  MOVLB  4
6698
1140:  MOVLB  4
6699
1142:  ANDWF  x04,F
6699
1142:  ANDWF  x04,F
6700
....................       usb_clear_trn(); 
6700
....................       usb_clear_trn(); 
6701
1144:  MOVLB  0
6701
1144:  MOVLB  0
6702
1146:  CALL   03AA
6702
1146:  CALL   03AA
6703
....................       __setup_0_tx_size = 0xFF; 
6703
....................       __setup_0_tx_size = 0xFF; 
6704
114A:  MOVLW  FF
6704
114A:  MOVLW  FF
6705
114C:  MOVWF  25
6705
114C:  MOVWF  25
6706
....................       usb_isr_tok_in_dne(0); 
6706
....................       usb_isr_tok_in_dne(0); 
6707
114E:  MOVLB  6
6707
114E:  MOVLB  6
6708
1150:  CLRF   xFD
6708
1150:  CLRF   xFD
6709
1152:  MOVLB  0
6709
1152:  MOVLB  0
6710
1154:  RCALL  1058
6710
1154:  RCALL  1058
6711
....................       if (__setup_0_tx_size!=0xFF) 
6711
....................       if (__setup_0_tx_size!=0xFF) 
6712
1156:  INCFSZ 25,W
6712
1156:  INCFSZ 25,W
6713
1158:  BRA    115C
6713
1158:  BRA    115C
6714
115A:  BRA    1170
6714
115A:  BRA    1170
6715
....................          usb_flush_in(0, __setup_0_tx_size, USB_DTS_TOGGLE); 
6715
....................          usb_flush_in(0, __setup_0_tx_size, USB_DTS_TOGGLE); 
6716
115C:  MOVLB  7
6716
115C:  MOVLB  7
6717
115E:  CLRF   x42
6717
115E:  CLRF   x42
6718
1160:  CLRF   x44
6718
1160:  CLRF   x44
6719
1162:  MOVFF  25,743
6719
1162:  MOVFF  25,743
6720
1166:  MOVLW  02
6720
1166:  MOVLW  02
6721
1168:  MOVWF  x45
6721
1168:  MOVWF  x45
6722
116A:  MOVLB  0
6722
116A:  MOVLB  0
6723
116C:  RCALL  0D5C
6723
116C:  RCALL  0D5C
6724
....................       else 
6724
....................       else 
6725
116E:  BRA    1174
6725
116E:  BRA    1174
6726
....................          usb_init_ep0_setup(); 
6726
....................          usb_init_ep0_setup(); 
6727
1170:  CALL   0284
6727
1170:  CALL   0284
6728
....................    } 
6728
....................    } 
6729
....................    else  
6729
....................    else  
6730
1174:  BRA    126C
6730
1174:  BRA    126C
6731
1176:  MOVLB  6
6731
1176:  MOVLB  6
6732
....................    { 
6732
....................    { 
6733
....................       if (!bit_test(USTAT, 2))  
6733
....................       if (!bit_test(USTAT, 2))  
6734
1178:  BTFSC  F6C.2
6734
1178:  BTFSC  F6C.2
6735
117A:  BRA    11E6
6735
117A:  BRA    11E6
6736
....................       { 
6736
....................       { 
6737
....................          EP_BDxST_O(en) = EP_BDxST_O(en) & 0x43;   //clear up any BDSTAL confusion 
6737
....................          EP_BDxST_O(en) = EP_BDxST_O(en) & 0x43;   //clear up any BDSTAL confusion 
6738
117C:  MOVLB  7
6738
117C:  MOVLB  7
6739
117E:  CLRF   x49
6739
117E:  CLRF   x49
6740
1180:  MOVFF  6FB,748
6740
1180:  MOVFF  6FB,748
6741
1184:  CLRF   x4B
6741
1184:  CLRF   x4B
6742
1186:  MOVLW  08
6742
1186:  MOVLW  08
6743
1188:  MOVWF  x4A
6743
1188:  MOVWF  x4A
6744
118A:  MOVLB  0
6744
118A:  MOVLB  0
6745
118C:  CALL   02BA
6745
118C:  CALL   02BA
6746
1190:  MOVFF  01,6FD
6746
1190:  MOVFF  01,6FD
6747
1194:  MOVLB  6
6747
1194:  MOVLB  6
6748
1196:  MOVFF  01,01
6748
1196:  MOVFF  01,01
6749
119A:  MOVLW  04
6749
119A:  MOVLW  04
6750
119C:  ADDWF  02,W
6750
119C:  ADDWF  02,W
6751
119E:  MOVWF  03
6751
119E:  MOVWF  03
6752
11A0:  MOVFF  01,6FD
6752
11A0:  MOVFF  01,6FD
6753
11A4:  MOVWF  xFE
6753
11A4:  MOVWF  xFE
6754
11A6:  MOVLB  7
6754
11A6:  MOVLB  7
6755
11A8:  CLRF   x49
6755
11A8:  CLRF   x49
6756
11AA:  MOVFF  6FB,748
6756
11AA:  MOVFF  6FB,748
6757
11AE:  CLRF   x4B
6757
11AE:  CLRF   x4B
6758
11B0:  MOVLW  08
6758
11B0:  MOVLW  08
6759
11B2:  MOVWF  x4A
6759
11B2:  MOVWF  x4A
6760
11B4:  MOVLB  0
6760
11B4:  MOVLB  0
6761
11B6:  CALL   02BA
6761
11B6:  CALL   02BA
6762
11BA:  MOVFF  01,FE9
6762
11BA:  MOVFF  01,FE9
6763
11BE:  MOVLW  04
6763
11BE:  MOVLW  04
6764
11C0:  MOVLB  7
6764
11C0:  MOVLB  7
6765
11C2:  ADDWF  02,W
6765
11C2:  ADDWF  02,W
6766
11C4:  MOVWF  FEA
6766
11C4:  MOVWF  FEA
6767
11C6:  MOVF   FEF,W
6767
11C6:  MOVF   FEF,W
6768
11C8:  ANDLW  43
6768
11C8:  ANDLW  43
6769
11CA:  MOVLB  6
6769
11CA:  MOVLB  6
6770
11CC:  MOVFF  6FE,FEA
6770
11CC:  MOVFF  6FE,FEA
6771
11D0:  MOVFF  6FD,FE9
6771
11D0:  MOVFF  6FD,FE9
6772
11D4:  MOVWF  FEF
6772
11D4:  MOVWF  FEF
6773
....................          usb_clear_trn(); 
6773
....................          usb_clear_trn(); 
6774
11D6:  MOVLB  0
6774
11D6:  MOVLB  0
6775
11D8:  CALL   03AA
6775
11D8:  CALL   03AA
6776
....................          usb_isr_tok_out_dne(en); 
6776
....................          usb_isr_tok_out_dne(en); 
6777
11DC:  MOVFF  6FB,6FD
6777
11DC:  MOVFF  6FB,6FD
6778
11E0:  RCALL  0F42
6778
11E0:  RCALL  0F42
6779
....................       } 
6779
....................       } 
6780
....................       else  
6780
....................       else  
6781
11E2:  BRA    126C
6781
11E2:  BRA    126C
6782
11E4:  MOVLB  6
6782
11E4:  MOVLB  6
6783
....................       { 
6783
....................       { 
6784
....................          EP_BDxST_I(en) = EP_BDxST_I(en) & 0x43;   //clear up any BDSTAL confusion 
6784
....................          EP_BDxST_I(en) = EP_BDxST_I(en) & 0x43;   //clear up any BDSTAL confusion 
6785
11E6:  MOVLB  7
6785
11E6:  MOVLB  7
6786
11E8:  CLRF   x49
6786
11E8:  CLRF   x49
6787
11EA:  MOVFF  6FB,748
6787
11EA:  MOVFF  6FB,748
6788
11EE:  CLRF   x4B
6788
11EE:  CLRF   x4B
6789
11F0:  MOVLW  08
6789
11F0:  MOVLW  08
6790
11F2:  MOVWF  x4A
6790
11F2:  MOVWF  x4A
6791
11F4:  MOVLB  0
6791
11F4:  MOVLB  0
6792
11F6:  CALL   02BA
6792
11F6:  CALL   02BA
6793
11FA:  MOVFF  02,6FE
6793
11FA:  MOVFF  02,6FE
6794
11FE:  MOVFF  01,6FD
6794
11FE:  MOVFF  01,6FD
6795
1202:  MOVLW  04
6795
1202:  MOVLW  04
6796
1204:  MOVLB  6
6796
1204:  MOVLB  6
6797
1206:  ADDWF  xFD,F
6797
1206:  ADDWF  xFD,F
6798
1208:  MOVLW  00
6798
1208:  MOVLW  00
6799
120A:  ADDWFC xFE,F
6799
120A:  ADDWFC xFE,F
6800
120C:  MOVFF  6FD,01
6800
120C:  MOVFF  6FD,01
6801
1210:  MOVLW  04
6801
1210:  MOVLW  04
6802
1212:  ADDWF  xFE,W
6802
1212:  ADDWF  xFE,W
6803
1214:  MOVWF  03
6803
1214:  MOVWF  03
6804
1216:  MOVFF  6FD,6FD
6804
1216:  MOVFF  6FD,6FD
6805
121A:  MOVWF  xFE
6805
121A:  MOVWF  xFE
6806
121C:  MOVLB  7
6806
121C:  MOVLB  7
6807
121E:  CLRF   x49
6807
121E:  CLRF   x49
6808
1220:  MOVFF  6FB,748
6808
1220:  MOVFF  6FB,748
6809
1224:  CLRF   x4B
6809
1224:  CLRF   x4B
6810
1226:  MOVLW  08
6810
1226:  MOVLW  08
6811
1228:  MOVWF  x4A
6811
1228:  MOVWF  x4A
6812
122A:  MOVLB  0
6812
122A:  MOVLB  0
6813
122C:  CALL   02BA
6813
122C:  CALL   02BA
6814
1230:  MOVFF  02,700
6814
1230:  MOVFF  02,700
6815
1234:  MOVFF  01,6FF
6815
1234:  MOVFF  01,6FF
6816
1238:  MOVLW  04
6816
1238:  MOVLW  04
6817
123A:  MOVLB  6
6817
123A:  MOVLB  6
6818
123C:  ADDWF  xFF,F
6818
123C:  ADDWF  xFF,F
6819
123E:  MOVLW  00
6819
123E:  MOVLW  00
6820
1240:  MOVLB  7
6820
1240:  MOVLB  7
6821
1242:  ADDWFC x00,F
6821
1242:  ADDWFC x00,F
6822
1244:  MOVFF  6FF,FE9
6822
1244:  MOVFF  6FF,FE9
6823
1248:  MOVLW  04
6823
1248:  MOVLW  04
6824
124A:  MOVLB  7
6824
124A:  MOVLB  7
6825
124C:  ADDWF  x00,W
6825
124C:  ADDWF  x00,W
6826
124E:  MOVWF  FEA
6826
124E:  MOVWF  FEA
6827
1250:  MOVF   FEF,W
6827
1250:  MOVF   FEF,W
6828
1252:  ANDLW  43
6828
1252:  ANDLW  43
6829
1254:  MOVLB  6
6829
1254:  MOVLB  6
6830
1256:  MOVFF  6FE,FEA
6830
1256:  MOVFF  6FE,FEA
6831
125A:  MOVFF  6FD,FE9
6831
125A:  MOVFF  6FD,FE9
6832
125E:  MOVWF  FEF
6832
125E:  MOVWF  FEF
6833
....................          usb_clear_trn(); 
6833
....................          usb_clear_trn(); 
6834
1260:  MOVLB  0
6834
1260:  MOVLB  0
6835
1262:  CALL   03AA
6835
1262:  CALL   03AA
6836
....................          usb_isr_tok_in_dne(en); 
6836
....................          usb_isr_tok_in_dne(en); 
6837
1266:  MOVFF  6FB,6FD
6837
1266:  MOVFF  6FB,6FD
6838
126A:  RCALL  1058
6838
126A:  RCALL  1058
6839
126C:  MOVLB  6
6839
126C:  MOVLB  6
6840
....................       } 
6840
....................       } 
6841
....................    } 
6841
....................    } 
6842
.................... } 
6842
.................... } 
6843
126E:  MOVLB  0
6843
126E:  MOVLB  0
6844
1270:  GOTO   12DC (RETURN)
6844
1270:  GOTO   12DC (RETURN)
6845
....................  
6845
....................  
6846
.................... /// END USB Interrupt Service Routine 
6846
.................... /// END USB Interrupt Service Routine 
6847
....................  
6847
....................  
6848
.................... #ENDIF 
6848
.................... #ENDIF 
6849
....................  
6849
....................  
6850
.................... #endif 
6850
.................... #endif 
6851
....................  
6851
....................  
6852
.................... #if defined(__PIC24_USB_H__) 
6852
.................... #if defined(__PIC24_USB_H__) 
6853
....................  #include <pic24_usb.c> 
6853
....................  #include <pic24_usb.c> 
6854
.................... #endif 
6854
.................... #endif 
6855
....................  
6855
....................  
6856
.................... #if defined(__USBN960X_H__) 
6856
.................... #if defined(__USBN960X_H__) 
6857
....................  #include <usbn960x.c> 
6857
....................  #include <usbn960x.c> 
6858
.................... #endif 
6858
.................... #endif 
6859
....................  
6859
....................  
6860
....................  
6860
....................  
6861
.................... #IFNDEF __USB_HARDWARE__ 
6861
.................... #IFNDEF __USB_HARDWARE__ 
6862
....................    #ERROR You must include USB hardware driver. 
6862
....................    #ERROR You must include USB hardware driver. 
6863
.................... #ENDIF 
6863
.................... #ENDIF 
6864
....................  
6864
....................  
6865
.................... #IFNDEF __USB_DESCRIPTORS__ 
6865
.................... #IFNDEF __USB_DESCRIPTORS__ 
6866
....................    #ERROR You must include USB descriptors. 
6866
....................    #ERROR You must include USB descriptors. 
6867
.................... #ENDIF 
6867
.................... #ENDIF 
6868
....................  
6868
....................  
6869
.................... TYPE_USB_STACK_STATUS USB_stack_status; 
6869
.................... TYPE_USB_STACK_STATUS USB_stack_status; 
6870
....................  
6870
....................  
6871
.................... int8 USB_address_pending;                        //save previous state because packets can take several isrs 
6871
.................... int8 USB_address_pending;                        //save previous state because packets can take several isrs 
6872
.................... int8 usb_getdesc_ptr; unsigned int8 usb_getdesc_len=0;             //for reading string and config descriptors 
6872
.................... int8 usb_getdesc_ptr; unsigned int8 usb_getdesc_len=0;             //for reading string and config descriptors 
6873
....................  
6873
....................  
6874
.................... #IF USB_HID_BOOT_PROTOCOL 
6874
.................... #IF USB_HID_BOOT_PROTOCOL 
6875
.................... int8 hid_protocol[USB_NUM_HID_INTERFACES]; 
6875
.................... int8 hid_protocol[USB_NUM_HID_INTERFACES]; 
6876
.................... #ENDIF 
6876
.................... #ENDIF 
6877
....................  
6877
....................  
6878
.................... void usb_put_0len_0(void); 
6878
.................... void usb_put_0len_0(void); 
6879
.................... void usb_match_registers(int8 endpoint, int16 *status, int16 *buffer, int8 *size); 
6879
.................... void usb_match_registers(int8 endpoint, int16 *status, int16 *buffer, int8 *size); 
6880
....................  
6880
....................  
6881
.................... void usb_isr_tkn_setup_StandardEndpoint(void); 
6881
.................... void usb_isr_tkn_setup_StandardEndpoint(void); 
6882
.................... void usb_isr_tkn_setup_StandardDevice(void); 
6882
.................... void usb_isr_tkn_setup_StandardDevice(void); 
6883
.................... void usb_isr_tkn_setup_StandardInterface(void); 
6883
.................... void usb_isr_tkn_setup_StandardInterface(void); 
6884
.................... #IF USB_HID_DEVICE 
6884
.................... #IF USB_HID_DEVICE 
6885
....................    void usb_isr_tkn_setup_ClassInterface(void); 
6885
....................    void usb_isr_tkn_setup_ClassInterface(void); 
6886
.................... #ENDIF 
6886
.................... #ENDIF 
6887
.................... void usb_Get_Descriptor(void); 
6887
.................... void usb_Get_Descriptor(void); 
6888
.................... void usb_copy_desc_seg_to_ep(void); 
6888
.................... void usb_copy_desc_seg_to_ep(void); 
6889
.................... void usb_finish_set_address(void); 
6889
.................... void usb_finish_set_address(void); 
6890
....................  
6890
....................  
6891
.................... int8 USB_Interface[USB_MAX_NUM_INTERFACES];              //config state for all of our interfaces, NUM_INTERFACES defined with descriptors 
6891
.................... int8 USB_Interface[USB_MAX_NUM_INTERFACES];              //config state for all of our interfaces, NUM_INTERFACES defined with descriptors 
6892
....................  
6892
....................  
6893
.................... /// BEGIN User Functions 
6893
.................... /// BEGIN User Functions 
6894
....................  
6894
....................  
6895
.................... // see usb.h for documentation 
6895
.................... // see usb.h for documentation 
6896
.................... int1 usb_enumerated(void) 
6896
.................... int1 usb_enumerated(void) 
6897
.................... { 
6897
.................... { 
6898
....................    return(USB_stack_status.curr_config); 
6898
....................    return(USB_stack_status.curr_config); 
6899
.................... } 
6899
.................... } 
6900
....................  
6900
....................  
6901
.................... // see usb.h for documentation 
6901
.................... // see usb.h for documentation 
6902
.................... void usb_wait_for_enumeration(void)  
6902
.................... void usb_wait_for_enumeration(void)  
6903
.................... { 
6903
.................... { 
6904
....................    while (USB_stack_status.curr_config == 0) {restart_wdt();} 
6904
....................    while (USB_stack_status.curr_config == 0) {restart_wdt();} 
6905
.................... } 
6905
.................... } 
6906
....................  
6906
....................  
6907
.................... // see USB.H for documentation 
6907
.................... // see USB.H for documentation 
6908
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout) { 
6908
.................... int1 usb_puts(int8 endpoint, int8 * ptr, unsigned int16 len, unsigned int8 timeout) { 
6909
....................    unsigned int16 i=0; 
6909
....................    unsigned int16 i=0; 
6910
....................    int1 res; 
6910
....................    int1 res; 
6911
....................    unsigned int16 this_packet_len; 
6911
....................    unsigned int16 this_packet_len; 
6912
....................    unsigned int16 packet_size; 
6912
....................    unsigned int16 packet_size; 
6913
....................    unsigned int32 timeout_1us; 
6913
....................    unsigned int32 timeout_1us; 
6914
....................  
6914
....................  
6915
....................    packet_size = usb_ep_tx_size[endpoint]; 
6915
....................    packet_size = usb_ep_tx_size[endpoint]; 
6916
....................     
6916
....................     
6917
....................    //printf("\r\nUSB PUTS %U LEN=%LU MAX_PACK=%LU\r\n", endpoint, len, packet_size); 
6917
....................    //printf("\r\nUSB PUTS %U LEN=%LU MAX_PACK=%LU\r\n", endpoint, len, packet_size); 
6918
....................  
6918
....................  
6919
....................    //send data packets until timeout or no more packets to send 
6919
....................    //send data packets until timeout or no more packets to send 
6920
....................    while (i < len)  
6920
....................    while (i < len)  
6921
....................    { 
6921
....................    { 
6922
....................       timeout_1us = (int32)timeout*1000; 
6922
....................       timeout_1us = (int32)timeout*1000; 
6923
....................       if ((len - i) > packet_size) {this_packet_len = packet_size;} 
6923
....................       if ((len - i) > packet_size) {this_packet_len = packet_size;} 
6924
....................       else {this_packet_len = len-i;} 
6924
....................       else {this_packet_len = len-i;} 
6925
....................       //putc('*'); 
6925
....................       //putc('*'); 
6926
....................       do  
6926
....................       do  
6927
....................       { 
6927
....................       { 
6928
....................          res = usb_put_packet(endpoint, ptr + i, this_packet_len, USB_DTS_TOGGLE);   //send 64 byte packets 
6928
....................          res = usb_put_packet(endpoint, ptr + i, this_packet_len, USB_DTS_TOGGLE);   //send 64 byte packets 
6929
....................          //putc('.'); 
6929
....................          //putc('.'); 
6930
....................          if (!res) 
6930
....................          if (!res) 
6931
....................          { 
6931
....................          { 
6932
....................             delay_us(1); 
6932
....................             delay_us(1); 
6933
....................             //delay_ms(500); 
6933
....................             //delay_ms(500); 
6934
....................             timeout_1us--; 
6934
....................             timeout_1us--; 
6935
....................          } 
6935
....................          } 
6936
....................       } while (!res && timeout_1us); 
6936
....................       } while (!res && timeout_1us); 
6937
....................       i += packet_size; 
6937
....................       i += packet_size; 
6938
....................    } 
6938
....................    } 
6939
....................  
6939
....................  
6940
....................  
6940
....................  
6941
....................    //send 0len packet if needed 
6941
....................    //send 0len packet if needed 
6942
....................    if (i==len) { 
6942
....................    if (i==len) { 
6943
....................       timeout_1us=(int32)timeout*1000; 
6943
....................       timeout_1us=(int32)timeout*1000; 
6944
....................       do { 
6944
....................       do { 
6945
....................          res = usb_put_packet(endpoint,0,0,USB_DTS_TOGGLE);   //indicate end of message 
6945
....................          res = usb_put_packet(endpoint,0,0,USB_DTS_TOGGLE);   //indicate end of message 
6946
....................          if (!res) { 
6946
....................          if (!res) { 
6947
....................             delay_us(1); 
6947
....................             delay_us(1); 
6948
....................             timeout_1us--; 
6948
....................             timeout_1us--; 
6949
....................          } 
6949
....................          } 
6950
....................       } while (!res && timeout_1us); 
6950
....................       } while (!res && timeout_1us); 
6951
....................    } 
6951
....................    } 
6952
....................  
6952
....................  
6953
....................    return(res); 
6953
....................    return(res); 
6954
.................... } 
6954
.................... } 
6955
....................  
6955
....................  
6956
.................... // see usb.h for documentation 
6956
.................... // see usb.h for documentation 
6957
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout) { 
6957
.................... unsigned int16 usb_gets(int8 endpoint, int8 * ptr, unsigned int16 max, unsigned int16 timeout) { 
6958
....................    unsigned int16 ret=0; 
6958
....................    unsigned int16 ret=0; 
6959
....................    unsigned int16 to; 
6959
....................    unsigned int16 to; 
6960
....................    unsigned int16 len; 
6960
....................    unsigned int16 len; 
6961
....................    unsigned int16 packet_size; 
6961
....................    unsigned int16 packet_size; 
6962
....................    unsigned int16 this_packet_max; 
6962
....................    unsigned int16 this_packet_max; 
6963
....................  
6963
....................  
6964
....................    packet_size=usb_ep_rx_size[endpoint]; 
6964
....................    packet_size=usb_ep_rx_size[endpoint]; 
6965
....................  
6965
....................  
6966
....................    do { 
6966
....................    do { 
6967
....................       if (packet_size < max) {this_packet_max=packet_size;} else {this_packet_max=max;} 
6967
....................       if (packet_size < max) {this_packet_max=packet_size;} else {this_packet_max=max;} 
6968
....................       to=0; 
6968
....................       to=0; 
6969
....................       do { 
6969
....................       do { 
6970
....................          if (usb_kbhit(endpoint)) { 
6970
....................          if (usb_kbhit(endpoint)) { 
6971
....................             len=usb_get_packet(endpoint,ptr,this_packet_max); 
6971
....................             len=usb_get_packet(endpoint,ptr,this_packet_max); 
6972
....................             ptr+=len; 
6972
....................             ptr+=len; 
6973
....................             max-=len; 
6973
....................             max-=len; 
6974
....................             ret+=len; 
6974
....................             ret+=len; 
6975
....................             break; 
6975
....................             break; 
6976
....................          } 
6976
....................          } 
6977
....................          else { 
6977
....................          else { 
6978
....................             to++; 
6978
....................             to++; 
6979
....................             delay_ms(1); 
6979
....................             delay_ms(1); 
6980
....................          } 
6980
....................          } 
6981
....................       } while (to!=timeout); 
6981
....................       } while (to!=timeout); 
6982
....................    } while ((len == packet_size) && (to!=timeout) && max); 
6982
....................    } while ((len == packet_size) && (to!=timeout) && max); 
6983
....................  
6983
....................  
6984
....................    return(ret); 
6984
....................    return(ret); 
6985
.................... } 
6985
.................... } 
6986
....................  
6986
....................  
6987
.................... /// END User Functions 
6987
.................... /// END User Functions 
6988
....................  
6988
....................  
6989
....................  
6989
....................  
6990
.................... /// BEGIN USB Token, standard and HID request handler (part of ISR) 
6990
.................... /// BEGIN USB Token, standard and HID request handler (part of ISR) 
6991
....................  
6991
....................  
6992
.................... // see usb.h for documentation 
6992
.................... // see usb.h for documentation 
6993
.................... void usb_token_reset(void)  
6993
.................... void usb_token_reset(void)  
6994
.................... { 
6994
.................... { 
6995
....................    unsigned int i; 
6995
....................    unsigned int i; 
6996
....................  
6996
....................  
6997
....................    for (i=0;i<USB_MAX_NUM_INTERFACES;i++)  
6997
....................    for (i=0;i<USB_MAX_NUM_INTERFACES;i++)  
6998
*
6998
*
6999
037E:  MOVLB  7
6999
037E:  MOVLB  7
7000
0380:  CLRF   x19
7000
0380:  CLRF   x19
7001
0382:  MOVF   x19,W
7001
0382:  MOVF   x19,W
7002
0384:  SUBLW  01
7002
0384:  SUBLW  01
7003
0386:  BNC   039C
7003
0386:  BNC   039C
7004
....................       USB_Interface[i] = 0;   //reset each interface to default 
7004
....................       USB_Interface[i] = 0;   //reset each interface to default 
7005
0388:  CLRF   03
7005
0388:  CLRF   03
7006
038A:  MOVF   x19,W
7006
038A:  MOVF   x19,W
7007
038C:  ADDLW  29
7007
038C:  ADDLW  29
7008
038E:  MOVWF  FE9
7008
038E:  MOVWF  FE9
7009
0390:  MOVLW  00
7009
0390:  MOVLW  00
7010
0392:  ADDWFC 03,W
7010
0392:  ADDWFC 03,W
7011
0394:  MOVWF  FEA
7011
0394:  MOVWF  FEA
7012
0396:  CLRF   FEF
7012
0396:  CLRF   FEF
7013
....................  
7013
....................  
7014
....................   #IF USB_HID_BOOT_PROTOCOL 
7014
....................   #IF USB_HID_BOOT_PROTOCOL 
7015
....................    for (i=0;i<USB_NUM_HID_INTERFACES; i++) 
7015
....................    for (i=0;i<USB_NUM_HID_INTERFACES; i++) 
7016
....................       hid_protocol[i] = 1; 
7016
....................       hid_protocol[i] = 1; 
7017
....................   #endif 
7017
....................   #endif 
7018
....................  
7018
....................  
7019
....................   #if USB_CDC_DEVICE 
7019
....................   #if USB_CDC_DEVICE 
7020
0398:  INCF   x19,F
7020
0398:  INCF   x19,F
7021
039A:  BRA    0382
7021
039A:  BRA    0382
7022
....................    usb_cdc_init(); 
7022
....................    usb_cdc_init(); 
7023
039C:  MOVLB  0
7023
039C:  MOVLB  0
7024
039E:  RCALL  035C
7024
039E:  RCALL  035C
7025
....................   #endif 
7025
....................   #endif 
7026
....................  
7026
....................  
7027
....................    USB_stack_status.curr_config = 0;      //unconfigured device 
7027
....................    USB_stack_status.curr_config = 0;      //unconfigured device 
7028
03A0:  CLRF   1E
7028
03A0:  CLRF   1E
7029
....................  
7029
....................  
7030
....................    USB_stack_status.status_device = 1;    //previous state.  init at none 
7030
....................    USB_stack_status.status_device = 1;    //previous state.  init at none 
7031
03A2:  MOVLW  01
7031
03A2:  MOVLW  01
7032
03A4:  MOVWF  1F
7032
03A4:  MOVWF  1F
7033
....................    USB_stack_status.dev_req = NONE;       //previous token request state.  init at none 
7033
....................    USB_stack_status.dev_req = NONE;       //previous token request state.  init at none 
7034
03A6:  CLRF   1D
7034
03A6:  CLRF   1D
7035
.................... } 
7035
.................... } 
7036
03A8:  RETLW  00
7036
03A8:  RETLW  00
7037
....................  
7037
....................  
7038
.................... //send a 0len packet to endpoint 0 (optimization) 
7038
.................... //send a 0len packet to endpoint 0 (optimization) 
7039
.................... //notice that this doesnt return the status 
7039
.................... //notice that this doesnt return the status 
7040
.................... #define usb_put_0len_0() usb_request_send_response(0) 
7040
.................... #define usb_put_0len_0() usb_request_send_response(0) 
7041
....................  
7041
....................  
7042
.................... /************************************************************** 
7042
.................... /************************************************************** 
7043
.................... /* usb_endpoint_is_valid(endpoint) 
7043
.................... /* usb_endpoint_is_valid(endpoint) 
7044
.................... /* 
7044
.................... /* 
7045
.................... /* Input: endpoint - endpoint to check. 
7045
.................... /* Input: endpoint - endpoint to check. 
7046
.................... /*                   bit 7 is direction (set is IN, clear is OUT) 
7046
.................... /*                   bit 7 is direction (set is IN, clear is OUT) 
7047
.................... /* 
7047
.................... /* 
7048
.................... /* Output: TRUE if endpoint is valid, FALSE if not 
7048
.................... /* Output: TRUE if endpoint is valid, FALSE if not 
7049
.................... /* 
7049
.................... /* 
7050
.................... /* Summary: Checks the dynamic configuration to see if requested 
7050
.................... /* Summary: Checks the dynamic configuration to see if requested 
7051
.................... /*          endpoint is a valid endpoint. 
7051
.................... /*          endpoint is a valid endpoint. 
7052
.................... /***************************************************************/ 
7052
.................... /***************************************************************/ 
7053
.................... int1 usb_endpoint_is_valid(int8 endpoint)  
7053
.................... int1 usb_endpoint_is_valid(int8 endpoint)  
7054
.................... { 
7054
.................... { 
7055
....................    int1 direction; 
7055
....................    int1 direction; 
7056
....................    direction = bit_test(endpoint,7); 
7056
....................    direction = bit_test(endpoint,7); 
7057
*
7057
*
7058
08E8:  MOVLB  6
7058
08E8:  MOVLB  6
7059
08EA:  BCF    xFE.0
7059
08EA:  BCF    xFE.0
7060
08EC:  BTFSC  xFD.7
7060
08EC:  BTFSC  xFD.7
7061
08EE:  BSF    xFE.0
7061
08EE:  BSF    xFE.0
7062
....................    endpoint &= 0x7F; 
7062
....................    endpoint &= 0x7F; 
7063
08F0:  BCF    xFD.7
7063
08F0:  BCF    xFD.7
7064
....................    if (direction) { //IN 
7064
....................    if (direction) { //IN 
7065
08F2:  BTFSS  xFE.0
7065
08F2:  BTFSS  xFE.0
7066
08F4:  BRA    091C
7066
08F4:  BRA    091C
7067
....................       return(usb_ep_tx_type[endpoint] != USB_ENABLE_DISABLED); 
7067
....................       return(usb_ep_tx_type[endpoint] != USB_ENABLE_DISABLED); 
7068
08F6:  CLRF   03
7068
08F6:  CLRF   03
7069
08F8:  MOVF   xFD,W
7069
08F8:  MOVF   xFD,W
7070
08FA:  MOVFF  FF2,6FF
7070
08FA:  MOVFF  FF2,6FF
7071
08FE:  BCF    FF2.7
7071
08FE:  BCF    FF2.7
7072
0900:  MOVLB  0
7072
0900:  MOVLB  0
7073
0902:  CALL   00AA
7073
0902:  CALL   00AA
7074
0906:  MOVLB  6
7074
0906:  MOVLB  6
7075
0908:  BTFSC  xFF.7
7075
0908:  BTFSC  xFF.7
7076
090A:  BSF    FF2.7
7076
090A:  BSF    FF2.7
7077
090C:  SUBLW  FF
7077
090C:  SUBLW  FF
7078
090E:  BNZ   0914
7078
090E:  BNZ   0914
7079
0910:  MOVLW  00
7079
0910:  MOVLW  00
7080
0912:  BRA    0916
7080
0912:  BRA    0916
7081
0914:  MOVLW  01
7081
0914:  MOVLW  01
7082
0916:  MOVWF  01
7082
0916:  MOVWF  01
7083
0918:  BRA    0940
7083
0918:  BRA    0940
7084
....................    } 
7084
....................    } 
7085
....................    else {   //OUT 
7085
....................    else {   //OUT 
7086
091A:  BRA    0940
7086
091A:  BRA    0940
7087
....................       return(usb_ep_rx_type[endpoint] != USB_ENABLE_DISABLED); 
7087
....................       return(usb_ep_rx_type[endpoint] != USB_ENABLE_DISABLED); 
7088
091C:  CLRF   03
7088
091C:  CLRF   03
7089
091E:  MOVF   xFD,W
7089
091E:  MOVF   xFD,W
7090
0920:  MOVFF  FF2,6FF
7090
0920:  MOVFF  FF2,6FF
7091
0924:  BCF    FF2.7
7091
0924:  BCF    FF2.7
7092
0926:  MOVLB  0
7092
0926:  MOVLB  0
7093
0928:  CALL   00CA
7093
0928:  CALL   00CA
7094
092C:  MOVLB  6
7094
092C:  MOVLB  6
7095
092E:  BTFSC  xFF.7
7095
092E:  BTFSC  xFF.7
7096
0930:  BSF    FF2.7
7096
0930:  BSF    FF2.7
7097
0932:  SUBLW  FF
7097
0932:  SUBLW  FF
7098
0934:  BNZ   093A
7098
0934:  BNZ   093A
7099
0936:  MOVLW  00
7099
0936:  MOVLW  00
7100
0938:  BRA    093C
7100
0938:  BRA    093C
7101
093A:  MOVLW  01
7101
093A:  MOVLW  01
7102
093C:  MOVWF  01
7102
093C:  MOVWF  01
7103
093E:  BRA    0940
7103
093E:  BRA    0940
7104
....................    } 
7104
....................    } 
7105
.................... } 
7105
.................... } 
7106
0940:  MOVLB  0
7106
0940:  MOVLB  0
7107
0942:  GOTO   0AA8 (RETURN)
7107
0942:  GOTO   0AA8 (RETURN)
7108
....................  
7108
....................  
7109
.................... // see usb.h for documentation 
7109
.................... // see usb.h for documentation 
7110
.................... void usb_isr_tok_in_dne(int8 endpoint) { 
7110
.................... void usb_isr_tok_in_dne(int8 endpoint) { 
7111
....................    if (endpoint==0) { 
7111
....................    if (endpoint==0) { 
7112
*
7112
*
7113
1058:  MOVLB  6
7113
1058:  MOVLB  6
7114
105A:  MOVF   xFD,F
7114
105A:  MOVF   xFD,F
7115
105C:  BNZ   107A
7115
105C:  BNZ   107A
7116
....................       if (USB_stack_status.dev_req == GET_DESCRIPTOR) {usb_copy_desc_seg_to_ep();} //check this, we are missing report descriptor? 
7116
....................       if (USB_stack_status.dev_req == GET_DESCRIPTOR) {usb_copy_desc_seg_to_ep();} //check this, we are missing report descriptor? 
7117
105E:  DECFSZ 1D,W
7117
105E:  DECFSZ 1D,W
7118
1060:  BRA    106C
7118
1060:  BRA    106C
7119
1062:  MOVLB  0
7119
1062:  MOVLB  0
7120
1064:  CALL   03FA
7120
1064:  CALL   03FA
7121
....................       else if (USB_stack_status.dev_req == SET_ADDRESS) {usb_finish_set_address();} 
7121
....................       else if (USB_stack_status.dev_req == SET_ADDRESS) {usb_finish_set_address();} 
7122
1068:  BRA    1076
7122
1068:  BRA    1076
7123
106A:  MOVLB  6
7123
106A:  MOVLB  6
7124
106C:  MOVF   1D,W
7124
106C:  MOVF   1D,W
7125
106E:  SUBLW  02
7125
106E:  SUBLW  02
7126
1070:  BNZ   1078
7126
1070:  BNZ   1078
7127
1072:  MOVLB  0
7127
1072:  MOVLB  0
7128
1074:  BRA    0F7A
7128
1074:  BRA    0F7A
7129
1076:  MOVLB  6
7129
1076:  MOVLB  6
7130
....................    } 
7130
....................    } 
7131
....................   #if USB_CDC_DEVICE 
7131
....................   #if USB_CDC_DEVICE 
7132
....................   else if (endpoint==USB_CDC_DATA_IN_ENDPOINT) { //see ex_usb_serial.c example and usb_cdc.h driver 
7132
....................   else if (endpoint==USB_CDC_DATA_IN_ENDPOINT) { //see ex_usb_serial.c example and usb_cdc.h driver 
7133
1078:  BRA    1086
7133
1078:  BRA    1086
7134
107A:  MOVF   xFD,W
7134
107A:  MOVF   xFD,W
7135
107C:  SUBLW  02
7135
107C:  SUBLW  02
7136
107E:  BNZ   1086
7136
107E:  BNZ   1086
7137
....................       usb_isr_tok_in_cdc_data_dne(); 
7137
....................       usb_isr_tok_in_cdc_data_dne(); 
7138
1080:  MOVLB  0
7138
1080:  MOVLB  0
7139
1082:  BRA    104E
7139
1082:  BRA    104E
7140
1084:  MOVLB  6
7140
1084:  MOVLB  6
7141
....................   } 
7141
....................   } 
7142
....................   #endif 
7142
....................   #endif 
7143
.................... } 
7143
.................... } 
7144
1086:  MOVLB  0
7144
1086:  MOVLB  0
7145
1088:  RETLW  00
7145
1088:  RETLW  00
7146
....................  
7146
....................  
7147
.................... // see usb.h for documentation 
7147
.................... // see usb.h for documentation 
7148
.................... void usb_isr_tok_out_dne(int8 endpoint) 
7148
.................... void usb_isr_tok_out_dne(int8 endpoint) 
7149
.................... { 
7149
.................... { 
7150
....................    //TODO: 
7150
....................    //TODO: 
7151
....................    if (endpoint==0) { 
7151
....................    if (endpoint==0) { 
7152
*
7152
*
7153
0F42:  MOVLB  6
7153
0F42:  MOVLB  6
7154
0F44:  MOVF   xFD,F
7154
0F44:  MOVF   xFD,F
7155
0F46:  BNZ   0F50
7155
0F46:  BNZ   0F50
7156
....................      debug_usb(debug_putc,"TOUT 0 "); 
7156
....................      debug_usb(debug_putc,"TOUT 0 "); 
7157
....................      #if USB_CDC_DEVICE 
7157
....................      #if USB_CDC_DEVICE 
7158
....................       usb_isr_tok_out_cdc_control_dne(); 
7158
....................       usb_isr_tok_out_cdc_control_dne(); 
7159
0F48:  MOVLB  0
7159
0F48:  MOVLB  0
7160
0F4A:  BRA    0E7E
7160
0F4A:  BRA    0E7E
7161
....................      #else 
7161
....................      #else 
7162
....................       usb_init_ep0_setup(); 
7162
....................       usb_init_ep0_setup(); 
7163
....................      #endif 
7163
....................      #endif 
7164
....................    } 
7164
....................    } 
7165
....................   #if USB_CDC_DEVICE 
7165
....................   #if USB_CDC_DEVICE 
7166
....................    else if (endpoint==USB_CDC_DATA_OUT_ENDPOINT) { //see ex_usb_serial.c example and usb_cdc.h driver 
7166
....................    else if (endpoint==USB_CDC_DATA_OUT_ENDPOINT) { //see ex_usb_serial.c example and usb_cdc.h driver 
7167
0F4C:  BRA    0F5A
7167
0F4C:  BRA    0F5A
7168
0F4E:  MOVLB  6
7168
0F4E:  MOVLB  6
7169
0F50:  MOVF   xFD,W
7169
0F50:  MOVF   xFD,W
7170
0F52:  SUBLW  02
7170
0F52:  SUBLW  02
7171
0F54:  BNZ   0F5C
7171
0F54:  BNZ   0F5C
7172
....................       usb_isr_tok_out_cdc_data_dne(); 
7172
....................       usb_isr_tok_out_cdc_data_dne(); 
7173
0F56:  MOVLB  0
7173
0F56:  MOVLB  0
7174
0F58:  BRA    0F2C
7174
0F58:  BRA    0F2C
7175
0F5A:  MOVLB  6
7175
0F5A:  MOVLB  6
7176
....................    } 
7176
....................    } 
7177
....................   #endif 
7177
....................   #endif 
7178
....................    //else { 
7178
....................    //else { 
7179
....................    //   bit_set(__usb_kbhit_status,endpoint); 
7179
....................    //   bit_set(__usb_kbhit_status,endpoint); 
7180
....................    //} 
7180
....................    //} 
7181
.................... } 
7181
.................... } 
7182
0F5C:  MOVLB  0
7182
0F5C:  MOVLB  0
7183
0F5E:  RETLW  00
7183
0F5E:  RETLW  00
7184
....................  
7184
....................  
7185
....................  
7185
....................  
7186
.................... //---- process setup message stage -----------// 
7186
.................... //---- process setup message stage -----------// 
7187
....................  
7187
....................  
7188
.................... // see usb.h for documentation 
7188
.................... // see usb.h for documentation 
7189
.................... void usb_isr_tok_setup_dne(void)  
7189
.................... void usb_isr_tok_setup_dne(void)  
7190
.................... { 
7190
.................... { 
7191
....................    USB_stack_status.dev_req=NONE; // clear the device request.. 
7191
....................    USB_stack_status.dev_req=NONE; // clear the device request.. 
7192
*
7192
*
7193
0BC0:  CLRF   1D
7193
0BC0:  CLRF   1D
7194
....................  
7194
....................  
7195
....................    switch(usb_ep0_rx_buffer[0] & 0x7F) { 
7195
....................    switch(usb_ep0_rx_buffer[0] & 0x7F) { 
7196
0BC2:  MOVLB  4
7196
0BC2:  MOVLB  4
7197
0BC4:  MOVF   x18,W
7197
0BC4:  MOVF   x18,W
7198
0BC6:  ANDLW  7F
7198
0BC6:  ANDLW  7F
7199
0BC8:  MOVLB  0
7199
0BC8:  MOVLB  0
7200
0BCA:  BZ    0BDA
7200
0BCA:  BZ    0BDA
7201
0BCC:  XORLW  01
7201
0BCC:  XORLW  01
7202
0BCE:  BZ    0BDC
7202
0BCE:  BZ    0BDC
7203
0BD0:  XORLW  03
7203
0BD0:  XORLW  03
7204
0BD2:  BZ    0BDE
7204
0BD2:  BZ    0BDE
7205
0BD4:  XORLW  23
7205
0BD4:  XORLW  23
7206
0BD6:  BZ    0BE0
7206
0BD6:  BZ    0BE0
7207
0BD8:  BRA    0BE2
7207
0BD8:  BRA    0BE2
7208
....................  
7208
....................  
7209
....................       case 0x00:  //standard to device 
7209
....................       case 0x00:  //standard to device 
7210
....................          debug_usb(debug_putc," d"); 
7210
....................          debug_usb(debug_putc," d"); 
7211
....................          usb_isr_tkn_setup_StandardDevice(); 
7211
....................          usb_isr_tkn_setup_StandardDevice(); 
7212
0BDA:  BRA    078C
7212
0BDA:  BRA    078C
7213
....................          break; 
7213
....................          break; 
7214
....................  
7214
....................  
7215
....................       case 0x01:  //standard to interface 
7215
....................       case 0x01:  //standard to interface 
7216
....................          debug_usb(debug_putc," i"); 
7216
....................          debug_usb(debug_putc," i"); 
7217
....................          usb_isr_tkn_setup_StandardInterface(); 
7217
....................          usb_isr_tkn_setup_StandardInterface(); 
7218
0BDC:  BRA    0840
7218
0BDC:  BRA    0840
7219
....................          break; 
7219
....................          break; 
7220
....................  
7220
....................  
7221
....................       case 0x02:  //standard to endpoint 
7221
....................       case 0x02:  //standard to endpoint 
7222
....................          debug_usb(debug_putc," e"); 
7222
....................          debug_usb(debug_putc," e"); 
7223
....................          usb_isr_tkn_setup_StandardEndpoint(); 
7223
....................          usb_isr_tkn_setup_StandardEndpoint(); 
7224
0BDE:  BRA    0AA2
7224
0BDE:  BRA    0AA2
7225
....................          break; 
7225
....................          break; 
7226
....................  
7226
....................  
7227
.................... #IF USB_HID_DEVICE 
7227
.................... #IF USB_HID_DEVICE 
7228
....................       case 0x21:  //class specific request.  the only class this driver supports is HID 
7228
....................       case 0x21:  //class specific request.  the only class this driver supports is HID 
7229
....................          debug_usb(debug_putc," hid"); 
7229
....................          debug_usb(debug_putc," hid"); 
7230
....................          usb_isr_tkn_setup_ClassInterface(); 
7230
....................          usb_isr_tkn_setup_ClassInterface(); 
7231
....................          break; 
7231
....................          break; 
7232
.................... #endif 
7232
.................... #endif 
7233
....................  
7233
....................  
7234
.................... #if USB_CDC_DEVICE 
7234
.................... #if USB_CDC_DEVICE 
7235
....................       case 0x21: 
7235
....................       case 0x21: 
7236
....................          debug_usb(debug_putc," cdc"); 
7236
....................          debug_usb(debug_putc," cdc"); 
7237
....................          usb_isr_tkn_cdc(); 
7237
....................          usb_isr_tkn_cdc(); 
7238
0BE0:  BRA    0B12
7238
0BE0:  BRA    0B12
7239
....................          break; 
7239
....................          break; 
7240
.................... #endif 
7240
.................... #endif 
7241
....................       //TODO: IF YOU WANT VENDOR SPECIFC REQUEST SUPPORT YOU MUST ADD IT HERE 
7241
....................       //TODO: IF YOU WANT VENDOR SPECIFC REQUEST SUPPORT YOU MUST ADD IT HERE 
7242
....................  
7242
....................  
7243
....................       default: 
7243
....................       default: 
7244
....................          usb_request_stall(); 
7244
....................          usb_request_stall(); 
7245
0BE2:  RCALL  03F4
7245
0BE2:  RCALL  03F4
7246
....................          break; 
7246
....................          break; 
7247
0BE4:  BRA    0BE6
7247
0BE4:  BRA    0BE6
7248
....................    } 
7248
....................    } 
7249
.................... } 
7249
.................... } 
7250
0BE6:  GOTO   10C2 (RETURN)
7250
0BE6:  GOTO   10C2 (RETURN)
7251
....................  
7251
....................  
7252
.................... /************************************************************** 
7252
.................... /************************************************************** 
7253
.................... /* usb_isr_tkn_setup_StandardDevice() 
7253
.................... /* usb_isr_tkn_setup_StandardDevice() 
7254
.................... /* 
7254
.................... /* 
7255
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7255
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7256
.................... /* 
7256
.................... /* 
7257
.................... /* Summary: bmRequestType told us it was a Standard Device request. 
7257
.................... /* Summary: bmRequestType told us it was a Standard Device request. 
7258
.................... /*          bRequest says which request.  Only certain requests are valid, 
7258
.................... /*          bRequest says which request.  Only certain requests are valid, 
7259
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7259
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7260
.................... /* 
7260
.................... /* 
7261
.................... /* Part of usb_isr_tok_setup_dne() 
7261
.................... /* Part of usb_isr_tok_setup_dne() 
7262
.................... /***************************************************************/ 
7262
.................... /***************************************************************/ 
7263
.................... void usb_isr_tkn_setup_StandardDevice(void) { 
7263
.................... void usb_isr_tkn_setup_StandardDevice(void) { 
7264
....................    switch(usb_ep0_rx_buffer[1]) { 
7264
....................    switch(usb_ep0_rx_buffer[1]) { 
7265
*
7265
*
7266
078C:  MOVLB  4
7266
078C:  MOVLB  4
7267
078E:  MOVF   x19,W
7267
078E:  MOVF   x19,W
7268
0790:  MOVLB  0
7268
0790:  MOVLB  0
7269
0792:  BZ    07AE
7269
0792:  BZ    07AE
7270
0794:  XORLW  01
7270
0794:  XORLW  01
7271
0796:  BZ    07C2
7271
0796:  BZ    07C2
7272
0798:  XORLW  02
7272
0798:  XORLW  02
7273
079A:  BZ    07DC
7273
079A:  BZ    07DC
7274
079C:  XORLW  06
7274
079C:  XORLW  06
7275
079E:  BZ    07F4
7275
079E:  BZ    07F4
7276
07A0:  XORLW  03
7276
07A0:  XORLW  03
7277
07A2:  BZ    0806
7277
07A2:  BZ    0806
7278
07A4:  XORLW  0E
7278
07A4:  XORLW  0E
7279
07A6:  BZ    0808
7279
07A6:  BZ    0808
7280
07A8:  XORLW  01
7280
07A8:  XORLW  01
7281
07AA:  BZ    0818
7281
07AA:  BZ    0818
7282
07AC:  BRA    0838
7282
07AC:  BRA    0838
7283
....................  
7283
....................  
7284
....................       case USB_STANDARD_REQUEST_GET_STATUS:  //0 
7284
....................       case USB_STANDARD_REQUEST_GET_STATUS:  //0 
7285
....................             debug_usb(debug_putc,"GS"); 
7285
....................             debug_usb(debug_putc,"GS"); 
7286
....................             usb_ep0_tx_buffer[0]=USB_stack_status.status_device; 
7286
....................             usb_ep0_tx_buffer[0]=USB_stack_status.status_device; 
7287
07AE:  MOVFF  1F,458
7287
07AE:  MOVFF  1F,458
7288
....................             usb_ep0_tx_buffer[1]=0; 
7288
....................             usb_ep0_tx_buffer[1]=0; 
7289
07B2:  MOVLB  4
7289
07B2:  MOVLB  4
7290
07B4:  CLRF   x59
7290
07B4:  CLRF   x59
7291
....................             usb_request_send_response(2); 
7291
....................             usb_request_send_response(2); 
7292
07B6:  MOVLW  02
7292
07B6:  MOVLW  02
7293
07B8:  MOVLB  7
7293
07B8:  MOVLB  7
7294
07BA:  MOVWF  x00
7294
07BA:  MOVWF  x00
7295
07BC:  MOVLB  0
7295
07BC:  MOVLB  0
7296
07BE:  RCALL  03EE
7296
07BE:  RCALL  03EE
7297
....................             break; 
7297
....................             break; 
7298
07C0:  BRA    083C
7298
07C0:  BRA    083C
7299
....................  
7299
....................  
7300
....................       case USB_STANDARD_REQUEST_CLEAR_FEATURE:  //1 
7300
....................       case USB_STANDARD_REQUEST_CLEAR_FEATURE:  //1 
7301
....................             if (usb_ep0_rx_buffer[2] == 1) { 
7301
....................             if (usb_ep0_rx_buffer[2] == 1) { 
7302
07C2:  MOVLB  4
7302
07C2:  MOVLB  4
7303
07C4:  DECFSZ x1A,W
7303
07C4:  DECFSZ x1A,W
7304
07C6:  BRA    07D6
7304
07C6:  BRA    07D6
7305
....................                debug_usb(debug_putc,"CF"); 
7305
....................                debug_usb(debug_putc,"CF"); 
7306
....................                USB_stack_status.status_device &= 1; 
7306
....................                USB_stack_status.status_device &= 1; 
7307
07C8:  MOVLW  01
7307
07C8:  MOVLW  01
7308
07CA:  ANDWF  1F,F
7308
07CA:  ANDWF  1F,F
7309
....................                usb_put_0len_0(); 
7309
....................                usb_put_0len_0(); 
7310
07CC:  MOVLB  7
7310
07CC:  MOVLB  7
7311
07CE:  CLRF   x00
7311
07CE:  CLRF   x00
7312
07D0:  MOVLB  0
7312
07D0:  MOVLB  0
7313
07D2:  RCALL  03EE
7313
07D2:  RCALL  03EE
7314
....................             } 
7314
....................             } 
7315
....................             else 
7315
....................             else 
7316
07D4:  BRA    07DA
7316
07D4:  BRA    07DA
7317
....................                usb_request_stall(); 
7317
....................                usb_request_stall(); 
7318
07D6:  MOVLB  0
7318
07D6:  MOVLB  0
7319
07D8:  RCALL  03F4
7319
07D8:  RCALL  03F4
7320
....................             break; 
7320
....................             break; 
7321
07DA:  BRA    083C
7321
07DA:  BRA    083C
7322
....................  
7322
....................  
7323
....................       case USB_STANDARD_REQUEST_SET_FEATURE: //3 
7323
....................       case USB_STANDARD_REQUEST_SET_FEATURE: //3 
7324
....................             if (usb_ep0_rx_buffer[2] == 1) { 
7324
....................             if (usb_ep0_rx_buffer[2] == 1) { 
7325
07DC:  MOVLB  4
7325
07DC:  MOVLB  4
7326
07DE:  DECFSZ x1A,W
7326
07DE:  DECFSZ x1A,W
7327
07E0:  BRA    07EE
7327
07E0:  BRA    07EE
7328
....................                debug_usb(debug_putc,"SF"); 
7328
....................                debug_usb(debug_putc,"SF"); 
7329
....................                USB_stack_status.status_device |= 2; 
7329
....................                USB_stack_status.status_device |= 2; 
7330
07E2:  BSF    1F.1
7330
07E2:  BSF    1F.1
7331
....................                usb_put_0len_0(); 
7331
....................                usb_put_0len_0(); 
7332
07E4:  MOVLB  7
7332
07E4:  MOVLB  7
7333
07E6:  CLRF   x00
7333
07E6:  CLRF   x00
7334
07E8:  MOVLB  0
7334
07E8:  MOVLB  0
7335
07EA:  RCALL  03EE
7335
07EA:  RCALL  03EE
7336
....................             } 
7336
....................             } 
7337
....................             else 
7337
....................             else 
7338
07EC:  BRA    07F2
7338
07EC:  BRA    07F2
7339
....................                usb_request_stall(); 
7339
....................                usb_request_stall(); 
7340
07EE:  MOVLB  0
7340
07EE:  MOVLB  0
7341
07F0:  RCALL  03F4
7341
07F0:  RCALL  03F4
7342
....................             break; 
7342
....................             break; 
7343
07F2:  BRA    083C
7343
07F2:  BRA    083C
7344
....................  
7344
....................  
7345
....................       case USB_STANDARD_REQUEST_SET_ADDRESS: //5 
7345
....................       case USB_STANDARD_REQUEST_SET_ADDRESS: //5 
7346
....................             debug_usb(debug_putc,"SA"); 
7346
....................             debug_usb(debug_putc,"SA"); 
7347
....................             USB_stack_status.dev_req=SET_ADDRESS; //currently processing set_address request 
7347
....................             USB_stack_status.dev_req=SET_ADDRESS; //currently processing set_address request 
7348
07F4:  MOVLW  02
7348
07F4:  MOVLW  02
7349
07F6:  MOVWF  1D
7349
07F6:  MOVWF  1D
7350
....................             USB_address_pending=usb_ep0_rx_buffer[2]; 
7350
....................             USB_address_pending=usb_ep0_rx_buffer[2]; 
7351
07F8:  MOVFF  41A,26
7351
07F8:  MOVFF  41A,26
7352
....................             #ifdef __USBN__   //NATIONAL part handles this differently than pic16c7x5 
7352
....................             #ifdef __USBN__   //NATIONAL part handles this differently than pic16c7x5 
7353
....................             USB_stack_status.dev_req=NONE; //currently processing set_address request 
7353
....................             USB_stack_status.dev_req=NONE; //currently processing set_address request 
7354
....................             usb_set_address(USB_address_pending); 
7354
....................             usb_set_address(USB_address_pending); 
7355
....................             USB_stack_status.curr_config=0;   // make sure current configuration is 0 
7355
....................             USB_stack_status.curr_config=0;   // make sure current configuration is 0 
7356
....................             #endif 
7356
....................             #endif 
7357
....................             usb_put_0len_0(); 
7357
....................             usb_put_0len_0(); 
7358
07FC:  MOVLB  7
7358
07FC:  MOVLB  7
7359
07FE:  CLRF   x00
7359
07FE:  CLRF   x00
7360
0800:  MOVLB  0
7360
0800:  MOVLB  0
7361
0802:  RCALL  03EE
7361
0802:  RCALL  03EE
7362
....................             break; 
7362
....................             break; 
7363
0804:  BRA    083C
7363
0804:  BRA    083C
7364
....................  
7364
....................  
7365
....................       case USB_STANDARD_REQUEST_GET_DESCRIPTOR: //6 
7365
....................       case USB_STANDARD_REQUEST_GET_DESCRIPTOR: //6 
7366
....................             debug_usb(debug_putc,"GD"); 
7366
....................             debug_usb(debug_putc,"GD"); 
7367
....................             usb_Get_Descriptor(); 
7367
....................             usb_Get_Descriptor(); 
7368
0806:  BRA    049C
7368
0806:  BRA    049C
7369
....................             break; 
7369
....................             break; 
7370
....................  
7370
....................  
7371
....................       case USB_STANDARD_REQUEST_GET_CONFIGURATION: //8 
7371
....................       case USB_STANDARD_REQUEST_GET_CONFIGURATION: //8 
7372
....................             debug_usb(debug_putc,"GC"); 
7372
....................             debug_usb(debug_putc,"GC"); 
7373
....................             usb_ep0_tx_buffer[0]=USB_stack_status.curr_config; 
7373
....................             usb_ep0_tx_buffer[0]=USB_stack_status.curr_config; 
7374
0808:  MOVFF  1E,458
7374
0808:  MOVFF  1E,458
7375
....................             usb_request_send_response(1); 
7375
....................             usb_request_send_response(1); 
7376
080C:  MOVLW  01
7376
080C:  MOVLW  01
7377
080E:  MOVLB  7
7377
080E:  MOVLB  7
7378
0810:  MOVWF  x00
7378
0810:  MOVWF  x00
7379
0812:  MOVLB  0
7379
0812:  MOVLB  0
7380
0814:  RCALL  03EE
7380
0814:  RCALL  03EE
7381
....................             break; 
7381
....................             break; 
7382
0816:  BRA    083C
7382
0816:  BRA    083C
7383
....................  
7383
....................  
7384
....................       case USB_STANDARD_REQUEST_SET_CONFIGURATION: //9 
7384
....................       case USB_STANDARD_REQUEST_SET_CONFIGURATION: //9 
7385
....................             if (usb_ep0_rx_buffer[2] <= USB_NUM_CONFIGURATIONS) { 
7385
....................             if (usb_ep0_rx_buffer[2] <= USB_NUM_CONFIGURATIONS) { 
7386
0818:  MOVLB  4
7386
0818:  MOVLB  4
7387
081A:  MOVF   x1A,W
7387
081A:  MOVF   x1A,W
7388
081C:  SUBLW  01
7388
081C:  SUBLW  01
7389
081E:  BNC   0834
7389
081E:  BNC   0834
7390
....................                USB_stack_status.curr_config=usb_ep0_rx_buffer[2]; 
7390
....................                USB_stack_status.curr_config=usb_ep0_rx_buffer[2]; 
7391
0820:  MOVFF  41A,1E
7391
0820:  MOVFF  41A,1E
7392
....................                usb_set_configured(usb_ep0_rx_buffer[2]); 
7392
....................                usb_set_configured(usb_ep0_rx_buffer[2]); 
7393
0824:  MOVFF  41A,6FD
7393
0824:  MOVFF  41A,6FD
7394
0828:  MOVLB  0
7394
0828:  MOVLB  0
7395
082A:  BRA    055C
7395
082A:  BRA    055C
7396
....................                debug_usb(debug_putc,"SC%U", USB_stack_status.curr_config);                
7396
....................                debug_usb(debug_putc,"SC%U", USB_stack_status.curr_config);                
7397
....................                usb_put_0len_0(); 
7397
....................                usb_put_0len_0(); 
7398
082C:  MOVLB  7
7398
082C:  MOVLB  7
7399
082E:  CLRF   x00
7399
082E:  CLRF   x00
7400
0830:  MOVLB  0
7400
0830:  MOVLB  0
7401
0832:  RCALL  03EE
7401
0832:  RCALL  03EE
7402
....................             } 
7402
....................             } 
7403
....................             break; 
7403
....................             break; 
7404
0834:  MOVLB  0
7404
0834:  MOVLB  0
7405
0836:  BRA    083C
7405
0836:  BRA    083C
7406
....................  
7406
....................  
7407
....................       default: 
7407
....................       default: 
7408
....................             usb_request_stall(); 
7408
....................             usb_request_stall(); 
7409
0838:  RCALL  03F4
7409
0838:  RCALL  03F4
7410
....................             break; 
7410
....................             break; 
7411
083A:  BRA    083C
7411
083A:  BRA    083C
7412
....................    } 
7412
....................    } 
7413
.................... } 
7413
.................... } 
7414
083C:  GOTO   0BE6 (RETURN)
7414
083C:  GOTO   0BE6 (RETURN)
7415
....................  
7415
....................  
7416
.................... /************************************************************** 
7416
.................... /************************************************************** 
7417
.................... /* usb_isr_tkn_setup_StandardInterface() 
7417
.................... /* usb_isr_tkn_setup_StandardInterface() 
7418
.................... /* 
7418
.................... /* 
7419
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7419
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7420
.................... /* 
7420
.................... /* 
7421
.................... /* Summary: bmRequestType told us it was a Standard Interface request. 
7421
.................... /* Summary: bmRequestType told us it was a Standard Interface request. 
7422
.................... /*          bRequest says which request.  Only certain requests are valid, 
7422
.................... /*          bRequest says which request.  Only certain requests are valid, 
7423
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7423
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7424
.................... /* 
7424
.................... /* 
7425
.................... /* Part of usb_isr_tok_setup_dne() 
7425
.................... /* Part of usb_isr_tok_setup_dne() 
7426
.................... /***************************************************************/ 
7426
.................... /***************************************************************/ 
7427
.................... void usb_isr_tkn_setup_StandardInterface(void) { 
7427
.................... void usb_isr_tkn_setup_StandardInterface(void) { 
7428
....................    int8 curr_config; 
7428
....................    int8 curr_config; 
7429
....................  
7429
....................  
7430
....................    curr_config=USB_stack_status.curr_config; 
7430
....................    curr_config=USB_stack_status.curr_config; 
7431
0840:  MOVFF  1E,6FD
7431
0840:  MOVFF  1E,6FD
7432
....................  
7432
....................  
7433
....................    switch (usb_ep0_rx_buffer[1]) { 
7433
....................    switch (usb_ep0_rx_buffer[1]) { 
7434
0844:  MOVLB  4
7434
0844:  MOVLB  4
7435
0846:  MOVF   x19,W
7435
0846:  MOVF   x19,W
7436
0848:  MOVLB  0
7436
0848:  MOVLB  0
7437
084A:  BZ    0856
7437
084A:  BZ    0856
7438
084C:  XORLW  0A
7438
084C:  XORLW  0A
7439
084E:  BZ    0868
7439
084E:  BZ    0868
7440
0850:  XORLW  01
7440
0850:  XORLW  01
7441
0852:  BZ    08B6
7441
0852:  BZ    08B6
7442
0854:  BRA    08E0
7442
0854:  BRA    08E0
7443
....................       case USB_STANDARD_REQUEST_GET_STATUS: 
7443
....................       case USB_STANDARD_REQUEST_GET_STATUS: 
7444
....................             debug_usb(debug_putc,"GS"); 
7444
....................             debug_usb(debug_putc,"GS"); 
7445
....................             usb_ep0_tx_buffer[0]=0; 
7445
....................             usb_ep0_tx_buffer[0]=0; 
7446
0856:  MOVLB  4
7446
0856:  MOVLB  4
7447
0858:  CLRF   x58
7447
0858:  CLRF   x58
7448
....................             usb_ep0_tx_buffer[1]=0; 
7448
....................             usb_ep0_tx_buffer[1]=0; 
7449
085A:  CLRF   x59
7449
085A:  CLRF   x59
7450
....................             usb_request_send_response(2); 
7450
....................             usb_request_send_response(2); 
7451
085C:  MOVLW  02
7451
085C:  MOVLW  02
7452
085E:  MOVLB  7
7452
085E:  MOVLB  7
7453
0860:  MOVWF  x00
7453
0860:  MOVWF  x00
7454
0862:  MOVLB  0
7454
0862:  MOVLB  0
7455
0864:  RCALL  03EE
7455
0864:  RCALL  03EE
7456
....................             break; 
7456
....................             break; 
7457
0866:  BRA    08E4
7457
0866:  BRA    08E4
7458
....................  
7458
....................  
7459
....................       case USB_STANDARD_REQUEST_GET_INTERFACE: 
7459
....................       case USB_STANDARD_REQUEST_GET_INTERFACE: 
7460
....................             if ( curr_config && (usb_ep0_rx_buffer[4] < USB_NUM_INTERFACES[curr_config-1]) ) {   //book says only supports configed state 
7460
....................             if ( curr_config && (usb_ep0_rx_buffer[4] < USB_NUM_INTERFACES[curr_config-1]) ) {   //book says only supports configed state 
7461
0868:  MOVLB  6
7461
0868:  MOVLB  6
7462
086A:  MOVF   xFD,F
7462
086A:  MOVF   xFD,F
7463
086C:  BZ    08B0
7463
086C:  BZ    08B0
7464
086E:  MOVLW  01
7464
086E:  MOVLW  01
7465
0870:  SUBWF  xFD,W
7465
0870:  SUBWF  xFD,W
7466
0872:  CLRF   03
7466
0872:  CLRF   03
7467
0874:  MOVFF  FF2,6FE
7467
0874:  MOVFF  FF2,6FE
7468
0878:  BCF    FF2.7
7468
0878:  BCF    FF2.7
7469
087A:  MOVLB  0
7469
087A:  MOVLB  0
7470
087C:  RCALL  019E
7470
087C:  RCALL  019E
7471
087E:  MOVLB  6
7471
087E:  MOVLB  6
7472
0880:  BTFSC  xFE.7
7472
0880:  BTFSC  xFE.7
7473
0882:  BSF    FF2.7
7473
0882:  BSF    FF2.7
7474
0884:  MOVWF  01
7474
0884:  MOVWF  01
7475
0886:  MOVLB  4
7475
0886:  MOVLB  4
7476
0888:  SUBWF  x1C,W
7476
0888:  SUBWF  x1C,W
7477
088A:  BTFSS  FD8.0
7477
088A:  BTFSS  FD8.0
7478
088C:  BRA    0892
7478
088C:  BRA    0892
7479
088E:  MOVLB  6
7479
088E:  MOVLB  6
7480
0890:  BRA    08B0
7480
0890:  BRA    08B0
7481
....................                debug_usb(debug_putc,"GI"); 
7481
....................                debug_usb(debug_putc,"GI"); 
7482
....................                usb_ep0_tx_buffer[0]=USB_Interface[usb_ep0_rx_buffer[4]];//our new outgoing byte 
7482
....................                usb_ep0_tx_buffer[0]=USB_Interface[usb_ep0_rx_buffer[4]];//our new outgoing byte 
7483
0892:  CLRF   03
7483
0892:  CLRF   03
7484
0894:  MOVF   x1C,W
7484
0894:  MOVF   x1C,W
7485
0896:  ADDLW  29
7485
0896:  ADDLW  29
7486
0898:  MOVWF  FE9
7486
0898:  MOVWF  FE9
7487
089A:  MOVLW  00
7487
089A:  MOVLW  00
7488
089C:  ADDWFC 03,W
7488
089C:  ADDWFC 03,W
7489
089E:  MOVWF  FEA
7489
089E:  MOVWF  FEA
7490
08A0:  MOVFF  FEF,458
7490
08A0:  MOVFF  FEF,458
7491
....................                usb_request_send_response(1);; //send byte back 
7491
....................                usb_request_send_response(1);; //send byte back 
7492
08A4:  MOVLW  01
7492
08A4:  MOVLW  01
7493
08A6:  MOVLB  7
7493
08A6:  MOVLB  7
7494
08A8:  MOVWF  x00
7494
08A8:  MOVWF  x00
7495
08AA:  MOVLB  0
7495
08AA:  MOVLB  0
7496
08AC:  RCALL  03EE
7496
08AC:  RCALL  03EE
7497
....................             } 
7497
....................             } 
7498
....................             else 
7498
....................             else 
7499
08AE:  BRA    08B4
7499
08AE:  BRA    08B4
7500
....................                usb_request_stall(); 
7500
....................                usb_request_stall(); 
7501
08B0:  MOVLB  0
7501
08B0:  MOVLB  0
7502
08B2:  RCALL  03F4
7502
08B2:  RCALL  03F4
7503
....................             break; 
7503
....................             break; 
7504
08B4:  BRA    08E4
7504
08B4:  BRA    08E4
7505
....................  
7505
....................  
7506
....................       case USB_STANDARD_REQUEST_SET_INTERFACE: 
7506
....................       case USB_STANDARD_REQUEST_SET_INTERFACE: 
7507
....................             if (curr_config) { //if configured state 
7507
....................             if (curr_config) { //if configured state 
7508
08B6:  MOVLB  6
7508
08B6:  MOVLB  6
7509
08B8:  MOVF   xFD,F
7509
08B8:  MOVF   xFD,F
7510
08BA:  BZ    08DA
7510
08BA:  BZ    08DA
7511
....................                debug_usb(debug_putc,"SI"); 
7511
....................                debug_usb(debug_putc,"SI"); 
7512
....................                USB_Interface[usb_ep0_rx_buffer[4]]=usb_ep0_rx_buffer[2]; 
7512
....................                USB_Interface[usb_ep0_rx_buffer[4]]=usb_ep0_rx_buffer[2]; 
7513
08BC:  CLRF   03
7513
08BC:  CLRF   03
7514
08BE:  MOVLB  4
7514
08BE:  MOVLB  4
7515
08C0:  MOVF   x1C,W
7515
08C0:  MOVF   x1C,W
7516
08C2:  ADDLW  29
7516
08C2:  ADDLW  29
7517
08C4:  MOVWF  FE9
7517
08C4:  MOVWF  FE9
7518
08C6:  MOVLW  00
7518
08C6:  MOVLW  00
7519
08C8:  ADDWFC 03,W
7519
08C8:  ADDWFC 03,W
7520
08CA:  MOVWF  FEA
7520
08CA:  MOVWF  FEA
7521
08CC:  MOVFF  41A,FEF
7521
08CC:  MOVFF  41A,FEF
7522
....................                usb_put_0len_0(); 
7522
....................                usb_put_0len_0(); 
7523
08D0:  MOVLB  7
7523
08D0:  MOVLB  7
7524
08D2:  CLRF   x00
7524
08D2:  CLRF   x00
7525
08D4:  MOVLB  0
7525
08D4:  MOVLB  0
7526
08D6:  RCALL  03EE
7526
08D6:  RCALL  03EE
7527
....................             } 
7527
....................             } 
7528
....................             else 
7528
....................             else 
7529
08D8:  BRA    08DE
7529
08D8:  BRA    08DE
7530
....................                usb_request_stall(); 
7530
....................                usb_request_stall(); 
7531
08DA:  MOVLB  0
7531
08DA:  MOVLB  0
7532
08DC:  RCALL  03F4
7532
08DC:  RCALL  03F4
7533
....................             break; 
7533
....................             break; 
7534
08DE:  BRA    08E4
7534
08DE:  BRA    08E4
7535
....................  
7535
....................  
7536
.................... #IF USB_HID_DEVICE 
7536
.................... #IF USB_HID_DEVICE 
7537
....................       case USB_STANDARD_REQUEST_GET_DESCRIPTOR: 
7537
....................       case USB_STANDARD_REQUEST_GET_DESCRIPTOR: 
7538
....................             debug_usb(debug_putc,"GD"); 
7538
....................             debug_usb(debug_putc,"GD"); 
7539
....................             usb_Get_Descriptor(); 
7539
....................             usb_Get_Descriptor(); 
7540
....................             break; 
7540
....................             break; 
7541
.................... #endif 
7541
.................... #endif 
7542
....................  
7542
....................  
7543
.................... //      case USB_STANDARD_REQUEST_CLEAR_FEATURE: 
7543
.................... //      case USB_STANDARD_REQUEST_CLEAR_FEATURE: 
7544
.................... //      case USB_STANDARD_REQUEST_SET_FEATURE: 
7544
.................... //      case USB_STANDARD_REQUEST_SET_FEATURE: 
7545
.................... //                let default take care of these, goto wrongstate 
7545
.................... //                let default take care of these, goto wrongstate 
7546
....................       default: 
7546
....................       default: 
7547
....................             usb_request_stall(); 
7547
....................             usb_request_stall(); 
7548
08E0:  RCALL  03F4
7548
08E0:  RCALL  03F4
7549
....................             break; 
7549
....................             break; 
7550
08E2:  BRA    08E4
7550
08E2:  BRA    08E4
7551
....................    } 
7551
....................    } 
7552
.................... } 
7552
.................... } 
7553
08E4:  GOTO   0BE6 (RETURN)
7553
08E4:  GOTO   0BE6 (RETURN)
7554
....................  
7554
....................  
7555
.................... /************************************************************** 
7555
.................... /************************************************************** 
7556
.................... /* usb_isr_tkn_setup_StandardEndpoint() 
7556
.................... /* usb_isr_tkn_setup_StandardEndpoint() 
7557
.................... /* 
7557
.................... /* 
7558
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7558
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7559
.................... /* 
7559
.................... /* 
7560
.................... /* Summary: bmRequestType told us it was a Standard Endpoint request. 
7560
.................... /* Summary: bmRequestType told us it was a Standard Endpoint request. 
7561
.................... /*          bRequest says which request.  Only certain requests are valid, 
7561
.................... /*          bRequest says which request.  Only certain requests are valid, 
7562
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7562
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7563
.................... /* 
7563
.................... /* 
7564
.................... /* Part of usb_isr_tok_setup_dne() 
7564
.................... /* Part of usb_isr_tok_setup_dne() 
7565
.................... /***************************************************************/ 
7565
.................... /***************************************************************/ 
7566
.................... void usb_isr_tkn_setup_StandardEndpoint(void) { 
7566
.................... void usb_isr_tkn_setup_StandardEndpoint(void) { 
7567
....................    if (usb_endpoint_is_valid(usb_ep0_rx_buffer[4])) { 
7567
....................    if (usb_endpoint_is_valid(usb_ep0_rx_buffer[4])) { 
7568
*
7568
*
7569
0AA2:  MOVFF  41C,6FD
7569
0AA2:  MOVFF  41C,6FD
7570
0AA6:  BRA    08E8
7570
0AA6:  BRA    08E8
7571
0AA8:  MOVF   01,F
7571
0AA8:  MOVF   01,F
7572
0AAA:  BZ    0B08
7572
0AAA:  BZ    0B08
7573
....................       switch(usb_ep0_rx_buffer[1]) { 
7573
....................       switch(usb_ep0_rx_buffer[1]) { 
7574
0AAC:  MOVLB  4
7574
0AAC:  MOVLB  4
7575
0AAE:  MOVF   x19,W
7575
0AAE:  MOVF   x19,W
7576
0AB0:  XORLW  01
7576
0AB0:  XORLW  01
7577
0AB2:  MOVLB  0
7577
0AB2:  MOVLB  0
7578
0AB4:  BZ    0AC0
7578
0AB4:  BZ    0AC0
7579
0AB6:  XORLW  02
7579
0AB6:  XORLW  02
7580
0AB8:  BZ    0AD0
7580
0AB8:  BZ    0AD0
7581
0ABA:  XORLW  03
7581
0ABA:  XORLW  03
7582
0ABC:  BZ    0AE0
7582
0ABC:  BZ    0AE0
7583
0ABE:  BRA    0B04
7583
0ABE:  BRA    0B04
7584
....................  
7584
....................  
7585
....................          case USB_STANDARD_REQUEST_CLEAR_FEATURE: 
7585
....................          case USB_STANDARD_REQUEST_CLEAR_FEATURE: 
7586
....................                debug_usb(debug_putc,"CF"); 
7586
....................                debug_usb(debug_putc,"CF"); 
7587
....................                usb_unstall_ep(usb_ep0_rx_buffer[4]); 
7587
....................                usb_unstall_ep(usb_ep0_rx_buffer[4]); 
7588
0AC0:  MOVFF  41C,6FD
7588
0AC0:  MOVFF  41C,6FD
7589
0AC4:  BRA    0946
7589
0AC4:  BRA    0946
7590
....................                usb_put_0len_0(); 
7590
....................                usb_put_0len_0(); 
7591
0AC6:  MOVLB  7
7591
0AC6:  MOVLB  7
7592
0AC8:  CLRF   x00
7592
0AC8:  CLRF   x00
7593
0ACA:  MOVLB  0
7593
0ACA:  MOVLB  0
7594
0ACC:  RCALL  03EE
7594
0ACC:  RCALL  03EE
7595
....................                break; 
7595
....................                break; 
7596
0ACE:  BRA    0B08
7596
0ACE:  BRA    0B08
7597
....................  
7597
....................  
7598
....................          case USB_STANDARD_REQUEST_SET_FEATURE: 
7598
....................          case USB_STANDARD_REQUEST_SET_FEATURE: 
7599
....................                      debug_usb(debug_putc,"SF"); 
7599
....................                      debug_usb(debug_putc,"SF"); 
7600
....................                      usb_stall_ep(usb_ep0_rx_buffer[4]); 
7600
....................                      usb_stall_ep(usb_ep0_rx_buffer[4]); 
7601
0AD0:  MOVFF  41C,6FD
7601
0AD0:  MOVFF  41C,6FD
7602
0AD4:  BRA    09B4
7602
0AD4:  BRA    09B4
7603
....................                      usb_put_0len_0(); 
7603
....................                      usb_put_0len_0(); 
7604
0AD6:  MOVLB  7
7604
0AD6:  MOVLB  7
7605
0AD8:  CLRF   x00
7605
0AD8:  CLRF   x00
7606
0ADA:  MOVLB  0
7606
0ADA:  MOVLB  0
7607
0ADC:  RCALL  03EE
7607
0ADC:  RCALL  03EE
7608
....................                      break; 
7608
....................                      break; 
7609
0ADE:  BRA    0B08
7609
0ADE:  BRA    0B08
7610
....................  
7610
....................  
7611
....................          case USB_STANDARD_REQUEST_GET_STATUS: 
7611
....................          case USB_STANDARD_REQUEST_GET_STATUS: 
7612
....................                debug_usb(debug_putc,"GS"); 
7612
....................                debug_usb(debug_putc,"GS"); 
7613
....................                usb_ep0_tx_buffer[0]=0; 
7613
....................                usb_ep0_tx_buffer[0]=0; 
7614
0AE0:  MOVLB  4
7614
0AE0:  MOVLB  4
7615
0AE2:  CLRF   x58
7615
0AE2:  CLRF   x58
7616
....................                usb_ep0_tx_buffer[1]=0; 
7616
....................                usb_ep0_tx_buffer[1]=0; 
7617
0AE4:  CLRF   x59
7617
0AE4:  CLRF   x59
7618
....................                if (usb_endpoint_stalled(usb_ep0_rx_buffer[4])) { 
7618
....................                if (usb_endpoint_stalled(usb_ep0_rx_buffer[4])) { 
7619
0AE6:  MOVFF  41C,6FD
7619
0AE6:  MOVFF  41C,6FD
7620
0AEA:  MOVLB  0
7620
0AEA:  MOVLB  0
7621
0AEC:  BRA    0A24
7621
0AEC:  BRA    0A24
7622
0AEE:  MOVF   01,F
7622
0AEE:  MOVF   01,F
7623
0AF0:  BZ    0AF8
7623
0AF0:  BZ    0AF8
7624
....................                   usb_ep0_tx_buffer[0]=1; 
7624
....................                   usb_ep0_tx_buffer[0]=1; 
7625
0AF2:  MOVLW  01
7625
0AF2:  MOVLW  01
7626
0AF4:  MOVLB  4
7626
0AF4:  MOVLB  4
7627
0AF6:  MOVWF  x58
7627
0AF6:  MOVWF  x58
7628
....................                } 
7628
....................                } 
7629
....................                usb_request_send_response(2); 
7629
....................                usb_request_send_response(2); 
7630
0AF8:  MOVLW  02
7630
0AF8:  MOVLW  02
7631
0AFA:  MOVLB  7
7631
0AFA:  MOVLB  7
7632
0AFC:  MOVWF  x00
7632
0AFC:  MOVWF  x00
7633
0AFE:  MOVLB  0
7633
0AFE:  MOVLB  0
7634
0B00:  RCALL  03EE
7634
0B00:  RCALL  03EE
7635
....................                break; 
7635
....................                break; 
7636
0B02:  BRA    0B08
7636
0B02:  BRA    0B08
7637
....................  
7637
....................  
7638
....................          default: 
7638
....................          default: 
7639
....................             usb_request_stall(); 
7639
....................             usb_request_stall(); 
7640
0B04:  RCALL  03F4
7640
0B04:  RCALL  03F4
7641
....................             break; 
7641
....................             break; 
7642
0B06:  BRA    0B08
7642
0B06:  BRA    0B08
7643
....................       } 
7643
....................       } 
7644
....................    } 
7644
....................    } 
7645
.................... } 
7645
.................... } 
7646
0B08:  GOTO   0BE6 (RETURN)
7646
0B08:  GOTO   0BE6 (RETURN)
7647
....................  
7647
....................  
7648
.................... /************************************************************** 
7648
.................... /************************************************************** 
7649
.................... /* usb_isr_tkn_setup_ClassInterface() 
7649
.................... /* usb_isr_tkn_setup_ClassInterface() 
7650
.................... /* 
7650
.................... /* 
7651
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7651
.................... /* Input: usb_ep0_rx_buffer[1] == bRequest 
7652
.................... /* 
7652
.................... /* 
7653
.................... /* Summary: bmRequestType told us it was a Class request.  The only Class this drivers supports is HID. 
7653
.................... /* Summary: bmRequestType told us it was a Class request.  The only Class this drivers supports is HID. 
7654
.................... /*          bRequest says which request.  Only certain requests are valid, 
7654
.................... /*          bRequest says which request.  Only certain requests are valid, 
7655
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7655
.................... /*          if a non-valid request was made then return with an Wrong-Statue (IDLE) 
7656
.................... /* 
7656
.................... /* 
7657
.................... /* Part of usb_isr_tok_setup_dne() 
7657
.................... /* Part of usb_isr_tok_setup_dne() 
7658
.................... /* Only compiled if HID_DEVICE is TRUE 
7658
.................... /* Only compiled if HID_DEVICE is TRUE 
7659
.................... /***************************************************************/ 
7659
.................... /***************************************************************/ 
7660
.................... #IF USB_HID_DEVICE 
7660
.................... #IF USB_HID_DEVICE 
7661
.................... void usb_isr_tkn_setup_ClassInterface(void) { 
7661
.................... void usb_isr_tkn_setup_ClassInterface(void) { 
7662
....................    switch(usb_ep0_rx_buffer[1]) { 
7662
....................    switch(usb_ep0_rx_buffer[1]) { 
7663
....................  
7663
....................  
7664
....................     #IF USB_HID_BOOT_PROTOCOL 
7664
....................     #IF USB_HID_BOOT_PROTOCOL 
7665
....................       case USB_HID_REQUEST_GET_PROTOCOL:  //03 
7665
....................       case USB_HID_REQUEST_GET_PROTOCOL:  //03 
7666
....................             debug_usb(debug_putc,"GP"); 
7666
....................             debug_usb(debug_putc,"GP"); 
7667
....................             usb_ep0_tx_buffer[0]=hid_protocol[usb_ep0_rx_buffer[4]]; 
7667
....................             usb_ep0_tx_buffer[0]=hid_protocol[usb_ep0_rx_buffer[4]]; 
7668
....................             usb_request_send_response(1); 
7668
....................             usb_request_send_response(1); 
7669
....................             break; 
7669
....................             break; 
7670
....................     #ENDIF 
7670
....................     #ENDIF 
7671
....................  
7671
....................  
7672
....................     #IF USB_HID_BOOT_PROTOCOL 
7672
....................     #IF USB_HID_BOOT_PROTOCOL 
7673
....................       case USB_HID_REQUEST_SET_PROTOCOL:  //0b 
7673
....................       case USB_HID_REQUEST_SET_PROTOCOL:  //0b 
7674
....................             debug_usb(debug_putc,"SP"); 
7674
....................             debug_usb(debug_putc,"SP"); 
7675
....................             hid_protocol[usb_ep0_rx_buffer[4]]=usb_ep0_rx_buffer[2]; 
7675
....................             hid_protocol[usb_ep0_rx_buffer[4]]=usb_ep0_rx_buffer[2]; 
7676
....................             usb_put_0len_0(); //send 0len packet69 
7676
....................             usb_put_0len_0(); //send 0len packet69 
7677
....................             break; 
7677
....................             break; 
7678
....................     #ENDIF 
7678
....................     #ENDIF 
7679
....................  
7679
....................  
7680
....................    #IF USB_HID_IDLE 
7680
....................    #IF USB_HID_IDLE 
7681
....................       case USB_HID_REQUEST_SET_IDLE:   //0a 
7681
....................       case USB_HID_REQUEST_SET_IDLE:   //0a 
7682
....................          #error TODO: if you want to support SET_IDLE, add code here 
7682
....................          #error TODO: if you want to support SET_IDLE, add code here 
7683
....................    #ENDIF 
7683
....................    #ENDIF 
7684
....................  
7684
....................  
7685
....................    #IF USB_HID_IDLE 
7685
....................    #IF USB_HID_IDLE 
7686
....................       case USB_HID_REQUEST_GET_IDLE:   //02 
7686
....................       case USB_HID_REQUEST_GET_IDLE:   //02 
7687
....................          #error TODO: if you want to support GET_IDLE, add code here 
7687
....................          #error TODO: if you want to support GET_IDLE, add code here 
7688
....................    #ENDIF 
7688
....................    #ENDIF 
7689
....................  
7689
....................  
7690
....................       default: 
7690
....................       default: 
7691
....................             usb_request_stall(); 
7691
....................             usb_request_stall(); 
7692
....................             break; 
7692
....................             break; 
7693
....................    } 
7693
....................    } 
7694
.................... } 
7694
.................... } 
7695
.................... #ENDIF 
7695
.................... #ENDIF 
7696
....................  
7696
....................  
7697
.................... /************************************************************** 
7697
.................... /************************************************************** 
7698
.................... /* usb_Get_Descriptor() 
7698
.................... /* usb_Get_Descriptor() 
7699
.................... /* 
7699
.................... /* 
7700
.................... /* Input: usb_ep0_rx_buffer[3] == wValue, which descriptor we want 
7700
.................... /* Input: usb_ep0_rx_buffer[3] == wValue, which descriptor we want 
7701
.................... /*        usb_ep0_rx_buffer[6,7] == Max length the host will accept 
7701
.................... /*        usb_ep0_rx_buffer[6,7] == Max length the host will accept 
7702
.................... /* 
7702
.................... /* 
7703
.................... /* Summary: Checks to see if we want a standard descriptor (Interface, Endpoint, Config, Device, String, etc.), 
7703
.................... /* Summary: Checks to see if we want a standard descriptor (Interface, Endpoint, Config, Device, String, etc.), 
7704
.................... /*          or a class specific (HID) descriptor.  Since some pics (especially the PIC167x5) doesn't have 
7704
.................... /*          or a class specific (HID) descriptor.  Since some pics (especially the PIC167x5) doesn't have 
7705
.................... /*          pointers to constants we must simulate or own by setting up global registers that say 
7705
.................... /*          pointers to constants we must simulate or own by setting up global registers that say 
7706
.................... /*          which constant array to deal with, which position to start in this array, and the length. 
7706
.................... /*          which constant array to deal with, which position to start in this array, and the length. 
7707
.................... /*          Once these globals are setup the first packet is sent.  If a descriptor takes more than one packet 
7707
.................... /*          Once these globals are setup the first packet is sent.  If a descriptor takes more than one packet 
7708
.................... /*          the PC will send an IN request to endpoint 0, and this will be handled by usb_isr_tok_in_dne() 
7708
.................... /*          the PC will send an IN request to endpoint 0, and this will be handled by usb_isr_tok_in_dne() 
7709
.................... /*          which will send the rest of the data. 
7709
.................... /*          which will send the rest of the data. 
7710
.................... /* 
7710
.................... /* 
7711
.................... /* Part of usb_isr_tok_setup_dne() 
7711
.................... /* Part of usb_isr_tok_setup_dne() 
7712
.................... /***************************************************************/ 
7712
.................... /***************************************************************/ 
7713
.................... void usb_Get_Descriptor() { 
7713
.................... void usb_Get_Descriptor() { 
7714
....................    usb_getdesc_ptr=0; 
7714
....................    usb_getdesc_ptr=0; 
7715
*
7715
*
7716
049C:  CLRF   27
7716
049C:  CLRF   27
7717
....................    USB_stack_status.getdesc_type=USB_GETDESC_CONFIG_TYPE; 
7717
....................    USB_stack_status.getdesc_type=USB_GETDESC_CONFIG_TYPE; 
7718
049E:  CLRF   20
7718
049E:  CLRF   20
7719
....................  
7719
....................  
7720
....................    switch(usb_ep0_rx_buffer[3]) { 
7720
....................    switch(usb_ep0_rx_buffer[3]) { 
7721
04A0:  MOVLB  4
7721
04A0:  MOVLB  4
7722
04A2:  MOVF   x1B,W
7722
04A2:  MOVF   x1B,W
7723
04A4:  XORLW  01
7723
04A4:  XORLW  01
7724
04A6:  MOVLB  0
7724
04A6:  MOVLB  0
7725
04A8:  BZ    04B8
7725
04A8:  BZ    04B8
7726
04AA:  XORLW  03
7726
04AA:  XORLW  03
7727
04AC:  BZ    04C2
7727
04AC:  BZ    04C2
7728
04AE:  XORLW  01
7728
04AE:  XORLW  01
7729
04B0:  BZ    04C8
7729
04B0:  BZ    04C8
7730
04B2:  XORLW  22
7730
04B2:  XORLW  22
7731
04B4:  BZ    04FA
7731
04B4:  BZ    04FA
7732
04B6:  BRA    053C
7732
04B6:  BRA    053C
7733
....................       case USB_DESC_DEVICE_TYPE:    //1 
7733
....................       case USB_DESC_DEVICE_TYPE:    //1 
7734
....................             usb_getdesc_len=USB_DESC_DEVICE_LEN; 
7734
....................             usb_getdesc_len=USB_DESC_DEVICE_LEN; 
7735
04B8:  MOVLW  12
7735
04B8:  MOVLW  12
7736
04BA:  MOVWF  28
7736
04BA:  MOVWF  28
7737
....................             USB_stack_status.getdesc_type=USB_GETDESC_DEVICE_TYPE; 
7737
....................             USB_stack_status.getdesc_type=USB_GETDESC_DEVICE_TYPE; 
7738
04BC:  MOVLW  03
7738
04BC:  MOVLW  03
7739
04BE:  MOVWF  20
7739
04BE:  MOVWF  20
7740
....................             break; 
7740
....................             break; 
7741
04C0:  BRA    0540
7741
04C0:  BRA    0540
7742
....................  
7742
....................  
7743
....................       //windows hosts will send a FF max len and expect you to send all configs without asking for them individually. 
7743
....................       //windows hosts will send a FF max len and expect you to send all configs without asking for them individually. 
7744
....................       case USB_DESC_CONFIG_TYPE:   //2 
7744
....................       case USB_DESC_CONFIG_TYPE:   //2 
7745
....................             usb_getdesc_len=USB_TOTAL_CONFIG_LEN; 
7745
....................             usb_getdesc_len=USB_TOTAL_CONFIG_LEN; 
7746
04C2:  MOVLW  43
7746
04C2:  MOVLW  43
7747
04C4:  MOVWF  28
7747
04C4:  MOVWF  28
7748
....................             break; 
7748
....................             break; 
7749
04C6:  BRA    0540
7749
04C6:  BRA    0540
7750
....................  
7750
....................  
7751
....................       case USB_DESC_STRING_TYPE: //3 
7751
....................       case USB_DESC_STRING_TYPE: //3 
7752
....................             USB_stack_status.getdesc_type=USB_GETDESC_STRING_TYPE; 
7752
....................             USB_stack_status.getdesc_type=USB_GETDESC_STRING_TYPE; 
7753
04C8:  MOVLW  02
7753
04C8:  MOVLW  02
7754
04CA:  MOVWF  20
7754
04CA:  MOVWF  20
7755
....................             usb_getdesc_ptr=USB_STRING_DESC_OFFSET[usb_ep0_rx_buffer[2]]; 
7755
....................             usb_getdesc_ptr=USB_STRING_DESC_OFFSET[usb_ep0_rx_buffer[2]]; 
7756
04CC:  CLRF   03
7756
04CC:  CLRF   03
7757
04CE:  MOVLB  4
7757
04CE:  MOVLB  4
7758
04D0:  MOVF   x1A,W
7758
04D0:  MOVF   x1A,W
7759
04D2:  ADDLW  21
7759
04D2:  ADDLW  21
7760
04D4:  MOVWF  FE9
7760
04D4:  MOVWF  FE9
7761
04D6:  MOVLW  00
7761
04D6:  MOVLW  00
7762
04D8:  ADDWFC 03,W
7762
04D8:  ADDWFC 03,W
7763
04DA:  MOVWF  FEA
7763
04DA:  MOVWF  FEA
7764
04DC:  MOVFF  FEF,27
7764
04DC:  MOVFF  FEF,27
7765
....................             usb_getdesc_len=USB_STRING_DESC[usb_getdesc_ptr]; 
7765
....................             usb_getdesc_len=USB_STRING_DESC[usb_getdesc_ptr]; 
7766
04E0:  CLRF   03
7766
04E0:  CLRF   03
7767
04E2:  MOVF   27,W
7767
04E2:  MOVF   27,W
7768
04E4:  MOVFF  FF2,6FD
7768
04E4:  MOVFF  FF2,6FD
7769
04E8:  BCF    FF2.7
7769
04E8:  BCF    FF2.7
7770
04EA:  MOVLB  0
7770
04EA:  MOVLB  0
7771
04EC:  RCALL  01EA
7771
04EC:  RCALL  01EA
7772
04EE:  MOVLB  6
7772
04EE:  MOVLB  6
7773
04F0:  BTFSC  xFD.7
7773
04F0:  BTFSC  xFD.7
7774
04F2:  BSF    FF2.7
7774
04F2:  BSF    FF2.7
7775
04F4:  MOVWF  28
7775
04F4:  MOVWF  28
7776
....................             break; 
7776
....................             break; 
7777
04F6:  MOVLB  0
7777
04F6:  MOVLB  0
7778
04F8:  BRA    0540
7778
04F8:  BRA    0540
7779
....................  
7779
....................  
7780
.................... #IF USB_HID_DEVICE || USB_CDC_DEVICE 
7780
.................... #IF USB_HID_DEVICE || USB_CDC_DEVICE 
7781
....................       case USB_DESC_CLASS_TYPE:  //0x21 
7781
....................       case USB_DESC_CLASS_TYPE:  //0x21 
7782
....................             //TODO does this work for multiple interfaces or multiple languages? 
7782
....................             //TODO does this work for multiple interfaces or multiple languages? 
7783
....................             //usb_getdesc_ptr=USB_CLASS_DESCRIPTORS[0][usb_ep0_rx_buffer[4]][usb_ep0_rx_buffer[2]]; 
7783
....................             //usb_getdesc_ptr=USB_CLASS_DESCRIPTORS[0][usb_ep0_rx_buffer[4]][usb_ep0_rx_buffer[2]]; 
7784
....................             usb_getdesc_ptr=USB_CLASS_DESCRIPTORS[0][0][usb_ep0_rx_buffer[2]]; 
7784
....................             usb_getdesc_ptr=USB_CLASS_DESCRIPTORS[0][0][usb_ep0_rx_buffer[2]]; 
7785
04FA:  CLRF   03
7785
04FA:  CLRF   03
7786
04FC:  MOVLB  4
7786
04FC:  MOVLB  4
7787
04FE:  MOVF   x1A,W
7787
04FE:  MOVF   x1A,W
7788
0500:  MOVFF  FF2,6FD
7788
0500:  MOVFF  FF2,6FD
7789
0504:  BCF    FF2.7
7789
0504:  BCF    FF2.7
7790
0506:  MOVLB  0
7790
0506:  MOVLB  0
7791
0508:  RCALL  01B0
7791
0508:  RCALL  01B0
7792
050A:  MOVLB  6
7792
050A:  MOVLB  6
7793
050C:  BTFSC  xFD.7
7793
050C:  BTFSC  xFD.7
7794
050E:  BSF    FF2.7
7794
050E:  BSF    FF2.7
7795
0510:  MOVWF  27
7795
0510:  MOVWF  27
7796
....................             if (usb_getdesc_ptr!=0xFF) { 
7796
....................             if (usb_getdesc_ptr!=0xFF) { 
7797
0512:  INCFSZ 27,W
7797
0512:  INCFSZ 27,W
7798
0514:  BRA    0518
7798
0514:  BRA    0518
7799
0516:  BRA    0536
7799
0516:  BRA    0536
7800
....................                usb_getdesc_len=USB_CONFIG_DESC[usb_getdesc_ptr]; 
7800
....................                usb_getdesc_len=USB_CONFIG_DESC[usb_getdesc_ptr]; 
7801
0518:  CLRF   03
7801
0518:  CLRF   03
7802
051A:  MOVF   27,W
7802
051A:  MOVF   27,W
7803
051C:  MOVFF  FF2,6FD
7803
051C:  MOVFF  FF2,6FD
7804
0520:  BCF    FF2.7
7804
0520:  BCF    FF2.7
7805
0522:  MOVLB  0
7805
0522:  MOVLB  0
7806
0524:  RCALL  014A
7806
0524:  RCALL  014A
7807
0526:  MOVLB  6
7807
0526:  MOVLB  6
7808
0528:  BTFSC  xFD.7
7808
0528:  BTFSC  xFD.7
7809
052A:  BSF    FF2.7
7809
052A:  BSF    FF2.7
7810
052C:  MOVWF  28
7810
052C:  MOVWF  28
7811
....................                break; 
7811
....................                break; 
7812
052E:  MOVLB  0
7812
052E:  MOVLB  0
7813
0530:  BRA    0540
7813
0530:  BRA    0540
7814
....................             } 
7814
....................             } 
7815
....................             else { 
7815
....................             else { 
7816
0532:  BRA    053C
7816
0532:  BRA    053C
7817
0534:  MOVLB  6
7817
0534:  MOVLB  6
7818
....................                usb_request_stall(); 
7818
....................                usb_request_stall(); 
7819
0536:  MOVLB  0
7819
0536:  MOVLB  0
7820
0538:  RCALL  03F4
7820
0538:  RCALL  03F4
7821
....................                return; 
7821
....................                return; 
7822
053A:  BRA    0558
7822
053A:  BRA    0558
7823
....................             } 
7823
....................             } 
7824
.................... #endif 
7824
.................... #endif 
7825
....................  
7825
....................  
7826
.................... #IF USB_HID_DEVICE 
7826
.................... #IF USB_HID_DEVICE 
7827
....................       case USB_DESC_HIDREPORT_TYPE: //0x22 
7827
....................       case USB_DESC_HIDREPORT_TYPE: //0x22 
7828
....................             usb_getdesc_ptr=USB_CLASS_SPECIFIC_DESC_LOOKUP[0][usb_ep0_rx_buffer[4]]; 
7828
....................             usb_getdesc_ptr=USB_CLASS_SPECIFIC_DESC_LOOKUP[0][usb_ep0_rx_buffer[4]]; 
7829
....................             if (usb_getdesc_ptr !=0xFF) { 
7829
....................             if (usb_getdesc_ptr !=0xFF) { 
7830
....................                USB_stack_status.getdesc_type=USB_GETDESC_HIDREPORT_TYPE; 
7830
....................                USB_stack_status.getdesc_type=USB_GETDESC_HIDREPORT_TYPE; 
7831
....................                usb_getdesc_len=USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[0][usb_ep0_rx_buffer[4]]; 
7831
....................                usb_getdesc_len=USB_CLASS_SPECIFIC_DESC_LOOKUP_SIZE[0][usb_ep0_rx_buffer[4]]; 
7832
....................                break; 
7832
....................                break; 
7833
....................             } 
7833
....................             } 
7834
....................             else { 
7834
....................             else { 
7835
....................                usb_request_stall(); 
7835
....................                usb_request_stall(); 
7836
....................                return; 
7836
....................                return; 
7837
....................             } 
7837
....................             } 
7838
.................... #endif 
7838
.................... #endif 
7839
....................  
7839
....................  
7840
....................       default: 
7840
....................       default: 
7841
....................             usb_request_stall(); 
7841
....................             usb_request_stall(); 
7842
053C:  RCALL  03F4
7842
053C:  RCALL  03F4
7843
....................             return; 
7843
....................             return; 
7844
053E:  BRA    0558
7844
053E:  BRA    0558
7845
....................    } 
7845
....................    } 
7846
....................    if (usb_ep0_rx_buffer[7]==0) { 
7846
....................    if (usb_ep0_rx_buffer[7]==0) { 
7847
0540:  MOVLB  4
7847
0540:  MOVLB  4
7848
0542:  MOVF   x1F,F
7848
0542:  MOVF   x1F,F
7849
0544:  BNZ   0550
7849
0544:  BNZ   0550
7850
....................       if (usb_getdesc_len > usb_ep0_rx_buffer[6]) 
7850
....................       if (usb_getdesc_len > usb_ep0_rx_buffer[6]) 
7851
0546:  MOVF   28,W
7851
0546:  MOVF   28,W
7852
0548:  SUBWF  x1E,W
7852
0548:  SUBWF  x1E,W
7853
054A:  BC    0550
7853
054A:  BC    0550
7854
....................          usb_getdesc_len = usb_ep0_rx_buffer[6]; 
7854
....................          usb_getdesc_len = usb_ep0_rx_buffer[6]; 
7855
054C:  MOVFF  41E,28
7855
054C:  MOVFF  41E,28
7856
....................    } 
7856
....................    } 
7857
....................    USB_stack_status.dev_req=GET_DESCRIPTOR; 
7857
....................    USB_stack_status.dev_req=GET_DESCRIPTOR; 
7858
0550:  MOVLW  01
7858
0550:  MOVLW  01
7859
0552:  MOVWF  1D
7859
0552:  MOVWF  1D
7860
....................    usb_copy_desc_seg_to_ep(); 
7860
....................    usb_copy_desc_seg_to_ep(); 
7861
0554:  MOVLB  0
7861
0554:  MOVLB  0
7862
0556:  RCALL  03FA
7862
0556:  RCALL  03FA
7863
.................... } 
7863
.................... } 
7864
0558:  GOTO   083C (RETURN)
7864
0558:  GOTO   083C (RETURN)
7865
....................  
7865
....................  
7866
.................... /************************************************************** 
7866
.................... /************************************************************** 
7867
.................... /* usb_finish_set_address() 
7867
.................... /* usb_finish_set_address() 
7868
.................... /* 
7868
.................... /* 
7869
.................... /* Input: USB_address_pending holds the address we were asked to set to. 
7869
.................... /* Input: USB_address_pending holds the address we were asked to set to. 
7870
.................... /* 
7870
.................... /* 
7871
.................... /* Summary: Sets the address. 
7871
.................... /* Summary: Sets the address. 
7872
.................... /* 
7872
.................... /* 
7873
.................... /* This code should only be run on the PIC USB peripheral, and not the 
7873
.................... /* This code should only be run on the PIC USB peripheral, and not the 
7874
.................... /* National peripheral. 
7874
.................... /* National peripheral. 
7875
.................... /* 
7875
.................... /* 
7876
.................... /* Part of usb_isr_tok_setup_dne() 
7876
.................... /* Part of usb_isr_tok_setup_dne() 
7877
.................... /***************************************************************/ 
7877
.................... /***************************************************************/ 
7878
....................  void usb_finish_set_address() { 
7878
....................  void usb_finish_set_address() { 
7879
....................    debug_usb(debug_putc," FSA "); 
7879
....................    debug_usb(debug_putc," FSA "); 
7880
....................    USB_stack_status.curr_config=0;   // make sure current configuration is 0 
7880
....................    USB_stack_status.curr_config=0;   // make sure current configuration is 0 
7881
*
7881
*
7882
0F7A:  CLRF   1E
7882
0F7A:  CLRF   1E
7883
....................  
7883
....................  
7884
....................    #ifdef __PIC__ 
7884
....................    #ifdef __PIC__ 
7885
....................    USB_stack_status.dev_req=NONE;  // no request pending 
7885
....................    USB_stack_status.dev_req=NONE;  // no request pending 
7886
0F7C:  CLRF   1D
7886
0F7C:  CLRF   1D
7887
....................    usb_set_address(USB_address_pending); 
7887
....................    usb_set_address(USB_address_pending); 
7888
0F7E:  MOVFF  26,6FE
7888
0F7E:  MOVFF  26,6FE
7889
0F82:  BRA    0F60
7889
0F82:  BRA    0F60
7890
....................    #endif 
7890
....................    #endif 
7891
.................... } 
7891
.................... } 
7892
0F84:  GOTO   1076 (RETURN)
7892
0F84:  GOTO   1076 (RETURN)
7893
....................  
7893
....................  
7894
.................... //////////////////////////////////////////////////////////////////////////// 
7894
.................... //////////////////////////////////////////////////////////////////////////// 
7895
.................... /// 
7895
.................... /// 
7896
.................... /// The following function retrieve data from constant arrays.  This may 
7896
.................... /// The following function retrieve data from constant arrays.  This may 
7897
.................... /// look un-optimized, but remember that you can't create a pointer to 
7897
.................... /// look un-optimized, but remember that you can't create a pointer to 
7898
.................... /// a constant array. 
7898
.................... /// a constant array. 
7899
.................... /// 
7899
.................... /// 
7900
.................... /////////////////////////////////////////////////////////////////////////// 
7900
.................... /////////////////////////////////////////////////////////////////////////// 
7901
.................... void usb_copy_desc_seg_to_ep(void) { 
7901
.................... void usb_copy_desc_seg_to_ep(void) { 
7902
....................    unsigned int i=0; 
7902
....................    unsigned int i=0; 
7903
*
7903
*
7904
03FA:  MOVLB  6
7904
03FA:  MOVLB  6
7905
03FC:  CLRF   xFE
7905
03FC:  CLRF   xFE
7906
....................    char c; 
7906
....................    char c; 
7907
....................  
7907
....................  
7908
....................    while ((usb_getdesc_len)&&(i<USB_MAX_EP0_PACKET_LENGTH)) 
7908
....................    while ((usb_getdesc_len)&&(i<USB_MAX_EP0_PACKET_LENGTH)) 
7909
....................    { 
7909
....................    { 
7910
03FE:  MOVF   28,F
7910
03FE:  MOVF   28,F
7911
0400:  BZ    0486
7911
0400:  BZ    0486
7912
0402:  MOVF   xFE,W
7912
0402:  MOVF   xFE,W
7913
0404:  SUBLW  3F
7913
0404:  SUBLW  3F
7914
0406:  BNC   0486
7914
0406:  BNC   0486
7915
....................       switch(USB_stack_status.getdesc_type) { 
7915
....................       switch(USB_stack_status.getdesc_type) { 
7916
0408:  MOVF   20,W
7916
0408:  MOVF   20,W
7917
040A:  MOVLB  0
7917
040A:  MOVLB  0
7918
040C:  BZ    0418
7918
040C:  BZ    0418
7919
040E:  XORLW  02
7919
040E:  XORLW  02
7920
0410:  BZ    0432
7920
0410:  BZ    0432
7921
0412:  XORLW  01
7921
0412:  XORLW  01
7922
0414:  BZ    044C
7922
0414:  BZ    044C
7923
0416:  BRA    0466
7923
0416:  BRA    0466
7924
....................          case USB_GETDESC_CONFIG_TYPE: 
7924
....................          case USB_GETDESC_CONFIG_TYPE: 
7925
....................             c=USB_CONFIG_DESC[usb_getdesc_ptr]; 
7925
....................             c=USB_CONFIG_DESC[usb_getdesc_ptr]; 
7926
0418:  CLRF   03
7926
0418:  CLRF   03
7927
041A:  MOVF   27,W
7927
041A:  MOVF   27,W
7928
041C:  MOVFF  FF2,700
7928
041C:  MOVFF  FF2,700
7929
0420:  BCF    FF2.7
7929
0420:  BCF    FF2.7
7930
0422:  RCALL  014A
7930
0422:  RCALL  014A
7931
0424:  MOVLB  7
7931
0424:  MOVLB  7
7932
0426:  BTFSC  x00.7
7932
0426:  BTFSC  x00.7
7933
0428:  BSF    FF2.7
7933
0428:  BSF    FF2.7
7934
042A:  MOVFF  FE8,6FF
7934
042A:  MOVFF  FE8,6FF
7935
....................             break; 
7935
....................             break; 
7936
042E:  MOVLB  0
7936
042E:  MOVLB  0
7937
0430:  BRA    0466
7937
0430:  BRA    0466
7938
....................  
7938
....................  
7939
....................         #IF USB_HID_DEVICE 
7939
....................         #IF USB_HID_DEVICE 
7940
....................          case USB_GETDESC_HIDREPORT_TYPE: 
7940
....................          case USB_GETDESC_HIDREPORT_TYPE: 
7941
....................             c=USB_CLASS_SPECIFIC_DESC[usb_getdesc_ptr]; 
7941
....................             c=USB_CLASS_SPECIFIC_DESC[usb_getdesc_ptr]; 
7942
....................             break; 
7942
....................             break; 
7943
....................         #endif 
7943
....................         #endif 
7944
....................  
7944
....................  
7945
....................          case USB_GETDESC_STRING_TYPE: 
7945
....................          case USB_GETDESC_STRING_TYPE: 
7946
....................             c=USB_STRING_DESC[usb_getdesc_ptr]; 
7946
....................             c=USB_STRING_DESC[usb_getdesc_ptr]; 
7947
0432:  CLRF   03
7947
0432:  CLRF   03
7948
0434:  MOVF   27,W
7948
0434:  MOVF   27,W
7949
0436:  MOVFF  FF2,700
7949
0436:  MOVFF  FF2,700
7950
043A:  BCF    FF2.7
7950
043A:  BCF    FF2.7
7951
043C:  RCALL  01EA
7951
043C:  RCALL  01EA
7952
043E:  MOVLB  7
7952
043E:  MOVLB  7
7953
0440:  BTFSC  x00.7
7953
0440:  BTFSC  x00.7
7954
0442:  BSF    FF2.7
7954
0442:  BSF    FF2.7
7955
0444:  MOVFF  FE8,6FF
7955
0444:  MOVFF  FE8,6FF
7956
....................             break; 
7956
....................             break; 
7957
0448:  MOVLB  0
7957
0448:  MOVLB  0
7958
044A:  BRA    0466
7958
044A:  BRA    0466
7959
....................  
7959
....................  
7960
....................          case USB_GETDESC_DEVICE_TYPE: 
7960
....................          case USB_GETDESC_DEVICE_TYPE: 
7961
....................             c=USB_DEVICE_DESC[usb_getdesc_ptr]; 
7961
....................             c=USB_DEVICE_DESC[usb_getdesc_ptr]; 
7962
044C:  CLRF   03
7962
044C:  CLRF   03
7963
044E:  MOVF   27,W
7963
044E:  MOVF   27,W
7964
0450:  MOVFF  FF2,700
7964
0450:  MOVFF  FF2,700
7965
0454:  BCF    FF2.7
7965
0454:  BCF    FF2.7
7966
0456:  RCALL  01C8
7966
0456:  RCALL  01C8
7967
0458:  MOVLB  7
7967
0458:  MOVLB  7
7968
045A:  BTFSC  x00.7
7968
045A:  BTFSC  x00.7
7969
045C:  BSF    FF2.7
7969
045C:  BSF    FF2.7
7970
045E:  MOVFF  FE8,6FF
7970
045E:  MOVFF  FE8,6FF
7971
....................             break; 
7971
....................             break; 
7972
0462:  MOVLB  0
7972
0462:  MOVLB  0
7973
0464:  BRA    0466
7973
0464:  BRA    0466
7974
....................       } 
7974
....................       } 
7975
....................       usb_getdesc_ptr++; 
7975
....................       usb_getdesc_ptr++; 
7976
0466:  INCF   27,F
7976
0466:  INCF   27,F
7977
....................       usb_getdesc_len--; 
7977
....................       usb_getdesc_len--; 
7978
0468:  DECF   28,F
7978
0468:  DECF   28,F
7979
....................       usb_ep0_tx_buffer[i++]=c; 
7979
....................       usb_ep0_tx_buffer[i++]=c; 
7980
046A:  MOVLB  6
7980
046A:  MOVLB  6
7981
046C:  MOVF   xFE,W
7981
046C:  MOVF   xFE,W
7982
046E:  INCF   xFE,F
7982
046E:  INCF   xFE,F
7983
0470:  ADDLW  58
7983
0470:  ADDLW  58
7984
0472:  CLRF   03
7984
0472:  CLRF   03
7985
0474:  BTFSC  FD8.0
7985
0474:  BTFSC  FD8.0
7986
0476:  INCF   03,F
7986
0476:  INCF   03,F
7987
0478:  MOVWF  FE9
7987
0478:  MOVWF  FE9
7988
047A:  MOVLW  04
7988
047A:  MOVLW  04
7989
047C:  ADDWF  03,W
7989
047C:  ADDWF  03,W
7990
047E:  MOVWF  FEA
7990
047E:  MOVWF  FEA
7991
0480:  MOVFF  6FF,FEF
7991
0480:  MOVFF  6FF,FEF
7992
....................    } 
7992
....................    } 
7993
0484:  BRA    03FE
7993
0484:  BRA    03FE
7994
....................  
7994
....................  
7995
....................    if ((!usb_getdesc_len)&&(i!=USB_MAX_EP0_PACKET_LENGTH)) { 
7995
....................    if ((!usb_getdesc_len)&&(i!=USB_MAX_EP0_PACKET_LENGTH)) { 
7996
0486:  MOVF   28,F
7996
0486:  MOVF   28,F
7997
0488:  BNZ   0492
7997
0488:  BNZ   0492
7998
048A:  MOVF   xFE,W
7998
048A:  MOVF   xFE,W
7999
048C:  SUBLW  40
7999
048C:  SUBLW  40
8000
048E:  BZ    0492
8000
048E:  BZ    0492
8001
....................          USB_stack_status.dev_req = NONE; 
8001
....................          USB_stack_status.dev_req = NONE; 
8002
0490:  CLRF   1D
8002
0490:  CLRF   1D
8003
....................    } 
8003
....................    } 
8004
....................  
8004
....................  
8005
....................    usb_request_send_response(i); 
8005
....................    usb_request_send_response(i); 
8006
0492:  MOVFF  6FE,700
8006
0492:  MOVFF  6FE,700
8007
0496:  MOVLB  0
8007
0496:  MOVLB  0
8008
0498:  RCALL  03EE
8008
0498:  RCALL  03EE
8009
.................... } 
8009
.................... } 
8010
049A:  RETLW  00
8010
049A:  RETLW  00
8011
....................  
8011
....................  
8012
.................... #ENDIF 
8012
.................... #ENDIF 
8013
....................  
8013
....................  
8014
....................  
8014
....................  
8015
.................... struct { 
8015
.................... struct { 
8016
....................         unsigned int32   dwDTERrate;   //data terminal rate, in bits per second 
8016
....................         unsigned int32   dwDTERrate;   //data terminal rate, in bits per second 
8017
....................         unsigned int8    bCharFormat;  //num of stop bits (0=1, 1=1.5, 2=2) 
8017
....................         unsigned int8    bCharFormat;  //num of stop bits (0=1, 1=1.5, 2=2) 
8018
....................         unsigned int8    bParityType;  //parity (0=none, 1=odd, 2=even, 3=mark, 4=space) 
8018
....................         unsigned int8    bParityType;  //parity (0=none, 1=odd, 2=even, 3=mark, 4=space) 
8019
....................         unsigned int8    bDataBits;    //data bits (5,6,7,8 or 16) 
8019
....................         unsigned int8    bDataBits;    //data bits (5,6,7,8 or 16) 
8020
.................... } __attribute__((__packed__)) usb_cdc_line_coding; 
8020
.................... } __attribute__((__packed__)) usb_cdc_line_coding; 
8021
....................  
8021
....................  
8022
.................... //length of time, in ms, of break signal as we received in a SendBreak message. 
8022
.................... //length of time, in ms, of break signal as we received in a SendBreak message. 
8023
.................... //if ==0xFFFF, send break signal until we receive a 0x0000. 
8023
.................... //if ==0xFFFF, send break signal until we receive a 0x0000. 
8024
.................... unsigned int16 usb_cdc_break; 
8024
.................... unsigned int16 usb_cdc_break; 
8025
....................  
8025
....................  
8026
.................... unsigned int8 usb_cdc_encapsulated_cmd[8]; 
8026
.................... unsigned int8 usb_cdc_encapsulated_cmd[8]; 
8027
....................  
8027
....................  
8028
.................... unsigned int8 usb_cdc_put_buffer[USB_CDC_DATA_IN_SIZE]; 
8028
.................... unsigned int8 usb_cdc_put_buffer[USB_CDC_DATA_IN_SIZE]; 
8029
.................... #define usb_cdc_put_buffer_free()  usb_tbe(USB_CDC_DATA_IN_ENDPOINT) 
8029
.................... #define usb_cdc_put_buffer_free()  usb_tbe(USB_CDC_DATA_IN_ENDPOINT) 
8030
.................... #if USB_CDC_DATA_IN_SIZE>=0x100 
8030
.................... #if USB_CDC_DATA_IN_SIZE>=0x100 
8031
....................  unsigned int16 usb_cdc_put_buffer_nextin=0; 
8031
....................  unsigned int16 usb_cdc_put_buffer_nextin=0; 
8032
.................... // int16 usb_cdc_last_data_packet_size; 
8032
.................... // int16 usb_cdc_last_data_packet_size; 
8033
.................... #else 
8033
.................... #else 
8034
....................  unsigned int8 usb_cdc_put_buffer_nextin=0; 
8034
....................  unsigned int8 usb_cdc_put_buffer_nextin=0; 
8035
.................... // int8 usb_cdc_last_data_packet_size; 
8035
.................... // int8 usb_cdc_last_data_packet_size; 
8036
.................... #endif 
8036
.................... #endif 
8037
....................  
8037
....................  
8038
.................... struct { 
8038
.................... struct { 
8039
....................    int1 got; 
8039
....................    int1 got; 
8040
....................   #if USB_CDC_DATA_OUT_SIZE>=0x100 
8040
....................   #if USB_CDC_DATA_OUT_SIZE>=0x100 
8041
....................    unsigned int16 len; 
8041
....................    unsigned int16 len; 
8042
....................    unsigned int16 index; 
8042
....................    unsigned int16 index; 
8043
....................   #else 
8043
....................   #else 
8044
....................    unsigned int8 len; 
8044
....................    unsigned int8 len; 
8045
....................    unsigned int8 index; 
8045
....................    unsigned int8 index; 
8046
....................   #endif 
8046
....................   #endif 
8047
.................... } usb_cdc_get_buffer_status; 
8047
.................... } usb_cdc_get_buffer_status; 
8048
....................  
8048
....................  
8049
.................... #if defined(__PIC__) 
8049
.................... #if defined(__PIC__) 
8050
....................  #define usb_cdc_get_buffer_status_buffer usb_ep2_rx_buffer 
8050
....................  #define usb_cdc_get_buffer_status_buffer usb_ep2_rx_buffer 
8051
.................... #else 
8051
.................... #else 
8052
....................  unsigned int8 usb_cdc_get_buffer_status_buffer[USB_CDC_DATA_OUT_SIZE]; 
8052
....................  unsigned int8 usb_cdc_get_buffer_status_buffer[USB_CDC_DATA_OUT_SIZE]; 
8053
.................... #endif 
8053
.................... #endif 
8054
....................  
8054
....................  
8055
.................... int1 usb_cdc_got_set_line_coding; 
8055
.................... int1 usb_cdc_got_set_line_coding; 
8056
....................  
8056
....................  
8057
.................... struct  { 
8057
.................... struct  { 
8058
....................    int1 dte_present; //1=DTE present, 0=DTE not present 
8058
....................    int1 dte_present; //1=DTE present, 0=DTE not present 
8059
....................    int1 active;      //1=activate carrier, 0=deactivate carrier 
8059
....................    int1 active;      //1=activate carrier, 0=deactivate carrier 
8060
....................    unsigned int reserved:6; 
8060
....................    unsigned int reserved:6; 
8061
.................... } usb_cdc_carrier; 
8061
.................... } usb_cdc_carrier; 
8062
....................  
8062
....................  
8063
.................... unsigned int8 g_LastCDCDataPacketSize; 
8063
.................... unsigned int8 g_LastCDCDataPacketSize; 
8064
....................  
8064
....................  
8065
.................... enum {USB_CDC_OUT_NOTHING=0, USB_CDC_OUT_COMMAND=1, USB_CDC_OUT_LINECODING=2, USB_CDC_WAIT_0LEN=3} __usb_cdc_state=0; 
8065
.................... enum {USB_CDC_OUT_NOTHING=0, USB_CDC_OUT_COMMAND=1, USB_CDC_OUT_LINECODING=2, USB_CDC_WAIT_0LEN=3} __usb_cdc_state=0; 
8066
....................  
8066
....................  
8067
.................... #if defined(__PCH__) 
8067
.................... #if defined(__PCH__) 
8068
....................  #byte INTCON=0xFF2 
8068
....................  #byte INTCON=0xFF2 
8069
....................  #bit INT_GIE=INTCON.7 
8069
....................  #bit INT_GIE=INTCON.7 
8070
.................... #else 
8070
.................... #else 
8071
....................  #word SR=0x42 
8071
....................  #word SR=0x42 
8072
.................... #endif 
8072
.................... #endif 
8073
....................  
8073
....................  
8074
.................... //handle OUT token done interrupt on endpoint 0 [read encapsulated cmd and line coding data] 
8074
.................... //handle OUT token done interrupt on endpoint 0 [read encapsulated cmd and line coding data] 
8075
.................... void usb_isr_tok_out_cdc_control_dne(void) { 
8075
.................... void usb_isr_tok_out_cdc_control_dne(void) { 
8076
....................    debug_usb(debug_putc,"CDC %X ",__usb_cdc_state); 
8076
....................    debug_usb(debug_putc,"CDC %X ",__usb_cdc_state); 
8077
....................  
8077
....................  
8078
....................    switch (__usb_cdc_state) { 
8078
....................    switch (__usb_cdc_state) { 
8079
*
8079
*
8080
0E7E:  MOVF   x83,W
8080
0E7E:  MOVF   x83,W
8081
0E80:  XORLW  01
8081
0E80:  XORLW  01
8082
0E82:  BZ    0E8A
8082
0E82:  BZ    0E8A
8083
0E84:  XORLW  03
8083
0E84:  XORLW  03
8084
0E86:  BZ    0EB2
8084
0E86:  BZ    0EB2
8085
0E88:  BRA    0EDA
8085
0E88:  BRA    0EDA
8086
....................       //printf(putc_tbe,"@%X@\r\n", __usb_cdc_state); 
8086
....................       //printf(putc_tbe,"@%X@\r\n", __usb_cdc_state); 
8087
....................       case USB_CDC_OUT_COMMAND: 
8087
....................       case USB_CDC_OUT_COMMAND: 
8088
....................          //usb_get_packet(0, usb_cdc_encapsulated_cmd, 8); 
8088
....................          //usb_get_packet(0, usb_cdc_encapsulated_cmd, 8); 
8089
....................          memcpy(usb_cdc_encapsulated_cmd, usb_ep0_rx_buffer,8); 
8089
....................          memcpy(usb_cdc_encapsulated_cmd, usb_ep0_rx_buffer,8); 
8090
0E8A:  CLRF   FEA
8090
0E8A:  CLRF   FEA
8091
0E8C:  MOVLW  34
8091
0E8C:  MOVLW  34
8092
0E8E:  MOVWF  FE9
8092
0E8E:  MOVWF  FE9
8093
0E90:  MOVLW  04
8093
0E90:  MOVLW  04
8094
0E92:  MOVWF  FE2
8094
0E92:  MOVWF  FE2
8095
0E94:  MOVLW  18
8095
0E94:  MOVLW  18
8096
0E96:  MOVWF  FE1
8096
0E96:  MOVWF  FE1
8097
0E98:  MOVLW  08
8097
0E98:  MOVLW  08
8098
0E9A:  MOVWF  01
8098
0E9A:  MOVWF  01
8099
0E9C:  MOVFF  FE6,FEE
8099
0E9C:  MOVFF  FE6,FEE
8100
0EA0:  DECFSZ 01,F
8100
0EA0:  DECFSZ 01,F
8101
0EA2:  BRA    0E9C
8101
0EA2:  BRA    0E9C
8102
....................         #if USB_MAX_EP0_PACKET_LENGTH==8 
8102
....................         #if USB_MAX_EP0_PACKET_LENGTH==8 
8103
....................          __usb_cdc_state=USB_CDC_WAIT_0LEN; 
8103
....................          __usb_cdc_state=USB_CDC_WAIT_0LEN; 
8104
....................          usb_request_get_data(); 
8104
....................          usb_request_get_data(); 
8105
....................         #else 
8105
....................         #else 
8106
....................          usb_put_0len_0(); 
8106
....................          usb_put_0len_0(); 
8107
0EA4:  MOVLB  7
8107
0EA4:  MOVLB  7
8108
0EA6:  CLRF   x00
8108
0EA6:  CLRF   x00
8109
0EA8:  MOVLB  0
8109
0EA8:  MOVLB  0
8110
0EAA:  CALL   03EE
8110
0EAA:  CALL   03EE
8111
....................          __usb_cdc_state=0; 
8111
....................          __usb_cdc_state=0; 
8112
0EAE:  CLRF   x83
8112
0EAE:  CLRF   x83
8113
....................         #endif 
8113
....................         #endif 
8114
....................          break; 
8114
....................          break; 
8115
0EB0:  BRA    0EE2
8115
0EB0:  BRA    0EE2
8116
....................  
8116
....................  
8117
....................     #if USB_MAX_EP0_PACKET_LENGTH==8 
8117
....................     #if USB_MAX_EP0_PACKET_LENGTH==8 
8118
....................       case USB_CDC_WAIT_0LEN: 
8118
....................       case USB_CDC_WAIT_0LEN: 
8119
....................          usb_put_0len_0(); 
8119
....................          usb_put_0len_0(); 
8120
....................          __usb_cdc_state=0; 
8120
....................          __usb_cdc_state=0; 
8121
....................          break; 
8121
....................          break; 
8122
....................     #endif 
8122
....................     #endif 
8123
....................  
8123
....................  
8124
....................       case USB_CDC_OUT_LINECODING: 
8124
....................       case USB_CDC_OUT_LINECODING: 
8125
....................          //usb_get_packet(0, &usb_cdc_line_coding, 7); 
8125
....................          //usb_get_packet(0, &usb_cdc_line_coding, 7); 
8126
....................          //printf(putc_tbe,"\r\n!GSLC FIN!\r\n"); 
8126
....................          //printf(putc_tbe,"\r\n!GSLC FIN!\r\n"); 
8127
....................          memcpy(&usb_cdc_line_coding, usb_ep0_rx_buffer,7); 
8127
....................          memcpy(&usb_cdc_line_coding, usb_ep0_rx_buffer,7); 
8128
0EB2:  CLRF   FEA
8128
0EB2:  CLRF   FEA
8129
0EB4:  MOVLW  2B
8129
0EB4:  MOVLW  2B
8130
0EB6:  MOVWF  FE9
8130
0EB6:  MOVWF  FE9
8131
0EB8:  MOVLW  04
8131
0EB8:  MOVLW  04
8132
0EBA:  MOVWF  FE2
8132
0EBA:  MOVWF  FE2
8133
0EBC:  MOVLW  18
8133
0EBC:  MOVLW  18
8134
0EBE:  MOVWF  FE1
8134
0EBE:  MOVWF  FE1
8135
0EC0:  MOVLW  07
8135
0EC0:  MOVLW  07
8136
0EC2:  MOVWF  01
8136
0EC2:  MOVWF  01
8137
0EC4:  MOVFF  FE6,FEE
8137
0EC4:  MOVFF  FE6,FEE
8138
0EC8:  DECFSZ 01,F
8138
0EC8:  DECFSZ 01,F
8139
0ECA:  BRA    0EC4
8139
0ECA:  BRA    0EC4
8140
....................          __usb_cdc_state=0; 
8140
....................          __usb_cdc_state=0; 
8141
0ECC:  CLRF   x83
8141
0ECC:  CLRF   x83
8142
....................          usb_put_0len_0(); 
8142
....................          usb_put_0len_0(); 
8143
0ECE:  MOVLB  7
8143
0ECE:  MOVLB  7
8144
0ED0:  CLRF   x00
8144
0ED0:  CLRF   x00
8145
0ED2:  MOVLB  0
8145
0ED2:  MOVLB  0
8146
0ED4:  CALL   03EE
8146
0ED4:  CALL   03EE
8147
....................          break; 
8147
....................          break; 
8148
0ED8:  BRA    0EE2
8148
0ED8:  BRA    0EE2
8149
....................  
8149
....................  
8150
....................       default: 
8150
....................       default: 
8151
....................          __usb_cdc_state=0; 
8151
....................          __usb_cdc_state=0; 
8152
0EDA:  CLRF   x83
8152
0EDA:  CLRF   x83
8153
....................          usb_init_ep0_setup(); 
8153
....................          usb_init_ep0_setup(); 
8154
0EDC:  CALL   0284
8154
0EDC:  CALL   0284
8155
....................          break; 
8155
....................          break; 
8156
0EE0:  BRA    0EE2
8156
0EE0:  BRA    0EE2
8157
....................    } 
8157
....................    } 
8158
.................... } 
8158
.................... } 
8159
0EE2:  GOTO   0F4C (RETURN)
8159
0EE2:  GOTO   0F4C (RETURN)
8160
....................  
8160
....................  
8161
.................... //handle IN token on 0 (setup packet) 
8161
.................... //handle IN token on 0 (setup packet) 
8162
.................... void usb_isr_tkn_cdc(void) { 
8162
.................... void usb_isr_tkn_cdc(void) { 
8163
....................    //make sure the request goes to a CDC interface 
8163
....................    //make sure the request goes to a CDC interface 
8164
....................    if ((usb_ep0_rx_buffer[4] == 1) || (usb_ep0_rx_buffer[4] == 0)) { 
8164
....................    if ((usb_ep0_rx_buffer[4] == 1) || (usb_ep0_rx_buffer[4] == 0)) { 
8165
*
8165
*
8166
0B12:  MOVLB  4
8166
0B12:  MOVLB  4
8167
0B14:  DECFSZ x1C,W
8167
0B14:  DECFSZ x1C,W
8168
0B16:  BRA    0B1A
8168
0B16:  BRA    0B1A
8169
0B18:  BRA    0B1E
8169
0B18:  BRA    0B1E
8170
0B1A:  MOVF   x1C,F
8170
0B1A:  MOVF   x1C,F
8171
0B1C:  BNZ   0BBA
8171
0B1C:  BNZ   0BBA
8172
....................       //printf(putc_tbe,"!%X!\r\n", usb_ep0_rx_buffer[1]); 
8172
....................       //printf(putc_tbe,"!%X!\r\n", usb_ep0_rx_buffer[1]); 
8173
....................       switch(usb_ep0_rx_buffer[1]) { 
8173
....................       switch(usb_ep0_rx_buffer[1]) { 
8174
0B1E:  MOVF   x19,W
8174
0B1E:  MOVF   x19,W
8175
0B20:  MOVLB  0
8175
0B20:  MOVLB  0
8176
0B22:  BZ    0B3A
8176
0B22:  BZ    0B3A
8177
0B24:  XORLW  01
8177
0B24:  XORLW  01
8178
0B26:  BZ    0B42
8178
0B26:  BZ    0B42
8179
0B28:  XORLW  21
8179
0B28:  XORLW  21
8180
0B2A:  BZ    0B64
8180
0B2A:  BZ    0B64
8181
0B2C:  XORLW  01
8181
0B2C:  XORLW  01
8182
0B2E:  BZ    0B6E
8182
0B2E:  BZ    0B6E
8183
0B30:  XORLW  03
8183
0B30:  XORLW  03
8184
0B32:  BZ    0B94
8184
0B32:  BZ    0B94
8185
0B34:  XORLW  01
8185
0B34:  XORLW  01
8186
0B36:  BZ    0BA2
8186
0B36:  BZ    0BA2
8187
0B38:  BRA    0BB4
8187
0B38:  BRA    0BB4
8188
....................          case 0x00:  //send_encapsulated_command 
8188
....................          case 0x00:  //send_encapsulated_command 
8189
....................             __usb_cdc_state=USB_CDC_OUT_COMMAND; 
8189
....................             __usb_cdc_state=USB_CDC_OUT_COMMAND; 
8190
0B3A:  MOVLW  01
8190
0B3A:  MOVLW  01
8191
0B3C:  MOVWF  x83
8191
0B3C:  MOVWF  x83
8192
....................             usb_request_get_data(); 
8192
....................             usb_request_get_data(); 
8193
0B3E:  RCALL  0B0C
8193
0B3E:  RCALL  0B0C
8194
....................             break; 
8194
....................             break; 
8195
0B40:  BRA    0BB8
8195
0B40:  BRA    0BB8
8196
....................  
8196
....................  
8197
....................          case 0x01:  //get_encapsulated_command 
8197
....................          case 0x01:  //get_encapsulated_command 
8198
....................             memcpy(usb_ep0_tx_buffer, usb_cdc_encapsulated_cmd, 8); 
8198
....................             memcpy(usb_ep0_tx_buffer, usb_cdc_encapsulated_cmd, 8); 
8199
0B42:  MOVLW  04
8199
0B42:  MOVLW  04
8200
0B44:  MOVWF  FEA
8200
0B44:  MOVWF  FEA
8201
0B46:  MOVLW  58
8201
0B46:  MOVLW  58
8202
0B48:  MOVWF  FE9
8202
0B48:  MOVWF  FE9
8203
0B4A:  CLRF   FE2
8203
0B4A:  CLRF   FE2
8204
0B4C:  MOVLW  34
8204
0B4C:  MOVLW  34
8205
0B4E:  MOVWF  FE1
8205
0B4E:  MOVWF  FE1
8206
0B50:  MOVLW  08
8206
0B50:  MOVLW  08
8207
0B52:  MOVWF  01
8207
0B52:  MOVWF  01
8208
0B54:  MOVFF  FE6,FEE
8208
0B54:  MOVFF  FE6,FEE
8209
0B58:  DECFSZ 01,F
8209
0B58:  DECFSZ 01,F
8210
0B5A:  BRA    0B54
8210
0B5A:  BRA    0B54
8211
....................             usb_request_send_response(usb_ep0_rx_buffer[6]);  //send wLength bytes 
8211
....................             usb_request_send_response(usb_ep0_rx_buffer[6]);  //send wLength bytes 
8212
0B5C:  MOVFF  41E,700
8212
0B5C:  MOVFF  41E,700
8213
0B60:  RCALL  03EE
8213
0B60:  RCALL  03EE
8214
....................             break; 
8214
....................             break; 
8215
0B62:  BRA    0BB8
8215
0B62:  BRA    0BB8
8216
....................  
8216
....................  
8217
....................          case 0x20:  //set_line_coding 
8217
....................          case 0x20:  //set_line_coding 
8218
....................             debug_usb(debug_putc,"!GSLC!"); 
8218
....................             debug_usb(debug_putc,"!GSLC!"); 
8219
....................             __usb_cdc_state=USB_CDC_OUT_LINECODING; 
8219
....................             __usb_cdc_state=USB_CDC_OUT_LINECODING; 
8220
0B64:  MOVLW  02
8220
0B64:  MOVLW  02
8221
0B66:  MOVWF  x83
8221
0B66:  MOVWF  x83
8222
....................             usb_cdc_got_set_line_coding=TRUE; 
8222
....................             usb_cdc_got_set_line_coding=TRUE; 
8223
0B68:  BSF    x80.0
8223
0B68:  BSF    x80.0
8224
....................             usb_request_get_data(); 
8224
....................             usb_request_get_data(); 
8225
0B6A:  RCALL  0B0C
8225
0B6A:  RCALL  0B0C
8226
....................             break; 
8226
....................             break; 
8227
0B6C:  BRA    0BB8
8227
0B6C:  BRA    0BB8
8228
....................  
8228
....................  
8229
....................          case 0x21:  //get_line_coding 
8229
....................          case 0x21:  //get_line_coding 
8230
....................             memcpy(usb_ep0_tx_buffer, &usb_cdc_line_coding, sizeof(usb_cdc_line_coding)); 
8230
....................             memcpy(usb_ep0_tx_buffer, &usb_cdc_line_coding, sizeof(usb_cdc_line_coding)); 
8231
0B6E:  MOVLW  04
8231
0B6E:  MOVLW  04
8232
0B70:  MOVWF  FEA
8232
0B70:  MOVWF  FEA
8233
0B72:  MOVLW  58
8233
0B72:  MOVLW  58
8234
0B74:  MOVWF  FE9
8234
0B74:  MOVWF  FE9
8235
0B76:  CLRF   FE2
8235
0B76:  CLRF   FE2
8236
0B78:  MOVLW  2B
8236
0B78:  MOVLW  2B
8237
0B7A:  MOVWF  FE1
8237
0B7A:  MOVWF  FE1
8238
0B7C:  MOVLW  07
8238
0B7C:  MOVLW  07
8239
0B7E:  MOVWF  01
8239
0B7E:  MOVWF  01
8240
0B80:  MOVFF  FE6,FEE
8240
0B80:  MOVFF  FE6,FEE
8241
0B84:  DECFSZ 01,F
8241
0B84:  DECFSZ 01,F
8242
0B86:  BRA    0B80
8242
0B86:  BRA    0B80
8243
....................             usb_request_send_response(sizeof(usb_cdc_line_coding)); //send wLength bytes 
8243
....................             usb_request_send_response(sizeof(usb_cdc_line_coding)); //send wLength bytes 
8244
0B88:  MOVLW  07
8244
0B88:  MOVLW  07
8245
0B8A:  MOVLB  7
8245
0B8A:  MOVLB  7
8246
0B8C:  MOVWF  x00
8246
0B8C:  MOVWF  x00
8247
0B8E:  MOVLB  0
8247
0B8E:  MOVLB  0
8248
0B90:  RCALL  03EE
8248
0B90:  RCALL  03EE
8249
....................             break; 
8249
....................             break; 
8250
0B92:  BRA    0BB8
8250
0B92:  BRA    0BB8
8251
....................  
8251
....................  
8252
....................          case 0x22:  //set_control_line_state 
8252
....................          case 0x22:  //set_control_line_state 
8253
....................             usb_cdc_carrier=usb_ep0_rx_buffer[2]; 
8253
....................             usb_cdc_carrier=usb_ep0_rx_buffer[2]; 
8254
0B94:  MOVFF  41A,81
8254
0B94:  MOVFF  41A,81
8255
....................             usb_put_0len_0(); 
8255
....................             usb_put_0len_0(); 
8256
0B98:  MOVLB  7
8256
0B98:  MOVLB  7
8257
0B9A:  CLRF   x00
8257
0B9A:  CLRF   x00
8258
0B9C:  MOVLB  0
8258
0B9C:  MOVLB  0
8259
0B9E:  RCALL  03EE
8259
0B9E:  RCALL  03EE
8260
....................             break; 
8260
....................             break; 
8261
0BA0:  BRA    0BB8
8261
0BA0:  BRA    0BB8
8262
....................  
8262
....................  
8263
....................          case 0x23:  //send_break 
8263
....................          case 0x23:  //send_break 
8264
....................             usb_cdc_break=make16(usb_ep0_rx_buffer[2],usb_ep0_rx_buffer[3]); 
8264
....................             usb_cdc_break=make16(usb_ep0_rx_buffer[2],usb_ep0_rx_buffer[3]); 
8265
0BA2:  MOVFF  41A,33
8265
0BA2:  MOVFF  41A,33
8266
0BA6:  MOVFF  41B,32
8266
0BA6:  MOVFF  41B,32
8267
....................             usb_put_0len_0(); 
8267
....................             usb_put_0len_0(); 
8268
0BAA:  MOVLB  7
8268
0BAA:  MOVLB  7
8269
0BAC:  CLRF   x00
8269
0BAC:  CLRF   x00
8270
0BAE:  MOVLB  0
8270
0BAE:  MOVLB  0
8271
0BB0:  RCALL  03EE
8271
0BB0:  RCALL  03EE
8272
....................             break; 
8272
....................             break; 
8273
0BB2:  BRA    0BB8
8273
0BB2:  BRA    0BB8
8274
....................  
8274
....................  
8275
....................          default: 
8275
....................          default: 
8276
....................             usb_request_stall(); 
8276
....................             usb_request_stall(); 
8277
0BB4:  RCALL  03F4
8277
0BB4:  RCALL  03F4
8278
....................             break; 
8278
....................             break; 
8279
0BB6:  BRA    0BB8
8279
0BB6:  BRA    0BB8
8280
0BB8:  MOVLB  4
8280
0BB8:  MOVLB  4
8281
....................       } 
8281
....................       } 
8282
....................    } 
8282
....................    } 
8283
.................... } 
8283
.................... } 
8284
0BBA:  MOVLB  0
8284
0BBA:  MOVLB  0
8285
0BBC:  GOTO   0BE6 (RETURN)
8285
0BBC:  GOTO   0BE6 (RETURN)
8286
....................  
8286
....................  
8287
.................... //handle OUT token done interrupt on endpoint 3 [buffer incoming received chars] 
8287
.................... //handle OUT token done interrupt on endpoint 3 [buffer incoming received chars] 
8288
.................... void usb_isr_tok_out_cdc_data_dne(void) { 
8288
.................... void usb_isr_tok_out_cdc_data_dne(void) { 
8289
....................    usb_cdc_get_buffer_status.got=TRUE; 
8289
....................    usb_cdc_get_buffer_status.got=TRUE; 
8290
*
8290
*
8291
0F2C:  BSF    x7D.0
8291
0F2C:  BSF    x7D.0
8292
....................    usb_cdc_get_buffer_status.index=0; 
8292
....................    usb_cdc_get_buffer_status.index=0; 
8293
0F2E:  CLRF   x7F
8293
0F2E:  CLRF   x7F
8294
.................... #if (defined(__PIC__) && __PIC__) 
8294
.................... #if (defined(__PIC__) && __PIC__) 
8295
....................     usb_cdc_get_buffer_status.len=usb_rx_packet_size(USB_CDC_DATA_OUT_ENDPOINT); 
8295
....................     usb_cdc_get_buffer_status.len=usb_rx_packet_size(USB_CDC_DATA_OUT_ENDPOINT); 
8296
0F30:  MOVLW  02
8296
0F30:  MOVLW  02
8297
0F32:  MOVLB  6
8297
0F32:  MOVLB  6
8298
0F34:  MOVWF  xFE
8298
0F34:  MOVWF  xFE
8299
0F36:  MOVLB  0
8299
0F36:  MOVLB  0
8300
0F38:  BRA    0EE6
8300
0F38:  BRA    0EE6
8301
0F3A:  MOVFF  01,7E
8301
0F3A:  MOVFF  01,7E
8302
.................... #else 
8302
.................... #else 
8303
....................    usb_cdc_get_buffer_status.len=usb_get_packet_buffer( 
8303
....................    usb_cdc_get_buffer_status.len=usb_get_packet_buffer( 
8304
....................       USB_CDC_DATA_OUT_ENDPOINT,&usb_cdc_get_buffer_status_buffer[0],USB_CDC_DATA_OUT_SIZE); 
8304
....................       USB_CDC_DATA_OUT_ENDPOINT,&usb_cdc_get_buffer_status_buffer[0],USB_CDC_DATA_OUT_SIZE); 
8305
.................... #endif 
8305
.................... #endif 
8306
.................... } 
8306
.................... } 
8307
0F3E:  GOTO   0F5A (RETURN)
8307
0F3E:  GOTO   0F5A (RETURN)
8308
....................  
8308
....................  
8309
.................... //handle IN token done interrupt on endpoint 2 [transmit buffered characters] 
8309
.................... //handle IN token done interrupt on endpoint 2 [transmit buffered characters] 
8310
.................... void usb_isr_tok_in_cdc_data_dne(void)  
8310
.................... void usb_isr_tok_in_cdc_data_dne(void)  
8311
.................... { 
8311
.................... { 
8312
....................    //putc('!'); 
8312
....................    //putc('!'); 
8313
....................    if (usb_cdc_put_buffer_nextin /* || (g_LastCDCDataPacketSize == USB_CDC_DATA_IN_SIZE)*/ )  
8313
....................    if (usb_cdc_put_buffer_nextin /* || (g_LastCDCDataPacketSize == USB_CDC_DATA_IN_SIZE)*/ )  
8314
*
8314
*
8315
104E:  MOVF   x7C,F
8315
104E:  MOVF   x7C,F
8316
1050:  BZ    1054
8316
1050:  BZ    1054
8317
....................    { 
8317
....................    { 
8318
....................       //printf("FL3 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8318
....................       //printf("FL3 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8319
....................       usb_cdc_flush_out_buffer(); 
8319
....................       usb_cdc_flush_out_buffer(); 
8320
1052:  RCALL  102C
8320
1052:  RCALL  102C
8321
....................    } 
8321
....................    } 
8322
.................... } 
8322
.................... } 
8323
1054:  GOTO   1084 (RETURN)
8323
1054:  GOTO   1084 (RETURN)
8324
....................  
8324
....................  
8325
.................... void usb_cdc_flush_out_buffer(void)  
8325
.................... void usb_cdc_flush_out_buffer(void)  
8326
.................... { 
8326
.................... { 
8327
....................    //printf(putc_tbe, "FL %U\r\n", usb_cdc_put_buffer_nextin); 
8327
....................    //printf(putc_tbe, "FL %U\r\n", usb_cdc_put_buffer_nextin); 
8328
....................    usb_put_packet(USB_CDC_DATA_IN_ENDPOINT,usb_cdc_put_buffer,usb_cdc_put_buffer_nextin,USB_DTS_TOGGLE); 
8328
....................    usb_put_packet(USB_CDC_DATA_IN_ENDPOINT,usb_cdc_put_buffer,usb_cdc_put_buffer_nextin,USB_DTS_TOGGLE); 
8329
*
8329
*
8330
102C:  MOVLW  02
8330
102C:  MOVLW  02
8331
102E:  MOVLB  7
8331
102E:  MOVLB  7
8332
1030:  MOVWF  x3A
8332
1030:  MOVWF  x3A
8333
1032:  CLRF   x3C
8333
1032:  CLRF   x3C
8334
1034:  MOVLW  3C
8334
1034:  MOVLW  3C
8335
1036:  MOVWF  x3B
8335
1036:  MOVWF  x3B
8336
1038:  CLRF   x3E
8336
1038:  CLRF   x3E
8337
103A:  MOVFF  7C,73D
8337
103A:  MOVFF  7C,73D
8338
103E:  MOVLW  02
8338
103E:  MOVLW  02
8339
1040:  MOVWF  x3F
8339
1040:  MOVWF  x3F
8340
1042:  MOVLB  0
8340
1042:  MOVLB  0
8341
1044:  RCALL  0F88
8341
1044:  RCALL  0F88
8342
....................    g_LastCDCDataPacketSize = usb_cdc_put_buffer_nextin; 
8342
....................    g_LastCDCDataPacketSize = usb_cdc_put_buffer_nextin; 
8343
1046:  MOVFF  7C,82
8343
1046:  MOVFF  7C,82
8344
....................    usb_cdc_put_buffer_nextin=0; 
8344
....................    usb_cdc_put_buffer_nextin=0; 
8345
104A:  CLRF   x7C
8345
104A:  CLRF   x7C
8346
.................... } 
8346
.................... } 
8347
104C:  RETLW  00
8347
104C:  RETLW  00
8348
....................  
8348
....................  
8349
.................... void usb_cdc_init(void)  
8349
.................... void usb_cdc_init(void)  
8350
.................... { 
8350
.................... { 
8351
....................    usb_cdc_line_coding.dwDTERrate = 9600; 
8351
....................    usb_cdc_line_coding.dwDTERrate = 9600; 
8352
*
8352
*
8353
035C:  CLRF   2E
8353
035C:  CLRF   2E
8354
035E:  CLRF   2D
8354
035E:  CLRF   2D
8355
0360:  MOVLW  25
8355
0360:  MOVLW  25
8356
0362:  MOVWF  2C
8356
0362:  MOVWF  2C
8357
0364:  MOVLW  80
8357
0364:  MOVLW  80
8358
0366:  MOVWF  2B
8358
0366:  MOVWF  2B
8359
....................    usb_cdc_line_coding.bCharFormat = 0; 
8359
....................    usb_cdc_line_coding.bCharFormat = 0; 
8360
0368:  CLRF   2F
8360
0368:  CLRF   2F
8361
....................    usb_cdc_line_coding.bParityType = 0; 
8361
....................    usb_cdc_line_coding.bParityType = 0; 
8362
036A:  CLRF   30
8362
036A:  CLRF   30
8363
....................    usb_cdc_line_coding.bDataBits = 8; 
8363
....................    usb_cdc_line_coding.bDataBits = 8; 
8364
036C:  MOVLW  08
8364
036C:  MOVLW  08
8365
036E:  MOVWF  31
8365
036E:  MOVWF  31
8366
....................    (int8)usb_cdc_carrier = 0; 
8366
....................    (int8)usb_cdc_carrier = 0; 
8367
0370:  CLRF   x81
8367
0370:  CLRF   x81
8368
....................    usb_cdc_got_set_line_coding = FALSE; 
8368
....................    usb_cdc_got_set_line_coding = FALSE; 
8369
0372:  BCF    x80.0
8369
0372:  BCF    x80.0
8370
....................    usb_cdc_break = 0; 
8370
....................    usb_cdc_break = 0; 
8371
0374:  CLRF   33
8371
0374:  CLRF   33
8372
0376:  CLRF   32
8372
0376:  CLRF   32
8373
....................    usb_cdc_put_buffer_nextin = 0; 
8373
....................    usb_cdc_put_buffer_nextin = 0; 
8374
0378:  CLRF   x7C
8374
0378:  CLRF   x7C
8375
....................    usb_cdc_get_buffer_status.got = 0; 
8375
....................    usb_cdc_get_buffer_status.got = 0; 
8376
037A:  BCF    x7D.0
8376
037A:  BCF    x7D.0
8377
.................... } 
8377
.................... } 
8378
037C:  RETLW  00
8378
037C:  RETLW  00
8379
....................  
8379
....................  
8380
.................... ////////////////// END USB CONTROL HANDLING ////////////////////////////////// 
8380
.................... ////////////////// END USB CONTROL HANDLING ////////////////////////////////// 
8381
....................  
8381
....................  
8382
.................... ////////////////// BEGIN USB<->RS232 CDC LIBRARY ///////////////////////////// 
8382
.................... ////////////////// BEGIN USB<->RS232 CDC LIBRARY ///////////////////////////// 
8383
....................  
8383
....................  
8384
.................... void usb_cdc_get_discard(void) 
8384
.................... void usb_cdc_get_discard(void) 
8385
.................... { 
8385
.................... { 
8386
....................    usb_cdc_get_buffer_status.got = FALSE; 
8386
....................    usb_cdc_get_buffer_status.got = FALSE; 
8387
....................    usb_flush_out(USB_CDC_DATA_OUT_ENDPOINT, USB_DTS_TOGGLE); 
8387
....................    usb_flush_out(USB_CDC_DATA_OUT_ENDPOINT, USB_DTS_TOGGLE); 
8388
.................... } 
8388
.................... } 
8389
....................  
8389
....................  
8390
.................... char usb_cdc_getc(void)  
8390
.................... char usb_cdc_getc(void)  
8391
.................... { 
8391
.................... { 
8392
....................    char c; 
8392
....................    char c; 
8393
....................  
8393
....................  
8394
....................    while (!usb_cdc_kbhit()) {} 
8394
....................    while (!usb_cdc_kbhit()) {} 
8395
....................  
8395
....................  
8396
....................    c=usb_cdc_get_buffer_status_buffer[usb_cdc_get_buffer_status.index++]; 
8396
....................    c=usb_cdc_get_buffer_status_buffer[usb_cdc_get_buffer_status.index++]; 
8397
....................  
8397
....................  
8398
....................    if (usb_cdc_get_buffer_status.index >= usb_cdc_get_buffer_status.len)  
8398
....................    if (usb_cdc_get_buffer_status.index >= usb_cdc_get_buffer_status.len)  
8399
....................    { 
8399
....................    { 
8400
....................       usb_cdc_get_discard(); 
8400
....................       usb_cdc_get_discard(); 
8401
....................    } 
8401
....................    } 
8402
....................  
8402
....................  
8403
....................    return(c); 
8403
....................    return(c); 
8404
.................... } 
8404
.................... } 
8405
....................  
8405
....................  
8406
.................... void usb_cdc_putc_fast(char c)  
8406
.................... void usb_cdc_putc_fast(char c)  
8407
.................... { 
8407
.................... { 
8408
....................  #if defined(__PCH__) 
8408
....................  #if defined(__PCH__) 
8409
....................    int1 old_gie; 
8409
....................    int1 old_gie; 
8410
....................  
8410
....................  
8411
....................    //disable global interrupts 
8411
....................    //disable global interrupts 
8412
....................    old_gie = INT_GIE; 
8412
....................    old_gie = INT_GIE; 
8413
*
8413
*
8414
1376:  MOVLB  6
8414
1376:  MOVLB  6
8415
1378:  BCF    xDD.0
8415
1378:  BCF    xDD.0
8416
137A:  BTFSC  FF2.7
8416
137A:  BTFSC  FF2.7
8417
137C:  BSF    xDD.0
8417
137C:  BSF    xDD.0
8418
....................    INT_GIE = 0; 
8418
....................    INT_GIE = 0; 
8419
137E:  BCF    FF2.7
8419
137E:  BCF    FF2.7
8420
....................  #else 
8420
....................  #else 
8421
....................    int16 oldSR; 
8421
....................    int16 oldSR; 
8422
....................     
8422
....................     
8423
....................    oldSR = SR; 
8423
....................    oldSR = SR; 
8424
....................    SR |= 0xE0; 
8424
....................    SR |= 0xE0; 
8425
....................  #endif 
8425
....................  #endif 
8426
....................  
8426
....................  
8427
....................    if (usb_cdc_put_buffer_nextin >= USB_CDC_DATA_IN_SIZE) { 
8427
....................    if (usb_cdc_put_buffer_nextin >= USB_CDC_DATA_IN_SIZE) { 
8428
1380:  MOVLB  0
8428
1380:  MOVLB  0
8429
1382:  MOVF   x7C,W
8429
1382:  MOVF   x7C,W
8430
1384:  SUBLW  3F
8430
1384:  SUBLW  3F
8431
1386:  BC    138C
8431
1386:  BC    138C
8432
....................       usb_cdc_put_buffer_nextin = USB_CDC_DATA_IN_SIZE-1;  //we just overflowed the buffer! 
8432
....................       usb_cdc_put_buffer_nextin = USB_CDC_DATA_IN_SIZE-1;  //we just overflowed the buffer! 
8433
1388:  MOVLW  3F
8433
1388:  MOVLW  3F
8434
138A:  MOVWF  x7C
8434
138A:  MOVWF  x7C
8435
....................    } 
8435
....................    } 
8436
....................    usb_cdc_put_buffer[usb_cdc_put_buffer_nextin++] = c; 
8436
....................    usb_cdc_put_buffer[usb_cdc_put_buffer_nextin++] = c; 
8437
138C:  MOVF   x7C,W
8437
138C:  MOVF   x7C,W
8438
138E:  INCF   x7C,F
8438
138E:  INCF   x7C,F
8439
1390:  CLRF   03
8439
1390:  CLRF   03
8440
1392:  ADDLW  3C
8440
1392:  ADDLW  3C
8441
1394:  MOVWF  FE9
8441
1394:  MOVWF  FE9
8442
1396:  MOVLW  00
8442
1396:  MOVLW  00
8443
1398:  ADDWFC 03,W
8443
1398:  ADDWFC 03,W
8444
139A:  MOVWF  FEA
8444
139A:  MOVWF  FEA
8445
139C:  MOVFF  6DC,FEF
8445
139C:  MOVFF  6DC,FEF
8446
....................  
8446
....................  
8447
....................    //renable global interrupts 
8447
....................    //renable global interrupts 
8448
....................   #if defined(__PCH__) 
8448
....................   #if defined(__PCH__) 
8449
....................    INT_GIE = old_gie; 
8449
....................    INT_GIE = old_gie; 
8450
13A0:  BCF    FF2.7
8450
13A0:  BCF    FF2.7
8451
13A2:  MOVLB  6
8451
13A2:  MOVLB  6
8452
13A4:  BTFSC  xDD.0
8452
13A4:  BTFSC  xDD.0
8453
13A6:  BSF    FF2.7
8453
13A6:  BSF    FF2.7
8454
13A8:  CLRF   18
8454
13A8:  CLRF   18
8455
13AA:  BTFSC  FF2.7
8455
13AA:  BTFSC  FF2.7
8456
13AC:  BSF    18.7
8456
13AC:  BSF    18.7
8457
13AE:  BCF    FF2.7
8457
13AE:  BCF    FF2.7
8458
....................   #else 
8458
....................   #else 
8459
....................    SR = oldSR; 
8459
....................    SR = oldSR; 
8460
....................   #endif 
8460
....................   #endif 
8461
....................  
8461
....................  
8462
....................    /* 
8462
....................    /* 
8463
....................    if (usb_tbe(USB_CDC_DATA_IN_ENDPOINT)) { 
8463
....................    if (usb_tbe(USB_CDC_DATA_IN_ENDPOINT)) { 
8464
....................       if (usb_cdc_put_buffer_nextin) 
8464
....................       if (usb_cdc_put_buffer_nextin) 
8465
....................          usb_cdc_flush_out_buffer(); 
8465
....................          usb_cdc_flush_out_buffer(); 
8466
....................    } 
8466
....................    } 
8467
....................    */ 
8467
....................    */ 
8468
....................    if (usb_cdc_put_buffer_free()) { 
8468
....................    if (usb_cdc_put_buffer_free()) { 
8469
13B0:  MOVLW  02
8469
13B0:  MOVLW  02
8470
13B2:  MOVLB  7
8470
13B2:  MOVLB  7
8471
13B4:  MOVWF  x47
8471
13B4:  MOVWF  x47
8472
13B6:  MOVLB  0
8472
13B6:  MOVLB  0
8473
13B8:  RCALL  0D06
8473
13B8:  RCALL  0D06
8474
13BA:  BTFSC  18.7
8474
13BA:  BTFSC  18.7
8475
13BC:  BSF    FF2.7
8475
13BC:  BSF    FF2.7
8476
13BE:  MOVF   01,F
8476
13BE:  MOVF   01,F
8477
13C0:  BZ    13D0
8477
13C0:  BZ    13D0
8478
13C2:  CLRF   18
8478
13C2:  CLRF   18
8479
13C4:  BTFSC  FF2.7
8479
13C4:  BTFSC  FF2.7
8480
13C6:  BSF    18.7
8480
13C6:  BSF    18.7
8481
13C8:  BCF    FF2.7
8481
13C8:  BCF    FF2.7
8482
....................       //printf("FL2 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8482
....................       //printf("FL2 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8483
....................       usb_cdc_flush_out_buffer(); 
8483
....................       usb_cdc_flush_out_buffer(); 
8484
13CA:  RCALL  102C
8484
13CA:  RCALL  102C
8485
13CC:  BTFSC  18.7
8485
13CC:  BTFSC  18.7
8486
13CE:  BSF    FF2.7
8486
13CE:  BSF    FF2.7
8487
....................    } 
8487
....................    } 
8488
....................    //putc('*'); 
8488
....................    //putc('*'); 
8489
.................... } 
8489
.................... } 
8490
13D0:  GOTO   140A (RETURN)
8490
13D0:  GOTO   140A (RETURN)
8491
....................  
8491
....................  
8492
.................... void usb_cdc_putc(char c)  
8492
.................... void usb_cdc_putc(char c)  
8493
.................... { 
8493
.................... { 
8494
....................    while (!usb_cdc_putready())  
8494
....................    while (!usb_cdc_putready())  
8495
....................    { 
8495
....................    { 
8496
13D4:  MOVF   x7C,W
8496
13D4:  MOVF   x7C,W
8497
13D6:  SUBLW  3F
8497
13D6:  SUBLW  3F
8498
13D8:  BC    1404
8498
13D8:  BC    1404
8499
13DA:  CLRF   18
8499
13DA:  CLRF   18
8500
13DC:  BTFSC  FF2.7
8500
13DC:  BTFSC  FF2.7
8501
13DE:  BSF    18.7
8501
13DE:  BSF    18.7
8502
13E0:  BCF    FF2.7
8502
13E0:  BCF    FF2.7
8503
....................       if (usb_cdc_put_buffer_free())  
8503
....................       if (usb_cdc_put_buffer_free())  
8504
13E2:  MOVLW  02
8504
13E2:  MOVLW  02
8505
13E4:  MOVLB  7
8505
13E4:  MOVLB  7
8506
13E6:  MOVWF  x47
8506
13E6:  MOVWF  x47
8507
13E8:  MOVLB  0
8507
13E8:  MOVLB  0
8508
13EA:  RCALL  0D06
8508
13EA:  RCALL  0D06
8509
13EC:  BTFSC  18.7
8509
13EC:  BTFSC  18.7
8510
13EE:  BSF    FF2.7
8510
13EE:  BSF    FF2.7
8511
13F0:  MOVF   01,F
8511
13F0:  MOVF   01,F
8512
13F2:  BZ    1402
8512
13F2:  BZ    1402
8513
13F4:  CLRF   18
8513
13F4:  CLRF   18
8514
13F6:  BTFSC  FF2.7
8514
13F6:  BTFSC  FF2.7
8515
13F8:  BSF    18.7
8515
13F8:  BSF    18.7
8516
13FA:  BCF    FF2.7
8516
13FA:  BCF    FF2.7
8517
....................       { 
8517
....................       { 
8518
....................          //printf("FL1 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8518
....................          //printf("FL1 %LU\r\n", (int16)usb_cdc_put_buffer_nextin); 
8519
....................          usb_cdc_flush_out_buffer(); 
8519
....................          usb_cdc_flush_out_buffer(); 
8520
13FC:  RCALL  102C
8520
13FC:  RCALL  102C
8521
13FE:  BTFSC  18.7
8521
13FE:  BTFSC  18.7
8522
1400:  BSF    FF2.7
8522
1400:  BSF    FF2.7
8523
....................       } 
8523
....................       } 
8524
....................       //delay_ms(500); 
8524
....................       //delay_ms(500); 
8525
....................       //printf(putc_tbe,"TBE=%U CNT=%U LST=%U\r\n",usb_tbe(USB_CDC_DATA_IN_ENDPOINT), usb_cdc_put_buffer_nextin, usb_cdc_last_data_packet_size); 
8525
....................       //printf(putc_tbe,"TBE=%U CNT=%U LST=%U\r\n",usb_tbe(USB_CDC_DATA_IN_ENDPOINT), usb_cdc_put_buffer_nextin, usb_cdc_last_data_packet_size); 
8526
....................    } 
8526
....................    } 
8527
1402:  BRA    13D4
8527
1402:  BRA    13D4
8528
....................    //putc('.'); 
8528
....................    //putc('.'); 
8529
....................    //putc(c); 
8529
....................    //putc(c); 
8530
....................    usb_cdc_putc_fast(c); 
8530
....................    usb_cdc_putc_fast(c); 
8531
1404:  MOVFF  6DB,6DC
8531
1404:  MOVFF  6DB,6DC
8532
1408:  BRA    1376
8532
1408:  BRA    1376
8533
.................... } 
8533
.................... } 
8534
140A:  RETLW  00
8534
140A:  RETLW  00
8535
....................  
8535
....................  
8536
.................... #include <ctype.h> 
8536
.................... #include <ctype.h> 
8537
.................... //////////////////////////////////////////////////////////////////////////// 
8537
.................... //////////////////////////////////////////////////////////////////////////// 
8538
.................... ////        (C) Copyright 1996,2003 Custom Computer Services            //// 
8538
.................... ////        (C) Copyright 1996,2003 Custom Computer Services            //// 
8539
.................... //// This source code may only be used by licensed users of the CCS C   //// 
8539
.................... //// This source code may only be used by licensed users of the CCS C   //// 
8540
.................... //// compiler.  This source code may only be distributed to other       //// 
8540
.................... //// compiler.  This source code may only be distributed to other       //// 
8541
.................... //// licensed users of the CCS C compiler.  No other use, reproduction  //// 
8541
.................... //// licensed users of the CCS C compiler.  No other use, reproduction  //// 
8542
.................... //// or distribution is permitted without written permission.           //// 
8542
.................... //// or distribution is permitted without written permission.           //// 
8543
.................... //// Derivative programs created using this software in object code     //// 
8543
.................... //// Derivative programs created using this software in object code     //// 
8544
.................... //// form are not restricted in any way.                                //// 
8544
.................... //// form are not restricted in any way.                                //// 
8545
.................... //////////////////////////////////////////////////////////////////////////// 
8545
.................... //////////////////////////////////////////////////////////////////////////// 
8546
....................  
8546
....................  
8547
.................... #ifndef _CTYPE 
8547
.................... #ifndef _CTYPE 
8548
.................... #define _CTYPE 
8548
.................... #define _CTYPE 
8549
....................  
8549
....................  
8550
.................... #define islower(x)  isamong(x,"abcdefghijklmnopqrstuvwxyz") 
8550
.................... #define islower(x)  isamong(x,"abcdefghijklmnopqrstuvwxyz") 
8551
.................... #define isupper(x)  isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZ") 
8551
.................... #define isupper(x)  isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZ") 
8552
.................... #define isalnum(x)  isamong(x,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") 
8552
.................... #define isalnum(x)  isamong(x,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") 
8553
.................... #define isalpha(x)  isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") 
8553
.................... #define isalpha(x)  isamong(x,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz") 
8554
.................... #define isdigit(x)  isamong(x,"0123456789") 
8554
.................... #define isdigit(x)  isamong(x,"0123456789") 
8555
.................... #define isspace(x)  ((x)==' ') 
8555
.................... #define isspace(x)  ((x)==' ') 
8556
.................... #define isxdigit(x) isamong(x,"0123456789ABCDEFabcdef") 
8556
.................... #define isxdigit(x) isamong(x,"0123456789ABCDEFabcdef") 
8557
.................... #define iscntrl(x)  ((x)<' ') 
8557
.................... #define iscntrl(x)  ((x)<' ') 
8558
.................... #define isprint(x)  ((x)>=' ') 
8558
.................... #define isprint(x)  ((x)>=' ') 
8559
.................... #define isgraph(x)  ((x)>' ') 
8559
.................... #define isgraph(x)  ((x)>' ') 
8560
.................... #define ispunct(x)  (((x)>' ')&&!isalnum(x)) 
8560
.................... #define ispunct(x)  (((x)>' ')&&!isalnum(x)) 
8561
....................  
8561
....................  
8562
.................... #endif 
8562
.................... #endif 
8563
....................  
8563
....................  
8564
....................  
8564
....................  
8565
....................  
8565
....................  
8566
.................... BYTE gethex1_usb()  
8566
.................... BYTE gethex1_usb()  
8567
.................... { 
8567
.................... { 
8568
....................    char digit; 
8568
....................    char digit; 
8569
....................  
8569
....................  
8570
....................    digit = usb_cdc_getc(); 
8570
....................    digit = usb_cdc_getc(); 
8571
....................  
8571
....................  
8572
....................    usb_cdc_putc(digit); 
8572
....................    usb_cdc_putc(digit); 
8573
....................  
8573
....................  
8574
....................    if(digit<='9') 
8574
....................    if(digit<='9') 
8575
....................      return(digit-'0'); 
8575
....................      return(digit-'0'); 
8576
....................    else 
8576
....................    else 
8577
....................      return((toupper(digit)-'A')+10); 
8577
....................      return((toupper(digit)-'A')+10); 
8578
.................... } 
8578
.................... } 
8579
....................  
8579
....................  
8580
.................... BYTE gethex_usb() { 
8580
.................... BYTE gethex_usb() { 
8581
....................    unsigned int8 lo,hi; 
8581
....................    unsigned int8 lo,hi; 
8582
....................  
8582
....................  
8583
....................    hi = gethex1_usb(); 
8583
....................    hi = gethex1_usb(); 
8584
....................    lo = gethex1_usb(); 
8584
....................    lo = gethex1_usb(); 
8585
....................    if(lo==0xdd) 
8585
....................    if(lo==0xdd) 
8586
....................      return(hi); 
8586
....................      return(hi); 
8587
....................    else 
8587
....................    else 
8588
....................      return( hi*16+lo ); 
8588
....................      return( hi*16+lo ); 
8589
.................... } 
8589
.................... } 
8590
....................  
8590
....................  
8591
.................... void get_string_usb(char* s, unsigned int max) { 
8591
.................... void get_string_usb(char* s, unsigned int max) { 
8592
....................    unsigned int len; 
8592
....................    unsigned int len; 
8593
....................    char c; 
8593
....................    char c; 
8594
....................  
8594
....................  
8595
....................    --max; 
8595
....................    --max; 
8596
....................    len=0; 
8596
....................    len=0; 
8597
....................    do { 
8597
....................    do { 
8598
....................      c=usb_cdc_getc(); 
8598
....................      c=usb_cdc_getc(); 
8599
....................      if(c==8) {  // Backspace 
8599
....................      if(c==8) {  // Backspace 
8600
....................         if(len>0) { 
8600
....................         if(len>0) { 
8601
....................           len--; 
8601
....................           len--; 
8602
....................           usb_cdc_putc(c); 
8602
....................           usb_cdc_putc(c); 
8603
....................           usb_cdc_putc(' '); 
8603
....................           usb_cdc_putc(' '); 
8604
....................           usb_cdc_putc(c); 
8604
....................           usb_cdc_putc(c); 
8605
....................         } 
8605
....................         } 
8606
....................      } else if ((c>=' ')&&(c<='~')) 
8606
....................      } else if ((c>=' ')&&(c<='~')) 
8607
....................        if(len<max) { 
8607
....................        if(len<max) { 
8608
....................          s[len++]=c; 
8608
....................          s[len++]=c; 
8609
....................          usb_cdc_putc(c); 
8609
....................          usb_cdc_putc(c); 
8610
....................        } 
8610
....................        } 
8611
....................    } while(c!=13); 
8611
....................    } while(c!=13); 
8612
....................    s[len]=0; 
8612
....................    s[len]=0; 
8613
.................... } 
8613
.................... } 
8614
....................  
8614
....................  
8615
....................  
8615
....................  
8616
.................... // stdlib.h is required for the ato_ conversions 
8616
.................... // stdlib.h is required for the ato_ conversions 
8617
.................... // in the following functions 
8617
.................... // in the following functions 
8618
.................... #ifdef _STDLIB 
8618
.................... #ifdef _STDLIB 
8619
....................  
8619
....................  
8620
.................... signed int get_int_usb() { 
8620
.................... signed int get_int_usb() { 
8621
....................   char s[7]; 
8621
....................   char s[7]; 
8622
....................   signed int i; 
8622
....................   signed int i; 
8623
....................  
8623
....................  
8624
....................   get_string_usb(s, 7); 
8624
....................   get_string_usb(s, 7); 
8625
....................  
8625
....................  
8626
....................   i=atoi(s); 
8626
....................   i=atoi(s); 
8627
....................   return(i); 
8627
....................   return(i); 
8628
.................... } 
8628
.................... } 
8629
....................  
8629
....................  
8630
.................... signed long get_long_usb() { 
8630
.................... signed long get_long_usb() { 
8631
....................   char s[13]; 
8631
....................   char s[13]; 
8632
....................   signed long l; 
8632
....................   signed long l; 
8633
....................  
8633
....................  
8634
....................   get_string_usb(s, 13); 
8634
....................   get_string_usb(s, 13); 
8635
....................   l=atol(s); 
8635
....................   l=atol(s); 
8636
....................   return(l); 
8636
....................   return(l); 
8637
.................... } 
8637
.................... } 
8638
....................  
8638
....................  
8639
.................... float get_float_usb() { 
8639
.................... float get_float_usb() { 
8640
....................   char s[20]; 
8640
....................   char s[20]; 
8641
....................   float f; 
8641
....................   float f; 
8642
....................  
8642
....................  
8643
....................   get_string_usb(s, 20); 
8643
....................   get_string_usb(s, 20); 
8644
....................   f = atof(s); 
8644
....................   f = atof(s); 
8645
....................   return(f); 
8645
....................   return(f); 
8646
.................... } 
8646
.................... } 
8647
....................  
8647
....................  
8648
.................... #endif 
8648
.................... #endif 
8649
....................  
8649
....................  
8650
.................... #include <math.h> 
8650
.................... #include <math.h> 
8651
.................... //////////////////////////////////////////////////////////////////////////// 
8651
.................... //////////////////////////////////////////////////////////////////////////// 
8652
.................... ////        (C) Copyright 1996,2008 Custom Computer Services            //// 
8652
.................... ////        (C) Copyright 1996,2008 Custom Computer Services            //// 
8653
.................... //// This source code may only be used by licensed users of the CCS C   //// 
8653
.................... //// This source code may only be used by licensed users of the CCS C   //// 
8654
.................... //// compiler.  This source code may only be distributed to other       //// 
8654
.................... //// compiler.  This source code may only be distributed to other       //// 
8655
.................... //// licensed users of the CCS C compiler.  No other use, reproduction  //// 
8655
.................... //// licensed users of the CCS C compiler.  No other use, reproduction  //// 
8656
.................... //// or distribution is permitted without written permission.           //// 
8656
.................... //// or distribution is permitted without written permission.           //// 
8657
.................... //// Derivative programs created using this software in object code     //// 
8657
.................... //// Derivative programs created using this software in object code     //// 
8658
.................... //// form are not restricted in any way.                                //// 
8658
.................... //// form are not restricted in any way.                                //// 
8659
.................... //////////////////////////////////////////////////////////////////////////// 
8659
.................... //////////////////////////////////////////////////////////////////////////// 
8660
.................... ////                                                                    //// 
8660
.................... ////                                                                    //// 
8661
.................... //// History:                                                           //// 
8661
.................... //// History:                                                           //// 
8662
.................... ////  * 9/20/2001 :  Improvments are made to sin/cos code.              //// 
8662
.................... ////  * 9/20/2001 :  Improvments are made to sin/cos code.              //// 
8663
.................... ////                 The code now is small, much faster,                //// 
8663
.................... ////                 The code now is small, much faster,                //// 
8664
.................... ////                 and more accurate.                                 //// 
8664
.................... ////                 and more accurate.                                 //// 
8665
.................... ////  * 2/21/2007 :  Compiler handles & operator differently and does 
8665
.................... ////  * 2/21/2007 :  Compiler handles & operator differently and does 
8666
.................... ////                 not return generic (int8 *) so type cast is done   //// 
8666
.................... ////                 not return generic (int8 *) so type cast is done   //// 
8667
.................... ////                                                                    //// 
8667
.................... ////                                                                    //// 
8668
.................... //////////////////////////////////////////////////////////////////////////// 
8668
.................... //////////////////////////////////////////////////////////////////////////// 
8669
....................  
8669
....................  
8670
.................... #ifndef MATH_H 
8670
.................... #ifndef MATH_H 
8671
.................... #define MATH_H 
8671
.................... #define MATH_H 
8672
....................  
8672
....................  
8673
.................... #ifdef PI 
8673
.................... #ifdef PI 
8674
.................... #undef  PI 
8674
.................... #undef  PI 
8675
.................... #endif 
8675
.................... #endif 
8676
.................... #define PI     3.1415926535897932 
8676
.................... #define PI     3.1415926535897932 
8677
....................  
8677
....................  
8678
....................  
8678
....................  
8679
.................... #define SQRT2  1.4142135623730950 
8679
.................... #define SQRT2  1.4142135623730950 
8680
....................  
8680
....................  
8681
.................... //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279}; 
8681
.................... //float const ps[4] = {5.9304945, 21.125224, 8.9403076, 0.29730279}; 
8682
.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718}; 
8682
.................... //float const qs[4] = {1.0000000, 15.035723, 17.764134, 2.4934718}; 
8683
....................  
8683
....................  
8684
.................... ///////////////////////////// Round Functions ////////////////////////////// 
8684
.................... ///////////////////////////// Round Functions ////////////////////////////// 
8685
....................  
8685
....................  
8686
.................... float32 CEIL_FLOOR(float32 x, unsigned int8 n) 
8686
.................... float32 CEIL_FLOOR(float32 x, unsigned int8 n) 
8687
.................... { 
8687
.................... { 
8688
....................    float32 y, res; 
8688
....................    float32 y, res; 
8689
....................    unsigned int16 l; 
8689
....................    unsigned int16 l; 
8690
....................    int1 s; 
8690
....................    int1 s; 
8691
....................  
8691
....................  
8692
....................    s = 0; 
8692
....................    s = 0; 
8693
....................    y = x; 
8693
....................    y = x; 
8694
....................  
8694
....................  
8695
....................    if (x < 0) 
8695
....................    if (x < 0) 
8696
....................    { 
8696
....................    { 
8697
....................       s = 1; 
8697
....................       s = 1; 
8698
....................       y = -y; 
8698
....................       y = -y; 
8699
....................    } 
8699
....................    } 
8700
....................  
8700
....................  
8701
....................    if (y <= 32768.0) 
8701
....................    if (y <= 32768.0) 
8702
....................   res = (float32)(unsigned int16)y; 
8702
....................   res = (float32)(unsigned int16)y; 
8703
....................  
8703
....................  
8704
....................  else if (y < 10000000.0) 
8704
....................  else if (y < 10000000.0) 
8705
....................    { 
8705
....................    { 
8706
....................   l = (unsigned int16)(y/32768.0); 
8706
....................   l = (unsigned int16)(y/32768.0); 
8707
....................       y = 32768.0*(y/32768.0 - (float32)l); 
8707
....................       y = 32768.0*(y/32768.0 - (float32)l); 
8708
....................   res = 32768.0*(float32)l; 
8708
....................   res = 32768.0*(float32)l; 
8709
....................   res += (float32)(unsigned int16)y; 
8709
....................   res += (float32)(unsigned int16)y; 
8710
....................  } 
8710
....................  } 
8711
....................  
8711
....................  
8712
....................  else 
8712
....................  else 
8713
....................   res = y; 
8713
....................   res = y; 
8714
....................  
8714
....................  
8715
....................  y = y - (float32)(unsigned int16)y; 
8715
....................  y = y - (float32)(unsigned int16)y; 
8716
....................  
8716
....................  
8717
....................  if (s) 
8717
....................  if (s) 
8718
....................   res = -res; 
8718
....................   res = -res; 
8719
....................  
8719
....................  
8720
....................  if (y != 0) 
8720
....................  if (y != 0) 
8721
....................  { 
8721
....................  { 
8722
....................   if (s == 1 && n == 0) 
8722
....................   if (s == 1 && n == 0) 
8723
....................    res -= 1.0; 
8723
....................    res -= 1.0; 
8724
....................  
8724
....................  
8725
....................   if (s == 0 && n == 1) 
8725
....................   if (s == 0 && n == 1) 
8726
....................    res += 1.0; 
8726
....................    res += 1.0; 
8727
....................  } 
8727
....................  } 
8728
....................  if (x == 0) 
8728
....................  if (x == 0) 
8729
....................     res = 0; 
8729
....................     res = 0; 
8730
....................  
8730
....................  
8731
....................  return (res); 
8731
....................  return (res); 
8732
.................... } 
8732
.................... } 
8733
....................  
8733
....................  
8734
.................... // Overloaded Functions to take care for new Data types in PCD 
8734
.................... // Overloaded Functions to take care for new Data types in PCD 
8735
.................... // Overloaded function CEIL_FLOOR() for data type - Float48 
8735
.................... // Overloaded function CEIL_FLOOR() for data type - Float48 
8736
.................... #if defined(__PCD__) 
8736
.................... #if defined(__PCD__) 
8737
.................... float48 CEIL_FLOOR(float48 x, unsigned int8 n) 
8737
.................... float48 CEIL_FLOOR(float48 x, unsigned int8 n) 
8738
.................... { 
8738
.................... { 
8739
....................    float48 y, res; 
8739
....................    float48 y, res; 
8740
....................    unsigned int16 l; 
8740
....................    unsigned int16 l; 
8741
....................    int1 s; 
8741
....................    int1 s; 
8742
....................  
8742
....................  
8743
....................    s = 0; 
8743
....................    s = 0; 
8744
....................    y = x; 
8744
....................    y = x; 
8745
....................  
8745
....................  
8746
....................    if (x < 0) 
8746
....................    if (x < 0) 
8747
....................    { 
8747
....................    { 
8748
....................       s = 1; 
8748
....................       s = 1; 
8749
....................       y = -y; 
8749
....................       y = -y; 
8750
....................    } 
8750
....................    } 
8751
....................  
8751
....................  
8752
....................    if (y <= 32768.0) 
8752
....................    if (y <= 32768.0) 
8753
....................   res = (float48)(unsigned int16)y; 
8753
....................   res = (float48)(unsigned int16)y; 
8754
....................  
8754
....................  
8755
....................  else if (y < 10000000.0) 
8755
....................  else if (y < 10000000.0) 
8756
....................    { 
8756
....................    { 
8757
....................   l = (unsigned int16)(y/32768.0); 
8757
....................   l = (unsigned int16)(y/32768.0); 
8758
....................       y = 32768.0*(y/32768.0 - (float48)l); 
8758
....................       y = 32768.0*(y/32768.0 - (float48)l); 
8759
....................   res = 32768.0*(float32)l; 
8759
....................   res = 32768.0*(float32)l; 
8760
....................   res += (float48)(unsigned int16)y; 
8760
....................   res += (float48)(unsigned int16)y; 
8761
....................  } 
8761
....................  } 
8762
....................  
8762
....................  
8763
....................  else 
8763
....................  else 
8764
....................   res = y; 
8764
....................   res = y; 
8765
....................  
8765
....................  
8766
....................  y = y - (float48)(unsigned int16)y; 
8766
....................  y = y - (float48)(unsigned int16)y; 
8767
....................  
8767
....................  
8768
....................  if (s) 
8768
....................  if (s) 
8769
....................   res = -res; 
8769
....................   res = -res; 
8770
....................  
8770
....................  
8771
....................  if (y != 0) 
8771
....................  if (y != 0) 
8772
....................  { 
8772
....................  { 
8773
....................   if (s == 1 && n == 0) 
8773
....................   if (s == 1 && n == 0) 
8774
....................    res -= 1.0; 
8774
....................    res -= 1.0; 
8775
....................  
8775
....................  
8776
....................   if (s == 0 && n == 1) 
8776
....................   if (s == 0 && n == 1) 
8777
....................    res += 1.0; 
8777
....................    res += 1.0; 
8778
....................  } 
8778
....................  } 
8779
....................  if (x == 0) 
8779
....................  if (x == 0) 
8780
....................     res = 0; 
8780
....................     res = 0; 
8781
....................  
8781
....................  
8782
....................  return (res); 
8782
....................  return (res); 
8783
.................... } 
8783
.................... } 
8784
....................  
8784
....................  
8785
....................  
8785
....................  
8786
.................... // Overloaded function CEIL_FLOOR() for data type - Float64 
8786
.................... // Overloaded function CEIL_FLOOR() for data type - Float64 
8787
.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n) 
8787
.................... float64 CEIL_FLOOR(float64 x, unsigned int8 n) 
8788
.................... { 
8788
.................... { 
8789
....................    float64 y, res; 
8789
....................    float64 y, res; 
8790
....................    unsigned int16 l; 
8790
....................    unsigned int16 l; 
8791
....................    int1 s; 
8791
....................    int1 s; 
8792
....................  
8792
....................  
8793
....................    s = 0; 
8793
....................    s = 0; 
8794
....................    y = x; 
8794
....................    y = x; 
8795
....................  
8795
....................  
8796
....................    if (x < 0) 
8796
....................    if (x < 0) 
8797
....................    { 
8797
....................    { 
8798
....................       s = 1; 
8798
....................       s = 1; 
8799
....................       y = -y; 
8799
....................       y = -y; 
8800
....................    } 
8800
....................    } 
8801
....................  
8801
....................  
8802
....................    if (y <= 32768.0) 
8802
....................    if (y <= 32768.0) 
8803
....................   res = (float64)(unsigned int16)y; 
8803
....................   res = (float64)(unsigned int16)y; 
8804
....................  
8804
....................  
8805
....................  else if (y < 10000000.0) 
8805
....................  else if (y < 10000000.0) 
8806
....................    { 
8806
....................    { 
8807
....................   l = (unsigned int16)(y/32768.0); 
8807
....................   l = (unsigned int16)(y/32768.0); 
8808
....................       y = 32768.0*(y/32768.0 - (float64)l); 
8808
....................       y = 32768.0*(y/32768.0 - (float64)l); 
8809
....................   res = 32768.0*(float64)l; 
8809
....................   res = 32768.0*(float64)l; 
8810
....................   res += (float64)(unsigned int16)y; 
8810
....................   res += (float64)(unsigned int16)y; 
8811
....................  } 
8811
....................  } 
8812
....................  
8812
....................  
8813
....................  else 
8813
....................  else 
8814
....................   res = y; 
8814
....................   res = y; 
8815
....................  
8815
....................  
8816
....................  y = y - (float64)(unsigned int16)y; 
8816
....................  y = y - (float64)(unsigned int16)y; 
8817
....................  
8817
....................  
8818
....................  if (s) 
8818
....................  if (s) 
8819
....................   res = -res; 
8819
....................   res = -res; 
8820
....................  
8820
....................  
8821
....................  if (y != 0) 
8821
....................  if (y != 0) 
8822
....................  { 
8822
....................  { 
8823
....................   if (s == 1 && n == 0) 
8823
....................   if (s == 1 && n == 0) 
8824
....................    res -= 1.0; 
8824
....................    res -= 1.0; 
8825
....................  
8825
....................  
8826
....................   if (s == 0 && n == 1) 
8826
....................   if (s == 0 && n == 1) 
8827
....................    res += 1.0; 
8827
....................    res += 1.0; 
8828
....................  } 
8828
....................  } 
8829
....................  if (x == 0) 
8829
....................  if (x == 0) 
8830
....................     res = 0; 
8830
....................     res = 0; 
8831
....................  
8831
....................  
8832
....................  return (res); 
8832
....................  return (res); 
8833
.................... } 
8833
.................... } 
8834
.................... #endif 
8834
.................... #endif 
8835
....................  
8835
....................  
8836
.................... //////////////////////////////////////////////////////////////////////////// 
8836
.................... //////////////////////////////////////////////////////////////////////////// 
8837
.................... //   float floor(float x) 
8837
.................... //   float floor(float x) 
8838
.................... //////////////////////////////////////////////////////////////////////////// 
8838
.................... //////////////////////////////////////////////////////////////////////////// 
8839
.................... // Description : rounds down the number x. 
8839
.................... // Description : rounds down the number x. 
8840
.................... // Date : N/A 
8840
.................... // Date : N/A 
8841
.................... // 
8841
.................... // 
8842
.................... float32 floor(float32 x) 
8842
.................... float32 floor(float32 x) 
8843
.................... { 
8843
.................... { 
8844
....................    return CEIL_FLOOR(x, 0); 
8844
....................    return CEIL_FLOOR(x, 0); 
8845
.................... } 
8845
.................... } 
8846
.................... // Following 2 functions are overloaded functions of floor() for PCD 
8846
.................... // Following 2 functions are overloaded functions of floor() for PCD 
8847
.................... // Overloaded function floor() for data type - Float48 
8847
.................... // Overloaded function floor() for data type - Float48 
8848
.................... #if defined(__PCD__) 
8848
.................... #if defined(__PCD__) 
8849
.................... float48 floor(float48 x) 
8849
.................... float48 floor(float48 x) 
8850
.................... { 
8850
.................... { 
8851
....................    return CEIL_FLOOR(x, 0); 
8851
....................    return CEIL_FLOOR(x, 0); 
8852
.................... } 
8852
.................... } 
8853
....................  
8853
....................  
8854
.................... // Overloaded function floor() for data type - Float64 
8854
.................... // Overloaded function floor() for data type - Float64 
8855
.................... float64 floor(float64 x) 
8855
.................... float64 floor(float64 x) 
8856
.................... { 
8856
.................... { 
8857
....................    return CEIL_FLOOR(x, 0); 
8857
....................    return CEIL_FLOOR(x, 0); 
8858
.................... } 
8858
.................... } 
8859
.................... #endif 
8859
.................... #endif 
8860
....................  
8860
....................  
8861
....................  
8861
....................  
8862
.................... //////////////////////////////////////////////////////////////////////////// 
8862
.................... //////////////////////////////////////////////////////////////////////////// 
8863
.................... //   float ceil(float x) 
8863
.................... //   float ceil(float x) 
8864
.................... //////////////////////////////////////////////////////////////////////////// 
8864
.................... //////////////////////////////////////////////////////////////////////////// 
8865
.................... // Description : rounds up the number x. 
8865
.................... // Description : rounds up the number x. 
8866
.................... // Date : N/A 
8866
.................... // Date : N/A 
8867
.................... // 
8867
.................... // 
8868
.................... float32 ceil(float32 x) 
8868
.................... float32 ceil(float32 x) 
8869
.................... { 
8869
.................... { 
8870
....................    return CEIL_FLOOR(x, 1); 
8870
....................    return CEIL_FLOOR(x, 1); 
8871
.................... } 
8871
.................... } 
8872
.................... // Following 2 functions are overloaded functions of ceil() for PCD 
8872
.................... // Following 2 functions are overloaded functions of ceil() for PCD 
8873
.................... // Overloaded function ceil() for data type - Float48 
8873
.................... // Overloaded function ceil() for data type - Float48 
8874
.................... #if defined(__PCD__) 
8874
.................... #if defined(__PCD__) 
8875
.................... float48 ceil(float48 x) 
8875
.................... float48 ceil(float48 x) 
8876
.................... { 
8876
.................... { 
8877
....................    return CEIL_FLOOR(x, 1); 
8877
....................    return CEIL_FLOOR(x, 1); 
8878
.................... } 
8878
.................... } 
8879
....................  
8879
....................  
8880
.................... // Overloaded function ceil() for data type - Float64 
8880
.................... // Overloaded function ceil() for data type - Float64 
8881
.................... float64 ceil(float64 x) 
8881
.................... float64 ceil(float64 x) 
8882
.................... { 
8882
.................... { 
8883
....................    return CEIL_FLOOR(x, 1); 
8883
....................    return CEIL_FLOOR(x, 1); 
8884
.................... } 
8884
.................... } 
8885
.................... #endif 
8885
.................... #endif 
8886
....................  
8886
....................  
8887
....................  //////////////////////////////////////////////////////////////////////////// 
8887
....................  //////////////////////////////////////////////////////////////////////////// 
8888
.................... //   float fabs(float x) 
8888
.................... //   float fabs(float x) 
8889
.................... //////////////////////////////////////////////////////////////////////////// 
8889
.................... //////////////////////////////////////////////////////////////////////////// 
8890
.................... // Description : Computes the absolute value of floating point number x 
8890
.................... // Description : Computes the absolute value of floating point number x 
8891
.................... // Returns : returns the absolute value of x 
8891
.................... // Returns : returns the absolute value of x 
8892
.................... // Date : N/A 
8892
.................... // Date : N/A 
8893
.................... // 
8893
.................... // 
8894
.................... #define fabs abs 
8894
.................... #define fabs abs 
8895
....................  
8895
....................  
8896
.................... //////////////////////////////////////////////////////////////////////////// 
8896
.................... //////////////////////////////////////////////////////////////////////////// 
8897
.................... //   float fmod(float x) 
8897
.................... //   float fmod(float x) 
8898
.................... //////////////////////////////////////////////////////////////////////////// 
8898
.................... //////////////////////////////////////////////////////////////////////////// 
8899
.................... // Description : Computes the floating point remainder of x/y 
8899
.................... // Description : Computes the floating point remainder of x/y 
8900
.................... // Returns : returns the value of x= i*y, for some integer i such that, if y 
8900
.................... // Returns : returns the value of x= i*y, for some integer i such that, if y 
8901
.................... // is non zero, the result has the same isgn of x na dmagnitude less than the 
8901
.................... // is non zero, the result has the same isgn of x na dmagnitude less than the 
8902
.................... // magnitude of y. If y is zero then a domain error occurs. 
8902
.................... // magnitude of y. If y is zero then a domain error occurs. 
8903
.................... // Date : N/A 
8903
.................... // Date : N/A 
8904
.................... // 
8904
.................... // 
8905
....................  
8905
....................  
8906
.................... float fmod(float32 x,float32 y) 
8906
.................... float fmod(float32 x,float32 y) 
8907
.................... { 
8907
.................... { 
8908
....................    float32 i; 
8908
....................    float32 i; 
8909
....................    if (y!=0.0) 
8909
....................    if (y!=0.0) 
8910
....................    { 
8910
....................    { 
8911
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8911
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8912
....................       return(x-(i*y)); 
8912
....................       return(x-(i*y)); 
8913
....................    } 
8913
....................    } 
8914
....................    else 
8914
....................    else 
8915
....................    { 
8915
....................    { 
8916
....................    #ifdef _ERRNO 
8916
....................    #ifdef _ERRNO 
8917
....................    { 
8917
....................    { 
8918
....................       errno=EDOM; 
8918
....................       errno=EDOM; 
8919
....................    } 
8919
....................    } 
8920
....................    #endif 
8920
....................    #endif 
8921
....................    } 
8921
....................    } 
8922
.................... } 
8922
.................... } 
8923
.................... //Overloaded function for fmod() for PCD 
8923
.................... //Overloaded function for fmod() for PCD 
8924
.................... // Overloaded function fmod() for data type - Float48 
8924
.................... // Overloaded function fmod() for data type - Float48 
8925
.................... #if defined(__PCD__) 
8925
.................... #if defined(__PCD__) 
8926
.................... float48 fmod(float48 x,float48 y) 
8926
.................... float48 fmod(float48 x,float48 y) 
8927
.................... { 
8927
.................... { 
8928
....................    float48 i; 
8928
....................    float48 i; 
8929
....................    if (y!=0.0) 
8929
....................    if (y!=0.0) 
8930
....................    { 
8930
....................    { 
8931
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8931
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8932
....................       return(x-(i*y)); 
8932
....................       return(x-(i*y)); 
8933
....................    } 
8933
....................    } 
8934
....................    else 
8934
....................    else 
8935
....................    { 
8935
....................    { 
8936
....................    #ifdef _ERRNO 
8936
....................    #ifdef _ERRNO 
8937
....................    { 
8937
....................    { 
8938
....................       errno=EDOM; 
8938
....................       errno=EDOM; 
8939
....................    } 
8939
....................    } 
8940
....................    #endif 
8940
....................    #endif 
8941
....................    } 
8941
....................    } 
8942
.................... } 
8942
.................... } 
8943
.................... // Overloaded function fmod() for data type - Float64 
8943
.................... // Overloaded function fmod() for data type - Float64 
8944
.................... float64 fmod(float64 x,float64 y) 
8944
.................... float64 fmod(float64 x,float64 y) 
8945
.................... { 
8945
.................... { 
8946
....................    float64 i; 
8946
....................    float64 i; 
8947
....................    if (y!=0.0) 
8947
....................    if (y!=0.0) 
8948
....................    { 
8948
....................    { 
8949
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8949
....................       i=(x/y < 0.0)? ceil(x/y): floor(x/y); 
8950
....................       return(x-(i*y)); 
8950
....................       return(x-(i*y)); 
8951
....................    } 
8951
....................    } 
8952
....................    else 
8952
....................    else 
8953
....................    { 
8953
....................    { 
8954
....................    #ifdef _ERRNO 
8954
....................    #ifdef _ERRNO 
8955
....................    { 
8955
....................    { 
8956
....................       errno=EDOM; 
8956
....................       errno=EDOM; 
8957
....................    } 
8957
....................    } 
8958
....................    #endif 
8958
....................    #endif 
8959
....................    } 
8959
....................    } 
8960
.................... } 
8960
.................... } 
8961
.................... #endif 
8961
.................... #endif 
8962
.................... //////////////////// Exponential and logarithmic functions //////////////////// 
8962
.................... //////////////////// Exponential and logarithmic functions //////////////////// 
8963
.................... //////////////////////////////////////////////////////////////////////////// 
8963
.................... //////////////////////////////////////////////////////////////////////////// 
8964
.................... //   float exp(float x) 
8964
.................... //   float exp(float x) 
8965
.................... //////////////////////////////////////////////////////////////////////////// 
8965
.................... //////////////////////////////////////////////////////////////////////////// 
8966
.................... // Description : returns the value (e^x) 
8966
.................... // Description : returns the value (e^x) 
8967
.................... // Date : N/A 
8967
.................... // Date : N/A 
8968
.................... // 
8968
.................... // 
8969
.................... #define LN2 0.6931471805599453 
8969
.................... #define LN2 0.6931471805599453 
8970
....................  
8970
....................  
8971
.................... float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093, 
8971
.................... float const pe[6] = {0.000207455774, 0.00127100575, 0.00965065093, 
8972
....................                      0.0554965651,  0.240227138,  0.693147172}; 
8972
....................                      0.0554965651,  0.240227138,  0.693147172}; 
8973
....................  
8973
....................  
8974
....................  
8974
....................  
8975
.................... float32 exp(float32 x) 
8975
.................... float32 exp(float32 x) 
8976
.................... { 
8976
.................... { 
8977
....................    float32 y, res, r; 
8977
....................    float32 y, res, r; 
8978
....................    #if defined(__PCD__) 
8978
....................    #if defined(__PCD__) 
8979
....................    int8 data1; 
8979
....................    int8 data1; 
8980
....................    #endif 
8980
....................    #endif 
8981
....................    signed int8 n; 
8981
....................    signed int8 n; 
8982
....................    int1 s; 
8982
....................    int1 s; 
8983
....................    #ifdef _ERRNO 
8983
....................    #ifdef _ERRNO 
8984
....................    if(x > 88.722838) 
8984
....................    if(x > 88.722838) 
8985
....................    { 
8985
....................    { 
8986
....................       errno=ERANGE; 
8986
....................       errno=ERANGE; 
8987
....................       return(0); 
8987
....................       return(0); 
8988
....................    } 
8988
....................    } 
8989
....................    #endif 
8989
....................    #endif 
8990
....................    n = (signed int16)(x/LN2); 
8990
....................    n = (signed int16)(x/LN2); 
8991
....................    s = 0; 
8991
....................    s = 0; 
8992
....................    y = x; 
8992
....................    y = x; 
8993
....................  
8993
....................  
8994
....................    if (x < 0) 
8994
....................    if (x < 0) 
8995
....................    { 
8995
....................    { 
8996
....................       s = 1; 
8996
....................       s = 1; 
8997
....................       n = -n; 
8997
....................       n = -n; 
8998
....................       y = -y; 
8998
....................       y = -y; 
8999
....................    } 
8999
....................    } 
9000
....................  
9000
....................  
9001
....................    res = 0.0; 
9001
....................    res = 0.0; 
9002
.................... #if !defined(__PCD__) 
9002
.................... #if !defined(__PCD__) 
9003
....................    *((unsigned int8 *)(&res)) = n + 0x7F; 
9003
....................    *((unsigned int8 *)(&res)) = n + 0x7F; 
9004
.................... #endif 
9004
.................... #endif 
9005
....................  
9005
....................  
9006
.................... #if defined(__PCD__)  // Takes care of IEEE format for PCD 
9006
.................... #if defined(__PCD__)  // Takes care of IEEE format for PCD 
9007
....................    data1 = n+0x7F; 
9007
....................    data1 = n+0x7F; 
9008
....................    if(bit_test(data1,0)) 
9008
....................    if(bit_test(data1,0)) 
9009
....................    bit_set(*(((unsigned int8 *)(&res)+2)),7); 
9009
....................    bit_set(*(((unsigned int8 *)(&res)+2)),7); 
9010
....................    rotate_right(&data1,1); 
9010
....................    rotate_right(&data1,1); 
9011
....................    bit_clear(data1,7); 
9011
....................    bit_clear(data1,7); 
9012
....................    *(((unsigned int8 *)(&res)+3)) = data1; 
9012
....................    *(((unsigned int8 *)(&res)+3)) = data1; 
9013
.................... #endif 
9013
.................... #endif 
9014
....................  
9014
....................  
9015
....................    y = y/LN2 - (float32)n; 
9015
....................    y = y/LN2 - (float32)n; 
9016
....................  
9016
....................  
9017
....................    r = pe[0]*y + pe[1]; 
9017
....................    r = pe[0]*y + pe[1]; 
9018
....................    r = r*y + pe[2]; 
9018
....................    r = r*y + pe[2]; 
9019
....................    r = r*y + pe[3]; 
9019
....................    r = r*y + pe[3]; 
9020
....................    r = r*y + pe[4]; 
9020
....................    r = r*y + pe[4]; 
9021
....................    r = r*y + pe[5]; 
9021
....................    r = r*y + pe[5]; 
9022
....................  
9022
....................  
9023
....................    res = res*(1.0 + y*r); 
9023
....................    res = res*(1.0 + y*r); 
9024
....................  
9024
....................  
9025
....................    if (s) 
9025
....................    if (s) 
9026
....................       res = 1.0/res; 
9026
....................       res = 1.0/res; 
9027
....................    return(res); 
9027
....................    return(res); 
9028
.................... } 
9028
.................... } 
9029
....................  
9029
....................  
9030
....................  
9030
....................  
9031
.................... //Overloaded function for exp() for PCD 
9031
.................... //Overloaded function for exp() for PCD 
9032
.................... // Overloaded function exp() for data type - Float48 
9032
.................... // Overloaded function exp() for data type - Float48 
9033
.................... #if defined(__PCD__) 
9033
.................... #if defined(__PCD__) 
9034
.................... float48 exp(float48 x) 
9034
.................... float48 exp(float48 x) 
9035
.................... { 
9035
.................... { 
9036
....................    float48 y, res, r; 
9036
....................    float48 y, res, r; 
9037
....................    int8 data1; 
9037
....................    int8 data1; 
9038
....................    signed int8 n; 
9038
....................    signed int8 n; 
9039
....................    int1 s; 
9039
....................    int1 s; 
9040
....................    #ifdef _ERRNO 
9040
....................    #ifdef _ERRNO 
9041
....................    if(x > 88.722838) 
9041
....................    if(x > 88.722838) 
9042
....................    { 
9042
....................    { 
9043
....................       errno=ERANGE; 
9043
....................       errno=ERANGE; 
9044
....................       return(0); 
9044
....................       return(0); 
9045
....................    } 
9045
....................    } 
9046
....................    #endif 
9046
....................    #endif 
9047
....................    n = (signed int16)(x/LN2); 
9047
....................    n = (signed int16)(x/LN2); 
9048
....................    s = 0; 
9048
....................    s = 0; 
9049
....................    y = x; 
9049
....................    y = x; 
9050
....................  
9050
....................  
9051
....................    if (x < 0) 
9051
....................    if (x < 0) 
9052
....................    { 
9052
....................    { 
9053
....................       s = 1; 
9053
....................       s = 1; 
9054
....................       n = -n; 
9054
....................       n = -n; 
9055
....................       y = -y; 
9055
....................       y = -y; 
9056
....................    } 
9056
....................    } 
9057
....................  
9057
....................  
9058
....................    res = 0.0; 
9058
....................    res = 0.0; 
9059
....................  
9059
....................  
9060
....................    data1 = n+0x7F; 
9060
....................    data1 = n+0x7F; 
9061
....................    if(bit_test(data1,0)) 
9061
....................    if(bit_test(data1,0)) 
9062
....................    bit_set(*(((unsigned int8 *)(&res)+4)),7); 
9062
....................    bit_set(*(((unsigned int8 *)(&res)+4)),7); 
9063
....................    rotate_right(&data1,1); 
9063
....................    rotate_right(&data1,1); 
9064
....................    bit_clear(data1,7); 
9064
....................    bit_clear(data1,7); 
9065
....................    *(((unsigned int8 *)(&res)+5)) = data1; 
9065
....................    *(((unsigned int8 *)(&res)+5)) = data1; 
9066
....................  
9066
....................  
9067
....................    y = y/LN2 - (float48)n; 
9067
....................    y = y/LN2 - (float48)n; 
9068
....................  
9068
....................  
9069
....................    r = pe[0]*y + pe[1]; 
9069
....................    r = pe[0]*y + pe[1]; 
9070
....................    r = r*y + pe[2]; 
9070
....................    r = r*y + pe[2]; 
9071
....................    r = r*y + pe[3]; 
9071
....................    r = r*y + pe[3]; 
9072
....................    r = r*y + pe[4]; 
9072
....................    r = r*y + pe[4]; 
9073
....................    r = r*y + pe[5]; 
9073
....................    r = r*y + pe[5]; 
9074
....................  
9074
....................  
9075
....................    res = res*(1.0 + y*r); 
9075
....................    res = res*(1.0 + y*r); 
9076
....................  
9076
....................  
9077
....................    if (s) 
9077
....................    if (s) 
9078
....................       res = 1.0/res; 
9078
....................       res = 1.0/res; 
9079
....................    return(res); 
9079
....................    return(res); 
9080
.................... } 
9080
.................... } 
9081
....................  
9081
....................  
9082
.................... // Overloaded function exp() for data type - Float64 
9082
.................... // Overloaded function exp() for data type - Float64 
9083
.................... float64 exp(float64 x) 
9083
.................... float64 exp(float64 x) 
9084
.................... { 
9084
.................... { 
9085
....................    float64 y, res, r; 
9085
....................    float64 y, res, r; 
9086
....................    unsigned int16 data1, data2; 
9086
....................    unsigned int16 data1, data2; 
9087
....................    unsigned int16 *p; 
9087
....................    unsigned int16 *p; 
9088
....................    signed int16 n; 
9088
....................    signed int16 n; 
9089
....................    int1 s; 
9089
....................    int1 s; 
9090
....................    #ifdef _ERRNO 
9090
....................    #ifdef _ERRNO 
9091
....................    if(x > 709.7827128) 
9091
....................    if(x > 709.7827128) 
9092
....................    { 
9092
....................    { 
9093
....................       errno=ERANGE; 
9093
....................       errno=ERANGE; 
9094
....................       return(0); 
9094
....................       return(0); 
9095
....................    } 
9095
....................    } 
9096
....................    #endif 
9096
....................    #endif 
9097
....................    n = (signed int16)(x/LN2); 
9097
....................    n = (signed int16)(x/LN2); 
9098
....................    s = 0; 
9098
....................    s = 0; 
9099
....................    y = x; 
9099
....................    y = x; 
9100
....................  
9100
....................  
9101
....................    if (x < 0) 
9101
....................    if (x < 0) 
9102
....................    { 
9102
....................    { 
9103
....................       s = 1; 
9103
....................       s = 1; 
9104
....................       n = -n; 
9104
....................       n = -n; 
9105
....................       y = -y; 
9105
....................       y = -y; 
9106
....................    } 
9106
....................    } 
9107
....................  
9107
....................  
9108
....................    res = 0.0; 
9108
....................    res = 0.0; 
9109
....................  
9109
....................  
9110
.................... #if !defined(__PCD__) 
9110
.................... #if !defined(__PCD__) 
9111
....................    *((unsigned int16 *)(&res)) = n + 0x7F; 
9111
....................    *((unsigned int16 *)(&res)) = n + 0x7F; 
9112
.................... #endif 
9112
.................... #endif 
9113
....................    p= (((unsigned int16 *)(&res))+3); 
9113
....................    p= (((unsigned int16 *)(&res))+3); 
9114
....................    data1 = *p; 
9114
....................    data1 = *p; 
9115
....................    data2 = *p;    
9115
....................    data2 = *p;    
9116
....................    data1 = n + 0x3FF; 
9116
....................    data1 = n + 0x3FF; 
9117
....................    data1 = data1 <<4; 
9117
....................    data1 = data1 <<4; 
9118
....................    if(bit_test(data2,15)) 
9118
....................    if(bit_test(data2,15)) 
9119
....................    bit_set(data1,15); 
9119
....................    bit_set(data1,15); 
9120
....................    data2 = data2 & 0x000F; 
9120
....................    data2 = data2 & 0x000F; 
9121
....................    data1 ^= data2; 
9121
....................    data1 ^= data2; 
9122
....................  
9122
....................  
9123
....................    *(((unsigned int16 *)(&res)+3)) = data1; 
9123
....................    *(((unsigned int16 *)(&res)+3)) = data1; 
9124
....................  
9124
....................  
9125
....................  
9125
....................  
9126
....................    y = y/LN2 - (float64)n; 
9126
....................    y = y/LN2 - (float64)n; 
9127
....................  
9127
....................  
9128
....................    r = pe[0]*y + pe[1]; 
9128
....................    r = pe[0]*y + pe[1]; 
9129
....................    r = r*y + pe[2]; 
9129
....................    r = r*y + pe[2]; 
9130
....................    r = r*y + pe[3]; 
9130
....................    r = r*y + pe[3]; 
9131
....................    r = r*y + pe[4]; 
9131
....................    r = r*y + pe[4]; 
9132
....................    r = r*y + pe[5]; 
9132
....................    r = r*y + pe[5]; 
9133
....................  
9133
....................  
9134
....................    res = res*(1.0 + y*r); 
9134
....................    res = res*(1.0 + y*r); 
9135
....................  
9135
....................  
9136
....................    if (s) 
9136
....................    if (s) 
9137
....................       res = 1.0/res; 
9137
....................       res = 1.0/res; 
9138
....................    return(res); 
9138
....................    return(res); 
9139
.................... } 
9139
.................... } 
9140
....................  
9140
....................  
9141
.................... #ENDIF 
9141
.................... #ENDIF 
9142
....................  
9142
....................  
9143
....................  
9143
....................  
9144
.................... /************************************************************/ 
9144
.................... /************************************************************/ 
9145
....................  
9145
....................  
9146
.................... float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
9146
.................... float32 const pl[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
9147
.................... float32 const ql[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
9147
.................... float32 const ql[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
9148
....................  
9148
....................  
9149
.................... //////////////////////////////////////////////////////////////////////////// 
9149
.................... //////////////////////////////////////////////////////////////////////////// 
9150
.................... //   float log(float x) 
9150
.................... //   float log(float x) 
9151
.................... //////////////////////////////////////////////////////////////////////////// 
9151
.................... //////////////////////////////////////////////////////////////////////////// 
9152
.................... // Description : returns the the natural log of x 
9152
.................... // Description : returns the the natural log of x 
9153
.................... // Date : N/A 
9153
.................... // Date : N/A 
9154
.................... // 
9154
.................... // 
9155
.................... float32 log(float32 x) 
9155
.................... float32 log(float32 x) 
9156
.................... { 
9156
.................... { 
9157
....................    float32 y, res, r, y2; 
9157
....................    float32 y, res, r, y2; 
9158
....................    #if defined(__PCD__) 
9158
....................    #if defined(__PCD__) 
9159
....................    unsigned int8  data1,data2; 
9159
....................    unsigned int8  data1,data2; 
9160
....................    #endif 
9160
....................    #endif 
9161
....................    signed int8 n; 
9161
....................    signed int8 n; 
9162
....................    #ifdef _ERRNO 
9162
....................    #ifdef _ERRNO 
9163
....................    if(x <0) 
9163
....................    if(x <0) 
9164
....................    { 
9164
....................    { 
9165
....................       errno=EDOM; 
9165
....................       errno=EDOM; 
9166
....................    } 
9166
....................    } 
9167
....................    if(x ==0) 
9167
....................    if(x ==0) 
9168
....................    { 
9168
....................    { 
9169
....................       errno=ERANGE; 
9169
....................       errno=ERANGE; 
9170
....................       return(0); 
9170
....................       return(0); 
9171
....................    } 
9171
....................    } 
9172
....................    #endif 
9172
....................    #endif 
9173
....................    y = x; 
9173
....................    y = x; 
9174
....................  
9174
....................  
9175
....................    if (y != 1.0) 
9175
....................    if (y != 1.0) 
9176
....................    { 
9176
....................    { 
9177
.................... #if !defined(__PCD__) 
9177
.................... #if !defined(__PCD__) 
9178
....................     *((unsigned int8 *)(&y)) = 0x7E;  
9178
....................     *((unsigned int8 *)(&y)) = 0x7E;  
9179
.................... #endif 
9179
.................... #endif 
9180
....................  
9180
....................  
9181
.................... #if defined(__PCD__) // Takes care of IEEE format 
9181
.................... #if defined(__PCD__) // Takes care of IEEE format 
9182
....................    data2 = *(((unsigned int8 *)(&y))+3); 
9182
....................    data2 = *(((unsigned int8 *)(&y))+3); 
9183
....................    *(((unsigned int8 *)(&y))+3) = 0x3F; 
9183
....................    *(((unsigned int8 *)(&y))+3) = 0x3F; 
9184
....................    data1 = *(((unsigned int8 *)(&y))+2); 
9184
....................    data1 = *(((unsigned int8 *)(&y))+2); 
9185
....................    bit_clear(data1,7); 
9185
....................    bit_clear(data1,7); 
9186
....................    *(((unsigned int8 *)(&y))+2) = data1; 
9186
....................    *(((unsigned int8 *)(&y))+2) = data1; 
9187
....................    if(bit_test(data2,7)) 
9187
....................    if(bit_test(data2,7)) 
9188
....................    bit_set(*(((unsigned int8 *)(&y))+3),7); 
9188
....................    bit_set(*(((unsigned int8 *)(&y))+3),7); 
9189
.................... #endif 
9189
.................... #endif 
9190
....................  
9190
....................  
9191
....................       y = (y - 1.0)/(y + 1.0); 
9191
....................       y = (y - 1.0)/(y + 1.0); 
9192
....................  
9192
....................  
9193
....................       y2=y*y; 
9193
....................       y2=y*y; 
9194
....................  
9194
....................  
9195
....................       res = pl[0]*y2 + pl[1]; 
9195
....................       res = pl[0]*y2 + pl[1]; 
9196
....................       res = res*y2 + pl[2]; 
9196
....................       res = res*y2 + pl[2]; 
9197
....................       res = res*y2 + pl[3]; 
9197
....................       res = res*y2 + pl[3]; 
9198
....................  
9198
....................  
9199
....................       r = ql[0]*y2 + ql[1]; 
9199
....................       r = ql[0]*y2 + ql[1]; 
9200
....................       r = r*y2 + ql[2]; 
9200
....................       r = r*y2 + ql[2]; 
9201
....................       r = r*y2 + ql[3]; 
9201
....................       r = r*y2 + ql[3]; 
9202
....................  
9202
....................  
9203
....................       res = y*res/r; 
9203
....................       res = y*res/r; 
9204
.................... #if !defined(__PCD__) 
9204
.................... #if !defined(__PCD__) 
9205
....................       n = *((unsigned int8 *)(&x)) - 0x7E; 
9205
....................       n = *((unsigned int8 *)(&x)) - 0x7E; 
9206
.................... #endif 
9206
.................... #endif 
9207
.................... #if defined(__PCD__)  
9207
.................... #if defined(__PCD__)  
9208
....................     data1 = *(((unsigned int8 *)(&x)+3)); 
9208
....................     data1 = *(((unsigned int8 *)(&x)+3)); 
9209
....................     rotate_left(&data1,1); 
9209
....................     rotate_left(&data1,1); 
9210
....................     data2 = *(((unsigned int8 *)(&x)+2)); 
9210
....................     data2 = *(((unsigned int8 *)(&x)+2)); 
9211
....................     if(bit_test (data2,7)) 
9211
....................     if(bit_test (data2,7)) 
9212
....................       bit_set(data1,0); 
9212
....................       bit_set(data1,0); 
9213
....................     n = data1 - 0x7E; 
9213
....................     n = data1 - 0x7E; 
9214
.................... #endif 
9214
.................... #endif 
9215
....................  
9215
....................  
9216
....................       if (n<0)  
9216
....................       if (n<0)  
9217
....................          r = -(float32)-n; 
9217
....................          r = -(float32)-n; 
9218
....................       else 
9218
....................       else 
9219
....................          r = (float32)n; 
9219
....................          r = (float32)n; 
9220
....................  
9220
....................  
9221
....................       res += r*LN2; 
9221
....................       res += r*LN2; 
9222
....................    } 
9222
....................    } 
9223
....................  
9223
....................  
9224
....................    else 
9224
....................    else 
9225
....................       res = 0.0; 
9225
....................       res = 0.0; 
9226
....................  
9226
....................  
9227
....................    return(res); 
9227
....................    return(res); 
9228
.................... } 
9228
.................... } 
9229
....................  
9229
....................  
9230
.................... //Overloaded function for log() for PCD 
9230
.................... //Overloaded function for log() for PCD 
9231
.................... // Overloaded function log() for data type - Float48 
9231
.................... // Overloaded function log() for data type - Float48 
9232
.................... #if defined(__PCD__) 
9232
.................... #if defined(__PCD__) 
9233
.................... float48 log(float48 x) 
9233
.................... float48 log(float48 x) 
9234
.................... { 
9234
.................... { 
9235
....................    float48 y, res, r, y2; 
9235
....................    float48 y, res, r, y2; 
9236
....................    unsigned int8  data1,data2; 
9236
....................    unsigned int8  data1,data2; 
9237
....................    signed int8 n; 
9237
....................    signed int8 n; 
9238
....................    #ifdef _ERRNO 
9238
....................    #ifdef _ERRNO 
9239
....................    if(x <0) 
9239
....................    if(x <0) 
9240
....................    { 
9240
....................    { 
9241
....................       errno=EDOM; 
9241
....................       errno=EDOM; 
9242
....................    } 
9242
....................    } 
9243
....................    if(x ==0) 
9243
....................    if(x ==0) 
9244
....................    { 
9244
....................    { 
9245
....................       errno=ERANGE; 
9245
....................       errno=ERANGE; 
9246
....................       return(0); 
9246
....................       return(0); 
9247
....................    } 
9247
....................    } 
9248
....................    #endif 
9248
....................    #endif 
9249
....................    y = x; 
9249
....................    y = x; 
9250
....................  
9250
....................  
9251
....................    if (y != 1.0) 
9251
....................    if (y != 1.0) 
9252
....................    { 
9252
....................    { 
9253
....................     
9253
....................     
9254
....................    #if !defined(__PCD__) 
9254
....................    #if !defined(__PCD__) 
9255
....................        *((unsigned int8 *)(&y)) = 0x7E;  
9255
....................        *((unsigned int8 *)(&y)) = 0x7E;  
9256
....................    #endif 
9256
....................    #endif 
9257
....................       data2 = *(((unsigned int8 *)(&y))+5); 
9257
....................       data2 = *(((unsigned int8 *)(&y))+5); 
9258
....................       *(((unsigned int8 *)(&y))+5) = 0x3F; 
9258
....................       *(((unsigned int8 *)(&y))+5) = 0x3F; 
9259
....................       data1 = *(((unsigned int8 *)(&y))+4); 
9259
....................       data1 = *(((unsigned int8 *)(&y))+4); 
9260
....................       bit_clear(data1,7); 
9260
....................       bit_clear(data1,7); 
9261
....................       *(((unsigned int8 *)(&y))+4) = data1; 
9261
....................       *(((unsigned int8 *)(&y))+4) = data1; 
9262
....................    
9262
....................    
9263
....................       if(bit_test(data2,7)) 
9263
....................       if(bit_test(data2,7)) 
9264
....................          bit_set(*(((unsigned int8 *)(&y))+4),7); 
9264
....................          bit_set(*(((unsigned int8 *)(&y))+4),7); 
9265
....................       y = (y - 1.0)/(y + 1.0); 
9265
....................       y = (y - 1.0)/(y + 1.0); 
9266
....................  
9266
....................  
9267
....................       y2=y*y; 
9267
....................       y2=y*y; 
9268
....................  
9268
....................  
9269
....................       res = pl[0]*y2 + pl[1]; 
9269
....................       res = pl[0]*y2 + pl[1]; 
9270
....................       res = res*y2 + pl[2]; 
9270
....................       res = res*y2 + pl[2]; 
9271
....................       res = res*y2 + pl[3]; 
9271
....................       res = res*y2 + pl[3]; 
9272
....................  
9272
....................  
9273
....................       r = ql[0]*y2 + ql[1]; 
9273
....................       r = ql[0]*y2 + ql[1]; 
9274
....................       r = r*y2 + ql[2]; 
9274
....................       r = r*y2 + ql[2]; 
9275
....................       r = r*y2 + ql[3]; 
9275
....................       r = r*y2 + ql[3]; 
9276
....................  
9276
....................  
9277
....................       res = y*res/r; 
9277
....................       res = y*res/r; 
9278
....................  
9278
....................  
9279
....................     data1 = *(((unsigned int8 *)(&x)+5)); 
9279
....................     data1 = *(((unsigned int8 *)(&x)+5)); 
9280
....................     rotate_left(&data1,1); 
9280
....................     rotate_left(&data1,1); 
9281
....................     data2 = *(((unsigned int8 *)(&x)+4)); 
9281
....................     data2 = *(((unsigned int8 *)(&x)+4)); 
9282
....................     if(bit_test (data2,7)) 
9282
....................     if(bit_test (data2,7)) 
9283
....................        bit_set(data1,0); 
9283
....................        bit_set(data1,0); 
9284
....................       
9284
....................       
9285
....................     n = data1 - 0x7E; 
9285
....................     n = data1 - 0x7E; 
9286
....................  
9286
....................  
9287
....................       if (n<0) 
9287
....................       if (n<0) 
9288
....................          r = -(float48)-n; 
9288
....................          r = -(float48)-n; 
9289
....................       else 
9289
....................       else 
9290
....................          r = (float48)n; 
9290
....................          r = (float48)n; 
9291
....................  
9291
....................  
9292
....................       res += r*LN2; 
9292
....................       res += r*LN2; 
9293
....................    } 
9293
....................    } 
9294
....................  
9294
....................  
9295
....................    else 
9295
....................    else 
9296
....................       res = 0.0; 
9296
....................       res = 0.0; 
9297
....................  
9297
....................  
9298
....................    return(res); 
9298
....................    return(res); 
9299
.................... } 
9299
.................... } 
9300
....................  
9300
....................  
9301
.................... // Overloaded function log() for data type - Float48 
9301
.................... // Overloaded function log() for data type - Float48 
9302
.................... #if defined(__PCD__) 
9302
.................... #if defined(__PCD__) 
9303
.................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
9303
.................... float32 const pl_64[4] = {0.45145214, -9.0558803, 26.940971, -19.860189}; 
9304
.................... float32 const ql_64[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
9304
.................... float32 const ql_64[4] = {1.0000000,  -8.1354259, 16.780517, -9.9300943}; 
9305
.................... #endif 
9305
.................... #endif 
9306
.................... float64 log(float64 x) 
9306
.................... float64 log(float64 x) 
9307
.................... { 
9307
.................... { 
9308
....................    float64 y, res, r, y2; 
9308
....................    float64 y, res, r, y2; 
9309
....................    unsigned int16  data1,data2; 
9309
....................    unsigned int16  data1,data2; 
9310
....................    unsigned int16 *p; 
9310
....................    unsigned int16 *p; 
9311
....................    signed int16 n; 
9311
....................    signed int16 n; 
9312
....................    #ifdef _ERRNO 
9312
....................    #ifdef _ERRNO 
9313
....................    if(x <0) 
9313
....................    if(x <0) 
9314
....................    { 
9314
....................    { 
9315
....................       errno=EDOM; 
9315
....................       errno=EDOM; 
9316
....................    } 
9316
....................    } 
9317
....................    if(x ==0) 
9317
....................    if(x ==0) 
9318
....................    { 
9318
....................    { 
9319
....................       errno=ERANGE; 
9319
....................       errno=ERANGE; 
9320
....................       return(0); 
9320
....................       return(0); 
9321
....................    } 
9321
....................    } 
9322
....................    #endif 
9322
....................    #endif 
9323
....................    y = x; 
9323
....................    y = x; 
9324
....................  
9324
....................  
9325
....................    if (y != 1.0) 
9325
....................    if (y != 1.0) 
9326
....................    { 
9326
....................    { 
9327
....................    #if !defined(__PCD__) 
9327
....................    #if !defined(__PCD__) 
9328
....................        *((unsigned int8 *)(&y)) = 0x7E;  
9328
....................        *((unsigned int8 *)(&y)) = 0x7E;  
9329
....................    #endif 
9329
....................    #endif 
9330
....................       p= (((unsigned int16 *)(&y))+3); 
9330
....................       p= (((unsigned int16 *)(&y))+3); 
9331
....................       data1 = *p; 
9331
....................       data1 = *p; 
9332
....................       data2 = *p; 
9332
....................       data2 = *p; 
9333
....................       data1 = 0x3FE; 
9333
....................       data1 = 0x3FE; 
9334
....................       data1 = data1 <<4; 
9334
....................       data1 = data1 <<4; 
9335
....................       if(bit_test (data2,15)) 
9335
....................       if(bit_test (data2,15)) 
9336
....................       bit_set(data1,15); 
9336
....................       bit_set(data1,15); 
9337
....................       data2 = data2 & 0x000F; 
9337
....................       data2 = data2 & 0x000F; 
9338
....................       data1 ^=data2; 
9338
....................       data1 ^=data2; 
9339
....................  
9339
....................  
9340
....................       *p = data1; 
9340
....................       *p = data1; 
9341
....................  
9341
....................  
9342
....................       y = (y - 1.0)/(y + 1.0); 
9342
....................       y = (y - 1.0)/(y + 1.0); 
9343
....................  
9343
....................  
9344
....................       y2=y*y; 
9344
....................       y2=y*y; 
9345
....................  
9345
....................  
9346
....................       res = pl_64[0]*y2 + pl_64[1]; 
9346
....................       res = pl_64[0]*y2 + pl_64[1]; 
9347
....................       res = res*y2 + pl_64[2]; 
9347
....................       res = res*y2 + pl_64[2]; 
9348
....................       res = res*y2 + pl_64[3]; 
9348
....................       res = res*y2 + pl_64[3]; 
9349
....................  
9349
....................  
9350
....................       r = ql_64[0]*y2 + ql_64[1]; 
9350
....................       r = ql_64[0]*y2 + ql_64[1]; 
9351
....................       r = r*y2 + ql_64[2]; 
9351
....................       r = r*y2 + ql_64[2]; 
9352
....................       r = r*y2 + ql_64[3]; 
9352
....................       r = r*y2 + ql_64[3]; 
9353
....................  
9353
....................  
9354
....................       res = y*res/r; 
9354
....................       res = y*res/r; 
9355
....................   
9355
....................   
9356
....................       p= (((unsigned int16 *)(&x))+3); 
9356
....................       p= (((unsigned int16 *)(&x))+3); 
9357
....................       data1 = *p; 
9357
....................       data1 = *p; 
9358
....................       bit_clear(data1,15); 
9358
....................       bit_clear(data1,15); 
9359
....................       data1 = data1 >>4;     
9359
....................       data1 = data1 >>4;     
9360
....................       n = data1 - 0x3FE; 
9360
....................       n = data1 - 0x3FE; 
9361
....................  
9361
....................  
9362
....................  
9362
....................  
9363
....................       if (n<0) 
9363
....................       if (n<0) 
9364
....................          r = -(float64)-n; 
9364
....................          r = -(float64)-n; 
9365
....................       else 
9365
....................       else 
9366
....................          r = (float64)n; 
9366
....................          r = (float64)n; 
9367
....................  
9367
....................  
9368
....................       res += r*LN2; 
9368
....................       res += r*LN2; 
9369
....................    } 
9369
....................    } 
9370
....................  
9370
....................  
9371
....................    else 
9371
....................    else 
9372
....................       res = 0.0; 
9372
....................       res = 0.0; 
9373
....................  
9373
....................  
9374
....................    return(res); 
9374
....................    return(res); 
9375
.................... } 
9375
.................... } 
9376
.................... #endif 
9376
.................... #endif 
9377
....................  
9377
....................  
9378
....................  
9378
....................  
9379
.................... #define LN10 2.3025850929940456 
9379
.................... #define LN10 2.3025850929940456 
9380
....................  
9380
....................  
9381
.................... //////////////////////////////////////////////////////////////////////////// 
9381
.................... //////////////////////////////////////////////////////////////////////////// 
9382
.................... //   float log10(float x) 
9382
.................... //   float log10(float x) 
9383
.................... //////////////////////////////////////////////////////////////////////////// 
9383
.................... //////////////////////////////////////////////////////////////////////////// 
9384
.................... // Description : returns the the log base 10 of x 
9384
.................... // Description : returns the the log base 10 of x 
9385
.................... // Date : N/A 
9385
.................... // Date : N/A 
9386
.................... // 
9386
.................... // 
9387
.................... float32 log10(float32 x) 
9387
.................... float32 log10(float32 x) 
9388
.................... { 
9388
.................... { 
9389
....................    float32 r; 
9389
....................    float32 r; 
9390
....................  
9390
....................  
9391
....................    r = log(x); 
9391
....................    r = log(x); 
9392
....................    r = r/LN10; 
9392
....................    r = r/LN10; 
9393
....................    return(r); 
9393
....................    return(r); 
9394
.................... } 
9394
.................... } 
9395
....................  
9395
....................  
9396
.................... //Overloaded functions for log10() for PCD 
9396
.................... //Overloaded functions for log10() for PCD 
9397
.................... // Overloaded function log10() for data type - Float48 
9397
.................... // Overloaded function log10() for data type - Float48 
9398
.................... #if defined(__PCD__) 
9398
.................... #if defined(__PCD__) 
9399
.................... float48 log10(float48 x) 
9399
.................... float48 log10(float48 x) 
9400
.................... { 
9400
.................... { 
9401
....................    float48 r; 
9401
....................    float48 r; 
9402
....................  
9402
....................  
9403
....................    r = log(x); 
9403
....................    r = log(x); 
9404
....................    r = r/LN10; 
9404
....................    r = r/LN10; 
9405
....................    return(r); 
9405
....................    return(r); 
9406
.................... } 
9406
.................... } 
9407
....................  
9407
....................  
9408
.................... // Overloaded function log10() for data type - Float64 
9408
.................... // Overloaded function log10() for data type - Float64 
9409
.................... float64 log10(float64 x) 
9409
.................... float64 log10(float64 x) 
9410
.................... { 
9410
.................... { 
9411
....................    float64 r; 
9411
....................    float64 r; 
9412
....................  
9412
....................  
9413
....................    r = log(x); 
9413
....................    r = log(x); 
9414
....................    r = r/LN10; 
9414
....................    r = r/LN10; 
9415
....................    return(r); 
9415
....................    return(r); 
9416
.................... } 
9416
.................... } 
9417
.................... #endif 
9417
.................... #endif 
9418
.................... //////////////////////////////////////////////////////////////////////////// 
9418
.................... //////////////////////////////////////////////////////////////////////////// 
9419
.................... //   float modf(float x) 
9419
.................... //   float modf(float x) 
9420
.................... //////////////////////////////////////////////////////////////////////////// 
9420
.................... //////////////////////////////////////////////////////////////////////////// 
9421
.................... // Description :breaks the argument value int integral and fractional parts, 
9421
.................... // Description :breaks the argument value int integral and fractional parts, 
9422
.................... // ach of which have the same sign as the argument.  It stores the integral part 
9422
.................... // ach of which have the same sign as the argument.  It stores the integral part 
9423
.................... // as a float in the object pointed to by the iptr 
9423
.................... // as a float in the object pointed to by the iptr 
9424
.................... // Returns : returns the signed fractional part of value. 
9424
.................... // Returns : returns the signed fractional part of value. 
9425
.................... // Date : N/A 
9425
.................... // Date : N/A 
9426
.................... // 
9426
.................... // 
9427
....................  
9427
....................  
9428
.................... float32 modf(float32 value,float32 *iptr) 
9428
.................... float32 modf(float32 value,float32 *iptr) 
9429
.................... { 
9429
.................... { 
9430
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9430
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9431
....................    return(value - *iptr); 
9431
....................    return(value - *iptr); 
9432
.................... } 
9432
.................... } 
9433
.................... //Overloaded functions for modf() for PCD 
9433
.................... //Overloaded functions for modf() for PCD 
9434
.................... // Overloaded function modf() for data type - Float48 
9434
.................... // Overloaded function modf() for data type - Float48 
9435
.................... #if defined(__PCD__) 
9435
.................... #if defined(__PCD__) 
9436
.................... float48 modf(float48 value,float48 *iptr) 
9436
.................... float48 modf(float48 value,float48 *iptr) 
9437
.................... { 
9437
.................... { 
9438
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9438
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9439
....................    return(value - *iptr); 
9439
....................    return(value - *iptr); 
9440
.................... } 
9440
.................... } 
9441
.................... // Overloaded function modf() for data type - Float64 
9441
.................... // Overloaded function modf() for data type - Float64 
9442
.................... float64 modf(float64 value,float64 *iptr) 
9442
.................... float64 modf(float64 value,float64 *iptr) 
9443
.................... { 
9443
.................... { 
9444
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9444
....................    *iptr=(value < 0.0)? ceil(value): floor(value); 
9445
....................    return(value - *iptr); 
9445
....................    return(value - *iptr); 
9446
.................... } 
9446
.................... } 
9447
.................... #endif 
9447
.................... #endif 
9448
....................  
9448
....................  
9449
.................... //////////////////////////////////////////////////////////////////////////// 
9449
.................... //////////////////////////////////////////////////////////////////////////// 
9450
.................... //   float pwr(float x,float y) 
9450
.................... //   float pwr(float x,float y) 
9451
.................... //////////////////////////////////////////////////////////////////////////// 
9451
.................... //////////////////////////////////////////////////////////////////////////// 
9452
.................... // Description : returns the value (x^y) 
9452
.................... // Description : returns the value (x^y) 
9453
.................... // Date : N/A 
9453
.................... // Date : N/A 
9454
.................... // 
9454
.................... // 
9455
.................... float32 pwr(float32 x,float32 y) 
9455
.................... float32 pwr(float32 x,float32 y) 
9456
.................... { 
9456
.................... { 
9457
....................    if(x>=0) 
9457
....................    if(x>=0) 
9458
....................      return(  exp(y*log(x)) ); 
9458
....................      return(  exp(y*log(x)) ); 
9459
....................    else 
9459
....................    else 
9460
....................      return(  -exp(y*log(-x)) ); 
9460
....................      return(  -exp(y*log(-x)) ); 
9461
.................... } 
9461
.................... } 
9462
.................... //Overloaded functions for pwr() for PCD 
9462
.................... //Overloaded functions for pwr() for PCD 
9463
.................... // Overloaded function pwr() for data type - Float48 
9463
.................... // Overloaded function pwr() for data type - Float48 
9464
.................... #if defined(__PCD__) 
9464
.................... #if defined(__PCD__) 
9465
.................... float48 pwr(float48 x,float48 y) 
9465
.................... float48 pwr(float48 x,float48 y) 
9466
.................... { 
9466
.................... { 
9467
....................    if(x>=0) 
9467
....................    if(x>=0) 
9468
....................      return(  exp(y*log(x)) ); 
9468
....................      return(  exp(y*log(x)) ); 
9469
....................    else 
9469
....................    else 
9470
....................      return(  -exp(y*log(-x)) ); 
9470
....................      return(  -exp(y*log(-x)) ); 
9471
.................... } 
9471
.................... } 
9472
.................... // Overloaded function pwr() for data type - Float64 
9472
.................... // Overloaded function pwr() for data type - Float64 
9473
.................... float64 pwr(float64 x,float64 y) 
9473
.................... float64 pwr(float64 x,float64 y) 
9474
.................... { 
9474
.................... { 
9475
....................    if(x>=0) 
9475
....................    if(x>=0) 
9476
....................      return(  exp(y*log(x)) ); 
9476
....................      return(  exp(y*log(x)) ); 
9477
....................    else 
9477
....................    else 
9478
....................      return(  -exp(y*log(-x)) ); 
9478
....................      return(  -exp(y*log(-x)) ); 
9479
.................... } 
9479
.................... } 
9480
.................... #endif 
9480
.................... #endif 
9481
....................  
9481
....................  
9482
.................... //////////////////// Power functions //////////////////// 
9482
.................... //////////////////// Power functions //////////////////// 
9483
....................  
9483
....................  
9484
.................... //////////////////////////////////////////////////////////////////////////// 
9484
.................... //////////////////////////////////////////////////////////////////////////// 
9485
.................... //   float pow(float x,float y) 
9485
.................... //   float pow(float x,float y) 
9486
.................... //////////////////////////////////////////////////////////////////////////// 
9486
.................... //////////////////////////////////////////////////////////////////////////// 
9487
.................... // Description : returns the value (x^y) 
9487
.................... // Description : returns the value (x^y) 
9488
.................... // Date : N/A 
9488
.................... // Date : N/A 
9489
.................... // 
9489
.................... // 
9490
.................... float32 pow(float32 x,float32 y) 
9490
.................... float32 pow(float32 x,float32 y) 
9491
.................... { 
9491
.................... { 
9492
....................    if(x>=0) 
9492
....................    if(x>=0) 
9493
....................      return(  exp(y*log(x)) ); 
9493
....................      return(  exp(y*log(x)) ); 
9494
....................    else 
9494
....................    else 
9495
....................      return(  -exp(y*log(-x)) ); 
9495
....................      return(  -exp(y*log(-x)) ); 
9496
.................... } 
9496
.................... } 
9497
.................... //Overloaded functions for pow() for PCD 
9497
.................... //Overloaded functions for pow() for PCD 
9498
.................... // Overloaded function for pow() data type - Float48 
9498
.................... // Overloaded function for pow() data type - Float48 
9499
.................... #if defined(__PCD__) 
9499
.................... #if defined(__PCD__) 
9500
.................... float48 pow(float48 x,float48 y) 
9500
.................... float48 pow(float48 x,float48 y) 
9501
.................... { 
9501
.................... { 
9502
....................    if(x>=0) 
9502
....................    if(x>=0) 
9503
....................      return(  exp(y*log(x)) ); 
9503
....................      return(  exp(y*log(x)) ); 
9504
....................    else 
9504
....................    else 
9505
....................      return(  -exp(y*log(-x)) ); 
9505
....................      return(  -exp(y*log(-x)) ); 
9506
.................... } 
9506
.................... } 
9507
....................  
9507
....................  
9508
.................... // Overloaded function pow() for data type - Float64 
9508
.................... // Overloaded function pow() for data type - Float64 
9509
.................... float64 pow(float64 x,float64 y) 
9509
.................... float64 pow(float64 x,float64 y) 
9510
.................... { 
9510
.................... { 
9511
....................    if(x>=0) 
9511
....................    if(x>=0) 
9512
....................      return(  exp(y*log(x)) ); 
9512
....................      return(  exp(y*log(x)) ); 
9513
....................    else 
9513
....................    else 
9514
....................      return(  -exp(y*log(-x)) ); 
9514
....................      return(  -exp(y*log(-x)) ); 
9515
.................... } 
9515
.................... } 
9516
.................... #endif 
9516
.................... #endif 
9517
....................  
9517
....................  
9518
.................... //////////////////////////////////////////////////////////////////////////// 
9518
.................... //////////////////////////////////////////////////////////////////////////// 
9519
.................... //   float sqrt(float x) 
9519
.................... //   float sqrt(float x) 
9520
.................... //////////////////////////////////////////////////////////////////////////// 
9520
.................... //////////////////////////////////////////////////////////////////////////// 
9521
.................... // Description : returns the square root of x 
9521
.................... // Description : returns the square root of x 
9522
.................... // Date : N/A 
9522
.................... // Date : N/A 
9523
.................... // 
9523
.................... // 
9524
.................... float32 sqrt(float32 x) 
9524
.................... float32 sqrt(float32 x) 
9525
.................... { 
9525
.................... { 
9526
....................    float32 y, res; 
9526
....................    float32 y, res; 
9527
....................    #if defined(__PCD__) 
9527
....................    #if defined(__PCD__) 
9528
....................    unsigned int16 data1,data2; 
9528
....................    unsigned int16 data1,data2; 
9529
....................    #endif 
9529
....................    #endif 
9530
....................    BYTE *p; 
9530
....................    BYTE *p; 
9531
....................  
9531
....................  
9532
....................    #ifdef _ERRNO 
9532
....................    #ifdef _ERRNO 
9533
....................    if(x < 0) 
9533
....................    if(x < 0) 
9534
....................    { 
9534
....................    { 
9535
....................       errno=EDOM; 
9535
....................       errno=EDOM; 
9536
....................    } 
9536
....................    } 
9537
....................    #endif 
9537
....................    #endif 
9538
....................  
9538
....................  
9539
....................    if( x<=0.0) 
9539
....................    if( x<=0.0) 
9540
*
9540
*
9541
19C2:  MOVFF  6DF,6ED
9541
19C2:  MOVFF  6DF,6ED
9542
19C6:  MOVFF  6DE,6EC
9542
19C6:  MOVFF  6DE,6EC
9543
19CA:  MOVFF  6DD,6EB
9543
19CA:  MOVFF  6DD,6EB
9544
19CE:  MOVFF  6DC,6EA
9544
19CE:  MOVFF  6DC,6EA
9545
19D2:  MOVLB  6
9545
19D2:  MOVLB  6
9546
19D4:  CLRF   xF1
9546
19D4:  CLRF   xF1
9547
19D6:  CLRF   xF0
9547
19D6:  CLRF   xF0
9548
19D8:  CLRF   xEF
9548
19D8:  CLRF   xEF
9549
19DA:  CLRF   xEE
9549
19DA:  CLRF   xEE
9550
19DC:  MOVLB  0
9550
19DC:  MOVLB  0
9551
19DE:  RCALL  1948
9551
19DE:  RCALL  1948
9552
19E0:  BC    19E4
9552
19E0:  BC    19E4
9553
19E2:  BNZ   19EE
9553
19E2:  BNZ   19EE
9554
....................       return(0.0); 
9554
....................       return(0.0); 
9555
19E4:  CLRF   00
9555
19E4:  CLRF   00
9556
19E6:  CLRF   01
9556
19E6:  CLRF   01
9557
19E8:  CLRF   02
9557
19E8:  CLRF   02
9558
19EA:  CLRF   03
9558
19EA:  CLRF   03
9559
19EC:  BRA    1ADE
9559
19EC:  BRA    1ADE
9560
....................  
9560
....................  
9561
....................    y=x; 
9561
....................    y=x; 
9562
19EE:  MOVFF  6DF,6E3
9562
19EE:  MOVFF  6DF,6E3
9563
19F2:  MOVFF  6DE,6E2
9563
19F2:  MOVFF  6DE,6E2
9564
19F6:  MOVFF  6DD,6E1
9564
19F6:  MOVFF  6DD,6E1
9565
19FA:  MOVFF  6DC,6E0
9565
19FA:  MOVFF  6DC,6E0
9566
....................     
9566
....................     
9567
....................    #if !defined(__PCD__) 
9567
....................    #if !defined(__PCD__) 
9568
....................     p=&y; 
9568
....................     p=&y; 
9569
19FE:  MOVLW  06
9569
19FE:  MOVLW  06
9570
1A00:  MOVLB  6
9570
1A00:  MOVLB  6
9571
1A02:  MOVWF  xE9
9571
1A02:  MOVWF  xE9
9572
1A04:  MOVLW  E0
9572
1A04:  MOVLW  E0
9573
1A06:  MOVWF  xE8
9573
1A06:  MOVWF  xE8
9574
....................    (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); 
9574
....................    (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); 
9575
1A08:  MOVFF  6E8,FE9
9575
1A08:  MOVFF  6E8,FE9
9576
1A0C:  MOVFF  6E9,FEA
9576
1A0C:  MOVFF  6E9,FEA
9577
1A10:  MOVF   FEF,W
9577
1A10:  MOVF   FEF,W
9578
1A12:  CLRF   xED
9578
1A12:  CLRF   xED
9579
1A14:  MOVWF  xEC
9579
1A14:  MOVWF  xEC
9580
1A16:  MOVLW  7F
9580
1A16:  MOVLW  7F
9581
1A18:  ADDWF  xEC,F
9581
1A18:  ADDWF  xEC,F
9582
1A1A:  MOVLW  00
9582
1A1A:  MOVLW  00
9583
1A1C:  ADDWFC xED,F
9583
1A1C:  ADDWFC xED,F
9584
1A1E:  BCF    FD8.0
9584
1A1E:  BCF    FD8.0
9585
1A20:  RRCF   xED,W
9585
1A20:  RRCF   xED,W
9586
1A22:  RRCF   xEC,W
9586
1A22:  RRCF   xEC,W
9587
1A24:  MOVFF  6E9,FEA
9587
1A24:  MOVFF  6E9,FEA
9588
1A28:  MOVFF  6E8,FE9
9588
1A28:  MOVFF  6E8,FE9
9589
1A2C:  MOVWF  FEF
9589
1A2C:  MOVWF  FEF
9590
....................    #endif 
9590
....................    #endif 
9591
....................     
9591
....................     
9592
....................    #if defined(__PCD__) 
9592
....................    #if defined(__PCD__) 
9593
....................     p = (((unsigned int8 *)(&y))+3); 
9593
....................     p = (((unsigned int8 *)(&y))+3); 
9594
....................     data1 = *(((unsigned int8 *)(&y))+3); 
9594
....................     data1 = *(((unsigned int8 *)(&y))+3); 
9595
....................     data2 = *(((unsigned int8 *)(&y))+2); 
9595
....................     data2 = *(((unsigned int8 *)(&y))+2); 
9596
....................     rotate_left(&data1,1);     
9596
....................     rotate_left(&data1,1);     
9597
....................     if(bit_test(data2,7))     
9597
....................     if(bit_test(data2,7))     
9598
....................     bit_set(data1,0);     
9598
....................     bit_set(data1,0);     
9599
....................     data1 = ((data1+127) >>1); 
9599
....................     data1 = ((data1+127) >>1); 
9600
....................     bit_clear(data2,7); 
9600
....................     bit_clear(data2,7); 
9601
....................     if(bit_test(data1,0)) 
9601
....................     if(bit_test(data1,0)) 
9602
....................     bit_set(data2,7); 
9602
....................     bit_set(data2,7); 
9603
....................     data1 = data1 >>1; 
9603
....................     data1 = data1 >>1; 
9604
....................     *(((unsigned int8 *)(&y))+3) = data1; 
9604
....................     *(((unsigned int8 *)(&y))+3) = data1; 
9605
....................     *(((unsigned int8 *)(&y))+2) = data2; 
9605
....................     *(((unsigned int8 *)(&y))+2) = data2; 
9606
....................      
9606
....................      
9607
....................   #endif 
9607
....................   #endif 
9608
....................  
9608
....................  
9609
....................    do { 
9609
....................    do { 
9610
....................       res=y; 
9610
....................       res=y; 
9611
1A2E:  MOVFF  6E3,6E7
9611
1A2E:  MOVFF  6E3,6E7
9612
1A32:  MOVFF  6E2,6E6
9612
1A32:  MOVFF  6E2,6E6
9613
1A36:  MOVFF  6E1,6E5
9613
1A36:  MOVFF  6E1,6E5
9614
1A3A:  MOVFF  6E0,6E4
9614
1A3A:  MOVFF  6E0,6E4
9615
....................       y+=(x/y); 
9615
....................       y+=(x/y); 
9616
1A3E:  MOVFF  6DF,6ED
9616
1A3E:  MOVFF  6DF,6ED
9617
1A42:  MOVFF  6DE,6EC
9617
1A42:  MOVFF  6DE,6EC
9618
1A46:  MOVFF  6DD,6EB
9618
1A46:  MOVFF  6DD,6EB
9619
1A4A:  MOVFF  6DC,6EA
9619
1A4A:  MOVFF  6DC,6EA
9620
1A4E:  MOVFF  6E3,6F1
9620
1A4E:  MOVFF  6E3,6F1
9621
1A52:  MOVFF  6E2,6F0
9621
1A52:  MOVFF  6E2,6F0
9622
1A56:  MOVFF  6E1,6EF
9622
1A56:  MOVFF  6E1,6EF
9623
1A5A:  MOVFF  6E0,6EE
9623
1A5A:  MOVFF  6E0,6EE
9624
1A5E:  MOVLB  0
9624
1A5E:  MOVLB  0
9625
1A60:  RCALL  16BA
9625
1A60:  RCALL  16BA
9626
1A62:  BCF    FD8.1
9626
1A62:  BCF    FD8.1
9627
1A64:  MOVFF  6E3,6ED
9627
1A64:  MOVFF  6E3,6ED
9628
1A68:  MOVFF  6E2,6EC
9628
1A68:  MOVFF  6E2,6EC
9629
1A6C:  MOVFF  6E1,6EB
9629
1A6C:  MOVFF  6E1,6EB
9630
1A70:  MOVFF  6E0,6EA
9630
1A70:  MOVFF  6E0,6EA
9631
1A74:  MOVFF  03,6F1
9631
1A74:  MOVFF  03,6F1
9632
1A78:  MOVFF  02,6F0
9632
1A78:  MOVFF  02,6F0
9633
1A7C:  MOVFF  01,6EF
9633
1A7C:  MOVFF  01,6EF
9634
1A80:  MOVFF  00,6EE
9634
1A80:  MOVFF  00,6EE
9635
1A84:  RCALL  1442
9635
1A84:  RCALL  1442
9636
1A86:  MOVFF  03,6E3
9636
1A86:  MOVFF  03,6E3
9637
1A8A:  MOVFF  02,6E2
9637
1A8A:  MOVFF  02,6E2
9638
1A8E:  MOVFF  01,6E1
9638
1A8E:  MOVFF  01,6E1
9639
1A92:  MOVFF  00,6E0
9639
1A92:  MOVFF  00,6E0
9640
....................  
9640
....................  
9641
....................       #if !defined(__PCD__) 
9641
....................       #if !defined(__PCD__) 
9642
....................      (*p)--; 
9642
....................      (*p)--; 
9643
1A96:  MOVLB  6
9643
1A96:  MOVLB  6
9644
1A98:  MOVFF  6E8,FE9
9644
1A98:  MOVFF  6E8,FE9
9645
1A9C:  MOVFF  6E9,FEA
9645
1A9C:  MOVFF  6E9,FEA
9646
1AA0:  DECF   FEF,F
9646
1AA0:  DECF   FEF,F
9647
....................    #endif 
9647
....................    #endif 
9648
....................     
9648
....................     
9649
....................    #if defined(__PCD__) 
9649
....................    #if defined(__PCD__) 
9650
....................     data1 = *(((unsigned int8 *)(&y))+3); 
9650
....................     data1 = *(((unsigned int8 *)(&y))+3); 
9651
....................     data2 = *(((unsigned int8 *)(&y))+2); 
9651
....................     data2 = *(((unsigned int8 *)(&y))+2); 
9652
....................     rotate_left(&data1,1); 
9652
....................     rotate_left(&data1,1); 
9653
....................     if(bit_test(data2,7)) 
9653
....................     if(bit_test(data2,7)) 
9654
....................     bit_set(data1,0);     
9654
....................     bit_set(data1,0);     
9655
....................     data1--; 
9655
....................     data1--; 
9656
....................     bit_clear(data2,7); 
9656
....................     bit_clear(data2,7); 
9657
....................     if(bit_test(data1,0)) 
9657
....................     if(bit_test(data1,0)) 
9658
....................     bit_set(data2,7); 
9658
....................     bit_set(data2,7); 
9659
....................     data1 = data1 >>1; 
9659
....................     data1 = data1 >>1; 
9660
....................     *(((unsigned int8 *)(&y))+3) = data1; 
9660
....................     *(((unsigned int8 *)(&y))+3) = data1; 
9661
....................     *(((unsigned int8 *)(&y))+2) = data2; 
9661
....................     *(((unsigned int8 *)(&y))+2) = data2; 
9662
....................      
9662
....................      
9663
....................   #endif 
9663
....................   #endif 
9664
....................    } while(res != y); 
9664
....................    } while(res != y); 
9665
1AA2:  MOVFF  6E7,6ED
9665
1AA2:  MOVFF  6E7,6ED
9666
1AA6:  MOVFF  6E6,6EC
9666
1AA6:  MOVFF  6E6,6EC
9667
1AAA:  MOVFF  6E5,6EB
9667
1AAA:  MOVFF  6E5,6EB
9668
1AAE:  MOVFF  6E4,6EA
9668
1AAE:  MOVFF  6E4,6EA
9669
1AB2:  MOVFF  6E3,6F1
9669
1AB2:  MOVFF  6E3,6F1
9670
1AB6:  MOVFF  6E2,6F0
9670
1AB6:  MOVFF  6E2,6F0
9671
1ABA:  MOVFF  6E1,6EF
9671
1ABA:  MOVFF  6E1,6EF
9672
1ABE:  MOVFF  6E0,6EE
9672
1ABE:  MOVFF  6E0,6EE
9673
1AC2:  MOVLB  0
9673
1AC2:  MOVLB  0
9674
1AC4:  RCALL  1948
9674
1AC4:  RCALL  1948
9675
1AC6:  BTFSC  FD8.2
9675
1AC6:  BTFSC  FD8.2
9676
1AC8:  BRA    1ACE
9676
1AC8:  BRA    1ACE
9677
1ACA:  MOVLB  6
9677
1ACA:  MOVLB  6
9678
1ACC:  BRA    1A2E
9678
1ACC:  BRA    1A2E
9679
....................  
9679
....................  
9680
....................    return(res); 
9680
....................    return(res); 
9681
1ACE:  MOVFF  6E4,00
9681
1ACE:  MOVFF  6E4,00
9682
1AD2:  MOVFF  6E5,01
9682
1AD2:  MOVFF  6E5,01
9683
1AD6:  MOVFF  6E6,02
9683
1AD6:  MOVFF  6E6,02
9684
1ADA:  MOVFF  6E7,03
9684
1ADA:  MOVFF  6E7,03
9685
.................... } 
9685
.................... } 
9686
1ADE:  GOTO   1CCA (RETURN)
9686
1ADE:  GOTO   1CCA (RETURN)
9687
.................... //Overloaded functions for sqrt() for PCD 
9687
.................... //Overloaded functions for sqrt() for PCD 
9688
.................... // Overloaded function sqrt() for data type - Float48 
9688
.................... // Overloaded function sqrt() for data type - Float48 
9689
.................... #if defined(__PCD__) 
9689
.................... #if defined(__PCD__) 
9690
.................... float48 sqrt(float48 x) 
9690
.................... float48 sqrt(float48 x) 
9691
.................... { 
9691
.................... { 
9692
....................    float48 y, res; 
9692
....................    float48 y, res; 
9693
....................    unsigned int16 data1,data2; 
9693
....................    unsigned int16 data1,data2; 
9694
....................    BYTE *p; 
9694
....................    BYTE *p; 
9695
....................  
9695
....................  
9696
....................    #ifdef _ERRNO 
9696
....................    #ifdef _ERRNO 
9697
....................    if(x < 0) 
9697
....................    if(x < 0) 
9698
....................    { 
9698
....................    { 
9699
....................       errno=EDOM; 
9699
....................       errno=EDOM; 
9700
....................    } 
9700
....................    } 
9701
....................    #endif 
9701
....................    #endif 
9702
....................  
9702
....................  
9703
....................    if( x<=0.0) 
9703
....................    if( x<=0.0) 
9704
....................       return(0.0); 
9704
....................       return(0.0); 
9705
....................  
9705
....................  
9706
....................    y=x; 
9706
....................    y=x; 
9707
....................     
9707
....................     
9708
....................    #if !defined(__PCD__) 
9708
....................    #if !defined(__PCD__) 
9709
....................     p=&y; 
9709
....................     p=&y; 
9710
....................    (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); 
9710
....................    (*p)=(BYTE)((((unsigned int16)(*p)) + 127) >> 1); 
9711
....................    #endif 
9711
....................    #endif 
9712
....................     
9712
....................     
9713
....................    #if defined(__PCD__) 
9713
....................    #if defined(__PCD__) 
9714
....................     p = (((unsigned int8 *)(&y))+5); 
9714
....................     p = (((unsigned int8 *)(&y))+5); 
9715
....................     data1 = *(((unsigned int8 *)(&y))+5); 
9715
....................     data1 = *(((unsigned int8 *)(&y))+5); 
9716
....................     data2 = *(((unsigned int8 *)(&y))+4); 
9716
....................     data2 = *(((unsigned int8 *)(&y))+4); 
9717
....................     rotate_left(&data1,1); 
9717
....................     rotate_left(&data1,1); 
9718
....................     if(bit_test(data2,7)) 
9718
....................     if(bit_test(data2,7)) 
9719
....................     bit_set(data1,0);     
9719
....................     bit_set(data1,0);     
9720
....................     data1 = ((data1+127) >>1); 
9720
....................     data1 = ((data1+127) >>1); 
9721
....................     bit_clear(data2,7); 
9721
....................     bit_clear(data2,7); 
9722
....................     if(bit_test(data1,0)) 
9722
....................     if(bit_test(data1,0)) 
9723
....................     bit_set(data2,7); 
9723
....................     bit_set(data2,7); 
9724
....................     data1 = data1 >>1; 
9724
....................     data1 = data1 >>1; 
9725
....................     *(((unsigned int8 *)(&y))+5) = data1; 
9725
....................     *(((unsigned int8 *)(&y))+5) = data1; 
9726
....................     *(((unsigned int8 *)(&y))+4) = data2; 
9726
....................     *(((unsigned int8 *)(&y))+4) = data2; 
9727
....................      
9727
....................      
9728
....................   #endif 
9728
....................   #endif 
9729
....................  
9729
....................  
9730
....................    do { 
9730
....................    do { 
9731
....................       res=y; 
9731
....................       res=y; 
9732
....................       y+=(x/y); 
9732
....................       y+=(x/y); 
9733
....................  
9733
....................  
9734
....................       #if !defined(__PCD__) 
9734
....................       #if !defined(__PCD__) 
9735
....................      (*p)--; 
9735
....................      (*p)--; 
9736
....................    #endif 
9736
....................    #endif 
9737
....................     
9737
....................     
9738
....................     data1 = *(((unsigned int8 *)(&y))+5); 
9738
....................     data1 = *(((unsigned int8 *)(&y))+5); 
9739
....................     data2 = *(((unsigned int8 *)(&y))+4); 
9739
....................     data2 = *(((unsigned int8 *)(&y))+4); 
9740
....................     rotate_left(&data1,1); 
9740
....................     rotate_left(&data1,1); 
9741
....................     if(bit_test(data2,7)) 
9741
....................     if(bit_test(data2,7)) 
9742
....................     bit_set(data1,0);     
9742
....................     bit_set(data1,0);     
9743
....................     data1--; 
9743
....................     data1--; 
9744
....................     bit_clear(data2,7); 
9744
....................     bit_clear(data2,7); 
9745
....................     if(bit_test(data1,0)) 
9745
....................     if(bit_test(data1,0)) 
9746
....................     bit_set(data2,7); 
9746
....................     bit_set(data2,7); 
9747
....................     data1 = data1 >>1; 
9747
....................     data1 = data1 >>1; 
9748
....................     *(((unsigned int8 *)(&y))+5) = data1; 
9748
....................     *(((unsigned int8 *)(&y))+5) = data1; 
9749
....................     *(((unsigned int8 *)(&y))+4) = data2; 
9749
....................     *(((unsigned int8 *)(&y))+4) = data2; 
9750
....................      
9750
....................      
9751
....................    } while(res != y); 
9751
....................    } while(res != y); 
9752
....................  
9752
....................  
9753
....................    return(res); 
9753
....................    return(res); 
9754
.................... } 
9754
.................... } 
9755
....................  
9755
....................  
9756
.................... // Overloaded function sqrt() for data type - Float64 
9756
.................... // Overloaded function sqrt() for data type - Float64 
9757
.................... float64 sqrt(float64 x) 
9757
.................... float64 sqrt(float64 x) 
9758
.................... { 
9758
.................... { 
9759
....................    float64 y, res; 
9759
....................    float64 y, res; 
9760
....................    unsigned int16 *p; 
9760
....................    unsigned int16 *p; 
9761
....................    unsigned int16 temp1,temp2; 
9761
....................    unsigned int16 temp1,temp2; 
9762
....................  
9762
....................  
9763
....................    #ifdef _ERRNO 
9763
....................    #ifdef _ERRNO 
9764
....................    if(x < 0) 
9764
....................    if(x < 0) 
9765
....................    { 
9765
....................    { 
9766
....................       errno=EDOM; 
9766
....................       errno=EDOM; 
9767
....................    } 
9767
....................    } 
9768
....................    #endif 
9768
....................    #endif 
9769
....................  
9769
....................  
9770
....................    if( x<=0.0) 
9770
....................    if( x<=0.0) 
9771
....................       return(0.0); 
9771
....................       return(0.0); 
9772
....................  
9772
....................  
9773
....................    y=x; 
9773
....................    y=x; 
9774
....................    p= (((unsigned int16 *)(&y))+3); 
9774
....................    p= (((unsigned int16 *)(&y))+3); 
9775
....................    temp1 = *p; 
9775
....................    temp1 = *p; 
9776
....................    temp2 = *p; 
9776
....................    temp2 = *p; 
9777
....................    bit_clear(temp1,15); 
9777
....................    bit_clear(temp1,15); 
9778
....................    temp1 = (temp1>>4)+1023; 
9778
....................    temp1 = (temp1>>4)+1023; 
9779
....................    temp1 = temp1 >> 1; 
9779
....................    temp1 = temp1 >> 1; 
9780
....................    temp1 = (temp1<<4) & 0xFFF0; 
9780
....................    temp1 = (temp1<<4) & 0xFFF0; 
9781
....................    if(bit_test(temp2,15)) 
9781
....................    if(bit_test(temp2,15)) 
9782
....................    bit_set(temp1,15); 
9782
....................    bit_set(temp1,15); 
9783
....................    temp2 = temp2 & 0x000F; 
9783
....................    temp2 = temp2 & 0x000F; 
9784
....................    temp1 ^= temp2; 
9784
....................    temp1 ^= temp2; 
9785
....................     
9785
....................     
9786
....................    (*p) = temp1; 
9786
....................    (*p) = temp1; 
9787
....................     
9787
....................     
9788
....................    do { 
9788
....................    do { 
9789
....................       res=y; 
9789
....................       res=y; 
9790
....................       y+=(x/y); 
9790
....................       y+=(x/y); 
9791
....................      temp1 = *p; 
9791
....................      temp1 = *p; 
9792
....................      temp2 = *p; 
9792
....................      temp2 = *p; 
9793
....................      bit_clear(temp1,15); 
9793
....................      bit_clear(temp1,15); 
9794
....................      temp1 = (temp1>>4); 
9794
....................      temp1 = (temp1>>4); 
9795
....................      temp1--; 
9795
....................      temp1--; 
9796
....................      temp1 = (temp1<<4) & 0xFFF0; 
9796
....................      temp1 = (temp1<<4) & 0xFFF0; 
9797
....................      if(bit_test(temp2,15)) 
9797
....................      if(bit_test(temp2,15)) 
9798
....................      bit_set(temp1,15); 
9798
....................      bit_set(temp1,15); 
9799
....................      temp2 = temp2 & 0x000F; 
9799
....................      temp2 = temp2 & 0x000F; 
9800
....................      temp1 ^= temp2; 
9800
....................      temp1 ^= temp2; 
9801
....................      (*p) = temp1; 
9801
....................      (*p) = temp1; 
9802
....................  
9802
....................  
9803
....................    } while(res != y); 
9803
....................    } while(res != y); 
9804
....................  
9804
....................  
9805
....................    return(res); 
9805
....................    return(res); 
9806
.................... } 
9806
.................... } 
9807
.................... #endif 
9807
.................... #endif 
9808
....................  
9808
....................  
9809
.................... ////////////////////////////// Trig Functions ////////////////////////////// 
9809
.................... ////////////////////////////// Trig Functions ////////////////////////////// 
9810
.................... #ifdef PI_DIV_BY_TWO 
9810
.................... #ifdef PI_DIV_BY_TWO 
9811
.................... #undef PI_DIV_BY_TWO 
9811
.................... #undef PI_DIV_BY_TWO 
9812
.................... #endif 
9812
.................... #endif 
9813
.................... #define PI_DIV_BY_TWO   1.5707963267948966 
9813
.................... #define PI_DIV_BY_TWO   1.5707963267948966 
9814
.................... #ifdef TWOBYPI 
9814
.................... #ifdef TWOBYPI 
9815
.................... #undef TWOBYPI 
9815
.................... #undef TWOBYPI 
9816
.................... #define TWOBYPI          0.6366197723675813 
9816
.................... #define TWOBYPI          0.6366197723675813 
9817
.................... #endif 
9817
.................... #endif 
9818
.................... //////////////////////////////////////////////////////////////////////////// 
9818
.................... //////////////////////////////////////////////////////////////////////////// 
9819
.................... //   float cos(float x) 
9819
.................... //   float cos(float x) 
9820
.................... //////////////////////////////////////////////////////////////////////////// 
9820
.................... //////////////////////////////////////////////////////////////////////////// 
9821
.................... // Description : returns the cosine value of the angle x, which is in radian 
9821
.................... // Description : returns the cosine value of the angle x, which is in radian 
9822
.................... // Date : 9/20/2001 
9822
.................... // Date : 9/20/2001 
9823
.................... // 
9823
.................... // 
9824
.................... float32 cos(float32 x) 
9824
.................... float32 cos(float32 x) 
9825
.................... { 
9825
.................... { 
9826
....................    float32 y, t, t2 = 1.0; 
9826
....................    float32 y, t, t2 = 1.0; 
9827
....................    unsigned int8 quad, i; 
9827
....................    unsigned int8 quad, i; 
9828
....................    float32 frac; 
9828
....................    float32 frac; 
9829
....................    float32 p[4] = { 
9829
....................    float32 p[4] = { 
9830
....................       -0.499999993585, 
9830
....................       -0.499999993585, 
9831
....................        0.041666636258, 
9831
....................        0.041666636258, 
9832
....................       -0.0013888361399, 
9832
....................       -0.0013888361399, 
9833
....................        0.00002476016134 
9833
....................        0.00002476016134 
9834
....................    }; 
9834
....................    }; 
9835
....................  
9835
....................  
9836
....................    if (x < 0) x = -x;                  // absolute value of input 
9836
....................    if (x < 0) x = -x;                  // absolute value of input 
9837
....................  
9837
....................  
9838
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9838
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9839
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9839
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9840
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9840
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9841
....................  
9841
....................  
9842
....................    if (quad == 0 || quad == 2) 
9842
....................    if (quad == 0 || quad == 2) 
9843
....................       t = frac * PI_DIV_BY_TWO; 
9843
....................       t = frac * PI_DIV_BY_TWO; 
9844
....................    else if (quad == 1) 
9844
....................    else if (quad == 1) 
9845
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9845
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9846
....................    else // should be 3 
9846
....................    else // should be 3 
9847
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9847
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9848
....................  
9848
....................  
9849
....................    y = 0.999999999781; 
9849
....................    y = 0.999999999781; 
9850
....................    t = t * t; 
9850
....................    t = t * t; 
9851
....................    for (i = 0; i <= 3; i++) 
9851
....................    for (i = 0; i <= 3; i++) 
9852
....................    { 
9852
....................    { 
9853
....................       t2 = t2 * t; 
9853
....................       t2 = t2 * t; 
9854
....................       y = y + p[i] * t2; 
9854
....................       y = y + p[i] * t2; 
9855
....................    } 
9855
....................    } 
9856
....................  
9856
....................  
9857
....................    if (quad == 2 || quad == 1) 
9857
....................    if (quad == 2 || quad == 1) 
9858
....................       y = -y;  // correct sign 
9858
....................       y = -y;  // correct sign 
9859
....................  
9859
....................  
9860
....................    return (y); 
9860
....................    return (y); 
9861
.................... } 
9861
.................... } 
9862
....................  
9862
....................  
9863
....................  
9863
....................  
9864
.................... //Overloaded functions for cos() for PCD 
9864
.................... //Overloaded functions for cos() for PCD 
9865
.................... // Overloaded function cos() for data type - Float48 
9865
.................... // Overloaded function cos() for data type - Float48 
9866
.................... #if defined(__PCD__) 
9866
.................... #if defined(__PCD__) 
9867
.................... float48 cos(float48 x) 
9867
.................... float48 cos(float48 x) 
9868
.................... { 
9868
.................... { 
9869
....................    float48 y, t, t2 = 1.0; 
9869
....................    float48 y, t, t2 = 1.0; 
9870
....................    unsigned int8 quad, i; 
9870
....................    unsigned int8 quad, i; 
9871
....................    float48 frac; 
9871
....................    float48 frac; 
9872
....................    float48 p[4] = { 
9872
....................    float48 p[4] = { 
9873
....................       -0.499999993585, 
9873
....................       -0.499999993585, 
9874
....................        0.041666636258, 
9874
....................        0.041666636258, 
9875
....................       -0.0013888361399, 
9875
....................       -0.0013888361399, 
9876
....................        0.00002476016134 
9876
....................        0.00002476016134 
9877
....................    }; 
9877
....................    }; 
9878
....................  
9878
....................  
9879
....................    if (x < 0) x = -x;                  // absolute value of input 
9879
....................    if (x < 0) x = -x;                  // absolute value of input 
9880
....................  
9880
....................  
9881
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9881
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9882
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9882
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9883
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9883
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9884
....................  
9884
....................  
9885
....................    if (quad == 0 || quad == 2) 
9885
....................    if (quad == 0 || quad == 2) 
9886
....................       t = frac * PI_DIV_BY_TWO; 
9886
....................       t = frac * PI_DIV_BY_TWO; 
9887
....................    else if (quad == 1) 
9887
....................    else if (quad == 1) 
9888
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9888
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9889
....................    else // should be 3 
9889
....................    else // should be 3 
9890
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9890
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9891
....................  
9891
....................  
9892
....................    y = 0.999999999781; 
9892
....................    y = 0.999999999781; 
9893
....................    t = t * t; 
9893
....................    t = t * t; 
9894
....................    for (i = 0; i <= 3; i++) 
9894
....................    for (i = 0; i <= 3; i++) 
9895
....................    { 
9895
....................    { 
9896
....................       t2 = t2 * t; 
9896
....................       t2 = t2 * t; 
9897
....................       y = y + p[i] * t2; 
9897
....................       y = y + p[i] * t2; 
9898
....................    } 
9898
....................    } 
9899
....................  
9899
....................  
9900
....................    if (quad == 2 || quad == 1) 
9900
....................    if (quad == 2 || quad == 1) 
9901
....................       y = -y;  // correct sign 
9901
....................       y = -y;  // correct sign 
9902
....................  
9902
....................  
9903
....................    return (y); 
9903
....................    return (y); 
9904
.................... } 
9904
.................... } 
9905
....................  
9905
....................  
9906
.................... // Overloaded function cos() for data type - Float48 
9906
.................... // Overloaded function cos() for data type - Float48 
9907
.................... float64 cos(float64 x) 
9907
.................... float64 cos(float64 x) 
9908
.................... { 
9908
.................... { 
9909
....................    float64 y, t, t2 = 1.0; 
9909
....................    float64 y, t, t2 = 1.0; 
9910
....................    unsigned int8 quad, i; 
9910
....................    unsigned int8 quad, i; 
9911
....................    float64 frac; 
9911
....................    float64 frac; 
9912
....................    float64 p[4] = { 
9912
....................    float64 p[4] = { 
9913
....................       -0.499999993585, 
9913
....................       -0.499999993585, 
9914
....................        0.041666636258, 
9914
....................        0.041666636258, 
9915
....................       -0.0013888361399, 
9915
....................       -0.0013888361399, 
9916
....................        0.00002476016134 
9916
....................        0.00002476016134 
9917
....................    }; 
9917
....................    }; 
9918
....................  
9918
....................  
9919
....................    if (x < 0) x = -x;                  // absolute value of input 
9919
....................    if (x < 0) x = -x;                  // absolute value of input 
9920
....................  
9920
....................  
9921
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9921
....................    quad = (unsigned int8)(x / PI_DIV_BY_TWO);    // quadrant 
9922
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9922
....................    frac = (x / PI_DIV_BY_TWO) - quad;  // fractional part of input 
9923
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9923
....................    quad = quad % 4;                    // quadrant (0 to 3) 
9924
....................  
9924
....................  
9925
....................    if (quad == 0 || quad == 2) 
9925
....................    if (quad == 0 || quad == 2) 
9926
....................       t = frac * PI_DIV_BY_TWO; 
9926
....................       t = frac * PI_DIV_BY_TWO; 
9927
....................    else if (quad == 1) 
9927
....................    else if (quad == 1) 
9928
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9928
....................       t = (1-frac) * PI_DIV_BY_TWO; 
9929
....................    else // should be 3 
9929
....................    else // should be 3 
9930
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9930
....................       t = (frac-1) * PI_DIV_BY_TWO; 
9931
....................  
9931
....................  
9932
....................    y = 0.999999999781; 
9932
....................    y = 0.999999999781; 
9933
....................    t = t * t; 
9933
....................    t = t * t; 
9934
....................    for (i = 0; i <= 3; i++) 
9934
....................    for (i = 0; i <= 3; i++) 
9935
....................    { 
9935
....................    { 
9936
....................       t2 = t2 * t; 
9936
....................       t2 = t2 * t; 
9937
....................       y = y + p[i] * t2; 
9937
....................       y = y + p[i] * t2; 
9938
....................    } 
9938
....................    } 
9939
....................  
9939
....................  
9940
....................    if (quad == 2 || quad == 1) 
9940
....................    if (quad == 2 || quad == 1) 
9941
....................       y = -y;  // correct sign 
9941
....................       y = -y;  // correct sign 
9942
....................  
9942
....................  
9943
....................    return (y); 
9943
....................    return (y); 
9944
.................... } 
9944
.................... } 
9945
....................  
9945
....................  
9946
.................... #endif 
9946
.................... #endif 
9947
....................  
9947
....................  
9948
.................... //////////////////////////////////////////////////////////////////////////// 
9948
.................... //////////////////////////////////////////////////////////////////////////// 
9949
.................... //   float sin(float x) 
9949
.................... //   float sin(float x) 
9950
.................... //////////////////////////////////////////////////////////////////////////// 
9950
.................... //////////////////////////////////////////////////////////////////////////// 
9951
.................... // Description : returns the sine value of the angle x, which is in radian 
9951
.................... // Description : returns the sine value of the angle x, which is in radian 
9952
.................... // Date : 9/20/2001 
9952
.................... // Date : 9/20/2001 
9953
.................... // 
9953
.................... // 
9954
.................... float32 sin(float32 x) 
9954
.................... float32 sin(float32 x) 
9955
.................... { 
9955
.................... { 
9956
....................    return cos(x - PI_DIV_BY_TWO); 
9956
....................    return cos(x - PI_DIV_BY_TWO); 
9957
.................... } 
9957
.................... } 
9958
....................  
9958
....................  
9959
.................... //Overloaded functions for sin() for PCD 
9959
.................... //Overloaded functions for sin() for PCD 
9960
.................... // Overloaded function sin() for data type - Float48 
9960
.................... // Overloaded function sin() for data type - Float48 
9961
.................... #if defined(__PCD__) 
9961
.................... #if defined(__PCD__) 
9962
.................... float48 sin(float48 x) 
9962
.................... float48 sin(float48 x) 
9963
.................... { 
9963
.................... { 
9964
....................    return cos(x - PI_DIV_BY_TWO); 
9964
....................    return cos(x - PI_DIV_BY_TWO); 
9965
.................... } 
9965
.................... } 
9966
....................  
9966
....................  
9967
.................... // Overloaded function sin() for data type - Float48 
9967
.................... // Overloaded function sin() for data type - Float48 
9968
.................... float64 sin(float64 x) 
9968
.................... float64 sin(float64 x) 
9969
.................... { 
9969
.................... { 
9970
....................    return cos(x - PI_DIV_BY_TWO); 
9970
....................    return cos(x - PI_DIV_BY_TWO); 
9971
.................... } 
9971
.................... } 
9972
.................... #endif 
9972
.................... #endif 
9973
....................  
9973
....................  
9974
.................... //////////////////////////////////////////////////////////////////////////// 
9974
.................... //////////////////////////////////////////////////////////////////////////// 
9975
.................... //   float tan(float x) 
9975
.................... //   float tan(float x) 
9976
.................... //////////////////////////////////////////////////////////////////////////// 
9976
.................... //////////////////////////////////////////////////////////////////////////// 
9977
.................... // Description : returns the tangent value of the angle x, which is in radian 
9977
.................... // Description : returns the tangent value of the angle x, which is in radian 
9978
.................... // Date : 9/20/2001 
9978
.................... // Date : 9/20/2001 
9979
.................... // 
9979
.................... // 
9980
.................... float32 tan(float32 x) 
9980
.................... float32 tan(float32 x) 
9981
.................... { 
9981
.................... { 
9982
....................    float32 c, s; 
9982
....................    float32 c, s; 
9983
....................  
9983
....................  
9984
....................    c = cos(x); 
9984
....................    c = cos(x); 
9985
....................    if (c == 0.0) 
9985
....................    if (c == 0.0) 
9986
....................       return (1.0e+36); 
9986
....................       return (1.0e+36); 
9987
....................  
9987
....................  
9988
....................    s = sin(x); 
9988
....................    s = sin(x); 
9989
....................    return(s/c); 
9989
....................    return(s/c); 
9990
.................... } 
9990
.................... } 
9991
.................... //Overloaded functions for tan() for PCD 
9991
.................... //Overloaded functions for tan() for PCD 
9992
.................... // Overloaded function tan() for data type - Float48 
9992
.................... // Overloaded function tan() for data type - Float48 
9993
.................... #if defined(__PCD__) 
9993
.................... #if defined(__PCD__) 
9994
.................... float48 tan(float48 x) 
9994
.................... float48 tan(float48 x) 
9995
.................... { 
9995
.................... { 
9996
....................    float48 c, s; 
9996
....................    float48 c, s; 
9997
....................  
9997
....................  
9998
....................    c = cos(x); 
9998
....................    c = cos(x); 
9999
....................    if (c == 0.0) 
9999
....................    if (c == 0.0) 
10000
....................       return (1.0e+36); 
10000
....................       return (1.0e+36); 
10001
....................  
10001
....................  
10002
....................    s = sin(x); 
10002
....................    s = sin(x); 
10003
....................    return(s/c); 
10003
....................    return(s/c); 
10004
.................... } 
10004
.................... } 
10005
....................  
10005
....................  
10006
.................... // Overloaded function tan() for data type - Float48 
10006
.................... // Overloaded function tan() for data type - Float48 
10007
.................... float64 tan(float64 x) 
10007
.................... float64 tan(float64 x) 
10008
.................... { 
10008
.................... { 
10009
....................    float64 c, s; 
10009
....................    float64 c, s; 
10010
....................  
10010
....................  
10011
....................    c = cos(x); 
10011
....................    c = cos(x); 
10012
....................    if (c == 0.0) 
10012
....................    if (c == 0.0) 
10013
....................       return (1.0e+36); 
10013
....................       return (1.0e+36); 
10014
....................  
10014
....................  
10015
....................    s = sin(x); 
10015
....................    s = sin(x); 
10016
....................    return(s/c); 
10016
....................    return(s/c); 
10017
.................... } 
10017
.................... } 
10018
.................... #endif 
10018
.................... #endif 
10019
....................  
10019
....................  
10020
.................... float32 const pas[3] = {0.49559947, -4.6145309, 5.6036290}; 
10020
.................... float32 const pas[3] = {0.49559947, -4.6145309, 5.6036290}; 
10021
.................... float32 const qas[3] = {1.0000000,  -5.5484666, 5.6036290}; 
10021
.................... float32 const qas[3] = {1.0000000,  -5.5484666, 5.6036290}; 
10022
....................  
10022
....................  
10023
.................... float32 ASIN_COS(float32 x, unsigned int8 n) 
10023
.................... float32 ASIN_COS(float32 x, unsigned int8 n) 
10024
.................... { 
10024
.................... { 
10025
....................    float32 y, res, r, y2; 
10025
....................    float32 y, res, r, y2; 
10026
....................    int1 s; 
10026
....................    int1 s; 
10027
....................    #ifdef _ERRNO 
10027
....................    #ifdef _ERRNO 
10028
....................    if(x <-1 || x > 1) 
10028
....................    if(x <-1 || x > 1) 
10029
....................    { 
10029
....................    { 
10030
....................       errno=EDOM; 
10030
....................       errno=EDOM; 
10031
....................    } 
10031
....................    } 
10032
....................    #endif 
10032
....................    #endif 
10033
....................    s = 0; 
10033
....................    s = 0; 
10034
....................    y = x; 
10034
....................    y = x; 
10035
....................  
10035
....................  
10036
....................    if (x < 0) 
10036
....................    if (x < 0) 
10037
....................    { 
10037
....................    { 
10038
....................       s = 1; 
10038
....................       s = 1; 
10039
....................       y = -y; 
10039
....................       y = -y; 
10040
....................    } 
10040
....................    } 
10041
....................  
10041
....................  
10042
....................    if (y > 0.5) 
10042
....................    if (y > 0.5) 
10043
....................    { 
10043
....................    { 
10044
....................       y = sqrt((1.0 - y)/2.0); 
10044
....................       y = sqrt((1.0 - y)/2.0); 
10045
....................       n += 2; 
10045
....................       n += 2; 
10046
....................    } 
10046
....................    } 
10047
....................  
10047
....................  
10048
....................    y2=y*y; 
10048
....................    y2=y*y; 
10049
....................  
10049
....................  
10050
....................    res = pas[0]*y2 + pas[1]; 
10050
....................    res = pas[0]*y2 + pas[1]; 
10051
....................    res = res*y2 + pas[2]; 
10051
....................    res = res*y2 + pas[2]; 
10052
....................  
10052
....................  
10053
....................    r = qas[0]*y2 + qas[1]; 
10053
....................    r = qas[0]*y2 + qas[1]; 
10054
....................    r = r*y2 + qas[2]; 
10054
....................    r = r*y2 + qas[2]; 
10055
....................  
10055
....................  
10056
....................    res = y*res/r; 
10056
....................    res = y*res/r; 
10057
....................  
10057
....................  
10058
....................    if (n & 2)     // |x| > 0.5 
10058
....................    if (n & 2)     // |x| > 0.5 
10059
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10059
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10060
....................    if (s) 
10060
....................    if (s) 
10061
....................       res = -res; 
10061
....................       res = -res; 
10062
....................    if (n & 1)           // take arccos 
10062
....................    if (n & 1)           // take arccos 
10063
....................       res = PI_DIV_BY_TWO - res; 
10063
....................       res = PI_DIV_BY_TWO - res; 
10064
....................  
10064
....................  
10065
....................    return(res); 
10065
....................    return(res); 
10066
.................... } 
10066
.................... } 
10067
....................  
10067
....................  
10068
.................... //Overloaded functions for ASIN_COS() for PCD 
10068
.................... //Overloaded functions for ASIN_COS() for PCD 
10069
.................... // Overloaded function ASIN_COS() for data type - Float48 
10069
.................... // Overloaded function ASIN_COS() for data type - Float48 
10070
.................... #if defined(__PCD__) 
10070
.................... #if defined(__PCD__) 
10071
.................... float48 ASIN_COS(float48 x, unsigned int8 n) 
10071
.................... float48 ASIN_COS(float48 x, unsigned int8 n) 
10072
.................... { 
10072
.................... { 
10073
....................    float48 y, res, r, y2; 
10073
....................    float48 y, res, r, y2; 
10074
....................    int1 s; 
10074
....................    int1 s; 
10075
....................    #ifdef _ERRNO 
10075
....................    #ifdef _ERRNO 
10076
....................    if(x <-1 || x > 1) 
10076
....................    if(x <-1 || x > 1) 
10077
....................    { 
10077
....................    { 
10078
....................       errno=EDOM; 
10078
....................       errno=EDOM; 
10079
....................    } 
10079
....................    } 
10080
....................    #endif 
10080
....................    #endif 
10081
....................    s = 0; 
10081
....................    s = 0; 
10082
....................    y = x; 
10082
....................    y = x; 
10083
....................  
10083
....................  
10084
....................    if (x < 0) 
10084
....................    if (x < 0) 
10085
....................    { 
10085
....................    { 
10086
....................       s = 1; 
10086
....................       s = 1; 
10087
....................       y = -y; 
10087
....................       y = -y; 
10088
....................    } 
10088
....................    } 
10089
....................  
10089
....................  
10090
....................    if (y > 0.5) 
10090
....................    if (y > 0.5) 
10091
....................    { 
10091
....................    { 
10092
....................       y = sqrt((1.0 - y)/2.0); 
10092
....................       y = sqrt((1.0 - y)/2.0); 
10093
....................       n += 2; 
10093
....................       n += 2; 
10094
....................    } 
10094
....................    } 
10095
....................  
10095
....................  
10096
....................    y2=y*y; 
10096
....................    y2=y*y; 
10097
....................  
10097
....................  
10098
....................    res = pas[0]*y2 + pas[1]; 
10098
....................    res = pas[0]*y2 + pas[1]; 
10099
....................    res = res*y2 + pas[2]; 
10099
....................    res = res*y2 + pas[2]; 
10100
....................  
10100
....................  
10101
....................    r = qas[0]*y2 + qas[1]; 
10101
....................    r = qas[0]*y2 + qas[1]; 
10102
....................    r = r*y2 + qas[2]; 
10102
....................    r = r*y2 + qas[2]; 
10103
....................  
10103
....................  
10104
....................    res = y*res/r; 
10104
....................    res = y*res/r; 
10105
....................  
10105
....................  
10106
....................    if (n & 2)     // |x| > 0.5 
10106
....................    if (n & 2)     // |x| > 0.5 
10107
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10107
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10108
....................    if (s) 
10108
....................    if (s) 
10109
....................       res = -res; 
10109
....................       res = -res; 
10110
....................    if (n & 1)           // take arccos 
10110
....................    if (n & 1)           // take arccos 
10111
....................       res = PI_DIV_BY_TWO - res; 
10111
....................       res = PI_DIV_BY_TWO - res; 
10112
....................  
10112
....................  
10113
....................    return(res); 
10113
....................    return(res); 
10114
.................... } 
10114
.................... } 
10115
....................  
10115
....................  
10116
.................... // Overloaded function ASIN_COS() for data type - Float64 
10116
.................... // Overloaded function ASIN_COS() for data type - Float64 
10117
.................... float64 ASIN_COS(float64 x, unsigned int8 n) 
10117
.................... float64 ASIN_COS(float64 x, unsigned int8 n) 
10118
.................... { 
10118
.................... { 
10119
....................    float64 y, res, r, y2; 
10119
....................    float64 y, res, r, y2; 
10120
....................    int1 s; 
10120
....................    int1 s; 
10121
....................    #ifdef _ERRNO 
10121
....................    #ifdef _ERRNO 
10122
....................    if(x <-1 || x > 1) 
10122
....................    if(x <-1 || x > 1) 
10123
....................    { 
10123
....................    { 
10124
....................       errno=EDOM; 
10124
....................       errno=EDOM; 
10125
....................    } 
10125
....................    } 
10126
....................    #endif 
10126
....................    #endif 
10127
....................    s = 0; 
10127
....................    s = 0; 
10128
....................    y = x; 
10128
....................    y = x; 
10129
....................  
10129
....................  
10130
....................    if (x < 0) 
10130
....................    if (x < 0) 
10131
....................    { 
10131
....................    { 
10132
....................       s = 1; 
10132
....................       s = 1; 
10133
....................       y = -y; 
10133
....................       y = -y; 
10134
....................    } 
10134
....................    } 
10135
....................  
10135
....................  
10136
....................    if (y > 0.5) 
10136
....................    if (y > 0.5) 
10137
....................    { 
10137
....................    { 
10138
....................       y = sqrt((1.0 - y)/2.0); 
10138
....................       y = sqrt((1.0 - y)/2.0); 
10139
....................       n += 2; 
10139
....................       n += 2; 
10140
....................    } 
10140
....................    } 
10141
....................  
10141
....................  
10142
....................    y2=y*y; 
10142
....................    y2=y*y; 
10143
....................  
10143
....................  
10144
....................    res = pas[0]*y2 + pas[1]; 
10144
....................    res = pas[0]*y2 + pas[1]; 
10145
....................    res = res*y2 + pas[2]; 
10145
....................    res = res*y2 + pas[2]; 
10146
....................  
10146
....................  
10147
....................    r = qas[0]*y2 + qas[1]; 
10147
....................    r = qas[0]*y2 + qas[1]; 
10148
....................    r = r*y2 + qas[2]; 
10148
....................    r = r*y2 + qas[2]; 
10149
....................  
10149
....................  
10150
....................    res = y*res/r; 
10150
....................    res = y*res/r; 
10151
....................  
10151
....................  
10152
....................    if (n & 2)     // |x| > 0.5 
10152
....................    if (n & 2)     // |x| > 0.5 
10153
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10153
....................       res = PI_DIV_BY_TWO - 2.0*res; 
10154
....................    if (s) 
10154
....................    if (s) 
10155
....................       res = -res; 
10155
....................       res = -res; 
10156
....................    if (n & 1)           // take arccos 
10156
....................    if (n & 1)           // take arccos 
10157
....................       res = PI_DIV_BY_TWO - res; 
10157
....................       res = PI_DIV_BY_TWO - res; 
10158
....................  
10158
....................  
10159
....................    return(res); 
10159
....................    return(res); 
10160
.................... } 
10160
.................... } 
10161
.................... #endif 
10161
.................... #endif 
10162
....................  
10162
....................  
10163
.................... //////////////////////////////////////////////////////////////////////////// 
10163
.................... //////////////////////////////////////////////////////////////////////////// 
10164
.................... //   float asin(float x) 
10164
.................... //   float asin(float x) 
10165
.................... //////////////////////////////////////////////////////////////////////////// 
10165
.................... //////////////////////////////////////////////////////////////////////////// 
10166
.................... // Description : returns the arcsine value of the value x. 
10166
.................... // Description : returns the arcsine value of the value x. 
10167
.................... // Date : N/A 
10167
.................... // Date : N/A 
10168
.................... // 
10168
.................... // 
10169
.................... float32 asin(float32 x) 
10169
.................... float32 asin(float32 x) 
10170
.................... { 
10170
.................... { 
10171
....................    float32 r; 
10171
....................    float32 r; 
10172
....................  
10172
....................  
10173
....................    r = ASIN_COS(x, 0); 
10173
....................    r = ASIN_COS(x, 0); 
10174
....................    return(r); 
10174
....................    return(r); 
10175
.................... } 
10175
.................... } 
10176
.................... //Overloaded functions for asin() for PCD 
10176
.................... //Overloaded functions for asin() for PCD 
10177
.................... // Overloaded function asin() for data type - Float48 
10177
.................... // Overloaded function asin() for data type - Float48 
10178
.................... #if defined(__PCD__) 
10178
.................... #if defined(__PCD__) 
10179
.................... float48 asin(float48 x) 
10179
.................... float48 asin(float48 x) 
10180
.................... { 
10180
.................... { 
10181
....................    float48 r; 
10181
....................    float48 r; 
10182
....................  
10182
....................  
10183
....................    r = ASIN_COS(x, 0); 
10183
....................    r = ASIN_COS(x, 0); 
10184
....................    return(r); 
10184
....................    return(r); 
10185
.................... } 
10185
.................... } 
10186
....................  
10186
....................  
10187
.................... // Overloaded function asin() for data type - Float64 
10187
.................... // Overloaded function asin() for data type - Float64 
10188
.................... float64 asin(float64 x) 
10188
.................... float64 asin(float64 x) 
10189
.................... { 
10189
.................... { 
10190
....................    float64 r; 
10190
....................    float64 r; 
10191
....................  
10191
....................  
10192
....................    r = ASIN_COS(x, 0); 
10192
....................    r = ASIN_COS(x, 0); 
10193
....................    return(r); 
10193
....................    return(r); 
10194
.................... } 
10194
.................... } 
10195
.................... #endif 
10195
.................... #endif 
10196
....................  
10196
....................  
10197
.................... //////////////////////////////////////////////////////////////////////////// 
10197
.................... //////////////////////////////////////////////////////////////////////////// 
10198
.................... //   float acos(float x) 
10198
.................... //   float acos(float x) 
10199
.................... //////////////////////////////////////////////////////////////////////////// 
10199
.................... //////////////////////////////////////////////////////////////////////////// 
10200
.................... // Description : returns the arccosine value of the value x. 
10200
.................... // Description : returns the arccosine value of the value x. 
10201
.................... // Date : N/A 
10201
.................... // Date : N/A 
10202
.................... // 
10202
.................... // 
10203
.................... float32 acos(float32 x) 
10203
.................... float32 acos(float32 x) 
10204
.................... { 
10204
.................... { 
10205
....................    float32 r; 
10205
....................    float32 r; 
10206
....................  
10206
....................  
10207
....................    r = ASIN_COS(x, 1); 
10207
....................    r = ASIN_COS(x, 1); 
10208
....................    return(r); 
10208
....................    return(r); 
10209
.................... } 
10209
.................... } 
10210
.................... //Overloaded functions for acos() for PCD 
10210
.................... //Overloaded functions for acos() for PCD 
10211
.................... // Overloaded function acos() for data type - Float48 
10211
.................... // Overloaded function acos() for data type - Float48 
10212
.................... #if defined(__PCD__) 
10212
.................... #if defined(__PCD__) 
10213
.................... float48 acos(float48 x) 
10213
.................... float48 acos(float48 x) 
10214
.................... { 
10214
.................... { 
10215
....................    float48 r; 
10215
....................    float48 r; 
10216
....................  
10216
....................  
10217
....................    r = ASIN_COS(x, 1); 
10217
....................    r = ASIN_COS(x, 1); 
10218
....................    return(r); 
10218
....................    return(r); 
10219
.................... } 
10219
.................... } 
10220
....................  
10220
....................  
10221
.................... // Overloaded function acos() for data type - Float64 
10221
.................... // Overloaded function acos() for data type - Float64 
10222
.................... float64 acos(float64 x) 
10222
.................... float64 acos(float64 x) 
10223
.................... { 
10223
.................... { 
10224
....................    float64 r; 
10224
....................    float64 r; 
10225
....................  
10225
....................  
10226
....................    r = ASIN_COS(x, 1); 
10226
....................    r = ASIN_COS(x, 1); 
10227
....................    return(r); 
10227
....................    return(r); 
10228
.................... } 
10228
.................... } 
10229
.................... #endif 
10229
.................... #endif 
10230
....................  
10230
....................  
10231
.................... float32 const pat[4] = {0.17630401, 5.6710795, 22.376096, 19.818457}; 
10231
.................... float32 const pat[4] = {0.17630401, 5.6710795, 22.376096, 19.818457}; 
10232
.................... float32 const qat[4] = {1.0000000,  11.368190, 28.982246, 19.818457}; 
10232
.................... float32 const qat[4] = {1.0000000,  11.368190, 28.982246, 19.818457}; 
10233
....................  
10233
....................  
10234
.................... //////////////////////////////////////////////////////////////////////////// 
10234
.................... //////////////////////////////////////////////////////////////////////////// 
10235
.................... //   float atan(float x) 
10235
.................... //   float atan(float x) 
10236
.................... //////////////////////////////////////////////////////////////////////////// 
10236
.................... //////////////////////////////////////////////////////////////////////////// 
10237
.................... // Description : returns the arctangent value of the value x. 
10237
.................... // Description : returns the arctangent value of the value x. 
10238
.................... // Date : N/A 
10238
.................... // Date : N/A 
10239
.................... // 
10239
.................... // 
10240
.................... float32 atan(float32 x) 
10240
.................... float32 atan(float32 x) 
10241
.................... { 
10241
.................... { 
10242
....................    float32 y, res, r; 
10242
....................    float32 y, res, r; 
10243
....................    int1 s, flag; 
10243
....................    int1 s, flag; 
10244
....................  
10244
....................  
10245
....................    s = 0; 
10245
....................    s = 0; 
10246
....................    flag = 0; 
10246
....................    flag = 0; 
10247
....................    y = x; 
10247
....................    y = x; 
10248
....................  
10248
....................  
10249
....................    if (x < 0) 
10249
....................    if (x < 0) 
10250
....................    { 
10250
....................    { 
10251
....................       s = 1; 
10251
....................       s = 1; 
10252
....................       y = -y; 
10252
....................       y = -y; 
10253
....................    } 
10253
....................    } 
10254
....................  
10254
....................  
10255
....................    if (y > 1.0) 
10255
....................    if (y > 1.0) 
10256
....................    { 
10256
....................    { 
10257
....................       y = 1.0/y; 
10257
....................       y = 1.0/y; 
10258
....................       flag = 1; 
10258
....................       flag = 1; 
10259
....................    } 
10259
....................    } 
10260
....................  
10260
....................  
10261
....................    res = pat[0]*y*y + pat[1]; 
10261
....................    res = pat[0]*y*y + pat[1]; 
10262
....................    res = res*y*y + pat[2]; 
10262
....................    res = res*y*y + pat[2]; 
10263
....................    res = res*y*y + pat[3]; 
10263
....................    res = res*y*y + pat[3]; 
10264
....................  
10264
....................  
10265
....................    r = qat[0]*y*y + qat[1]; 
10265
....................    r = qat[0]*y*y + qat[1]; 
10266
....................    r = r*y*y + qat[2]; 
10266
....................    r = r*y*y + qat[2]; 
10267
....................    r = r*y*y + qat[3]; 
10267
....................    r = r*y*y + qat[3]; 
10268
....................  
10268
....................  
10269
....................    res = y*res/r; 
10269
....................    res = y*res/r; 
10270
....................  
10270
....................  
10271
....................  
10271
....................  
10272
....................    if (flag)                              // for |x| > 1 
10272
....................    if (flag)                              // for |x| > 1 
10273
....................       res = PI_DIV_BY_TWO - res; 
10273
....................       res = PI_DIV_BY_TWO - res; 
10274
....................    if (s) 
10274
....................    if (s) 
10275
....................       res = -res; 
10275
....................       res = -res; 
10276
....................  
10276
....................  
10277
....................    return(res); 
10277
....................    return(res); 
10278
.................... } 
10278
.................... } 
10279
.................... //Overloaded functions for atan() for PCD 
10279
.................... //Overloaded functions for atan() for PCD 
10280
.................... // Overloaded function atan() for data type - Float48 
10280
.................... // Overloaded function atan() for data type - Float48 
10281
.................... #if defined(__PCD__) 
10281
.................... #if defined(__PCD__) 
10282
.................... float48 atan(float48 x) 
10282
.................... float48 atan(float48 x) 
10283
.................... { 
10283
.................... { 
10284
....................    float48 y, res, r; 
10284
....................    float48 y, res, r; 
10285
....................    int1 s, flag; 
10285
....................    int1 s, flag; 
10286
....................  
10286
....................  
10287
....................    s = 0; 
10287
....................    s = 0; 
10288
....................    flag = 0; 
10288
....................    flag = 0; 
10289
....................    y = x; 
10289
....................    y = x; 
10290
....................  
10290
....................  
10291
....................    if (x < 0) 
10291
....................    if (x < 0) 
10292
....................    { 
10292
....................    { 
10293
....................       s = 1; 
10293
....................       s = 1; 
10294
....................       y = -y; 
10294
....................       y = -y; 
10295
....................    } 
10295
....................    } 
10296
....................  
10296
....................  
10297
....................    if (y > 1.0) 
10297
....................    if (y > 1.0) 
10298
....................    { 
10298
....................    { 
10299
....................       y = 1.0/y; 
10299
....................       y = 1.0/y; 
10300
....................       flag = 1; 
10300
....................       flag = 1; 
10301
....................    } 
10301
....................    } 
10302
....................  
10302
....................  
10303
....................    res = pat[0]*y*y + pat[1]; 
10303
....................    res = pat[0]*y*y + pat[1]; 
10304
....................    res = res*y*y + pat[2]; 
10304
....................    res = res*y*y + pat[2]; 
10305
....................    res = res*y*y + pat[3]; 
10305
....................    res = res*y*y + pat[3]; 
10306
....................  
10306
....................  
10307
....................    r = qat[0]*y*y + qat[1]; 
10307
....................    r = qat[0]*y*y + qat[1]; 
10308
....................    r = r*y*y + qat[2]; 
10308
....................    r = r*y*y + qat[2]; 
10309
....................    r = r*y*y + qat[3]; 
10309
....................    r = r*y*y + qat[3]; 
10310
....................  
10310
....................  
10311
....................    res = y*res/r; 
10311
....................    res = y*res/r; 
10312
....................  
10312
....................  
10313
....................  
10313
....................  
10314
....................    if (flag)                              // for |x| > 1 
10314
....................    if (flag)                              // for |x| > 1 
10315
....................       res = PI_DIV_BY_TWO - res; 
10315
....................       res = PI_DIV_BY_TWO - res; 
10316
....................    if (s) 
10316
....................    if (s) 
10317
....................       res = -res; 
10317
....................       res = -res; 
10318
....................  
10318
....................  
10319
....................    return(res); 
10319
....................    return(res); 
10320
.................... } 
10320
.................... } 
10321
....................  
10321
....................  
10322
.................... // Overloaded function atan() for data type - Float64 
10322
.................... // Overloaded function atan() for data type - Float64 
10323
.................... float64 atan(float64 x) 
10323
.................... float64 atan(float64 x) 
10324
.................... { 
10324
.................... { 
10325
....................    float64 y, res, r; 
10325
....................    float64 y, res, r; 
10326
....................    int1 s, flag; 
10326
....................    int1 s, flag; 
10327
....................  
10327
....................  
10328
....................    s = 0; 
10328
....................    s = 0; 
10329
....................    flag = 0; 
10329
....................    flag = 0; 
10330
....................    y = x; 
10330
....................    y = x; 
10331
....................  
10331
....................  
10332
....................    if (x < 0) 
10332
....................    if (x < 0) 
10333
....................    { 
10333
....................    { 
10334
....................       s = 1; 
10334
....................       s = 1; 
10335
....................       y = -y; 
10335
....................       y = -y; 
10336
....................    } 
10336
....................    } 
10337
....................  
10337
....................  
10338
....................    if (y > 1.0) 
10338
....................    if (y > 1.0) 
10339
....................    { 
10339
....................    { 
10340
....................       y = 1.0/y; 
10340
....................       y = 1.0/y; 
10341
....................       flag = 1; 
10341
....................       flag = 1; 
10342
....................    } 
10342
....................    } 
10343
....................  
10343
....................  
10344
....................    res = pat[0]*y*y + pat[1]; 
10344
....................    res = pat[0]*y*y + pat[1]; 
10345
....................    res = res*y*y + pat[2]; 
10345
....................    res = res*y*y + pat[2]; 
10346
....................    res = res*y*y + pat[3]; 
10346
....................    res = res*y*y + pat[3]; 
10347
....................  
10347
....................  
10348
....................    r = qat[0]*y*y + qat[1]; 
10348
....................    r = qat[0]*y*y + qat[1]; 
10349
....................    r = r*y*y + qat[2]; 
10349
....................    r = r*y*y + qat[2]; 
10350
....................    r = r*y*y + qat[3]; 
10350
....................    r = r*y*y + qat[3]; 
10351
....................  
10351
....................  
10352
....................    res = y*res/r; 
10352
....................    res = y*res/r; 
10353
....................  
10353
....................  
10354
....................  
10354
....................  
10355
....................    if (flag)                              // for |x| > 1 
10355
....................    if (flag)                              // for |x| > 1 
10356
....................       res = PI_DIV_BY_TWO - res; 
10356
....................       res = PI_DIV_BY_TWO - res; 
10357
....................    if (s) 
10357
....................    if (s) 
10358
....................       res = -res; 
10358
....................       res = -res; 
10359
....................  
10359
....................  
10360
....................    return(res); 
10360
....................    return(res); 
10361
.................... } 
10361
.................... } 
10362
.................... #endif 
10362
.................... #endif 
10363
....................  
10363
....................  
10364
.................... ///////////////////////////////////////////////////////////////////////////// 
10364
.................... ///////////////////////////////////////////////////////////////////////////// 
10365
.................... //   float atan2(float y, float x) 
10365
.................... //   float atan2(float y, float x) 
10366
.................... ///////////////////////////////////////////////////////////////////////////// 
10366
.................... ///////////////////////////////////////////////////////////////////////////// 
10367
.................... // Description :computes the principal value of arc tangent of y/x, using the 
10367
.................... // Description :computes the principal value of arc tangent of y/x, using the 
10368
.................... // signs of both the arguments to determine the quadrant of the return value 
10368
.................... // signs of both the arguments to determine the quadrant of the return value 
10369
.................... // Returns : returns the arc tangent of y/x. 
10369
.................... // Returns : returns the arc tangent of y/x. 
10370
.................... // Date : N/A 
10370
.................... // Date : N/A 
10371
.................... // 
10371
.................... // 
10372
....................  
10372
....................  
10373
.................... float32 atan2(float32 y,float32 x) 
10373
.................... float32 atan2(float32 y,float32 x) 
10374
.................... { 
10374
.................... { 
10375
....................    float32 z; 
10375
....................    float32 z; 
10376
....................    int1 sign; 
10376
....................    int1 sign; 
10377
....................    unsigned int8 quad; 
10377
....................    unsigned int8 quad; 
10378
....................    sign=0; 
10378
....................    sign=0; 
10379
....................    quad=0; //quadrant 
10379
....................    quad=0; //quadrant 
10380
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10380
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10381
....................    if(y<0.0) 
10381
....................    if(y<0.0) 
10382
....................    { 
10382
....................    { 
10383
....................       sign=1; 
10383
....................       sign=1; 
10384
....................       y=-y; 
10384
....................       y=-y; 
10385
....................    } 
10385
....................    } 
10386
....................    if(x<0.0) 
10386
....................    if(x<0.0) 
10387
....................    { 
10387
....................    { 
10388
....................       x=-x; 
10388
....................       x=-x; 
10389
....................    } 
10389
....................    } 
10390
....................    if (x==0.0) 
10390
....................    if (x==0.0) 
10391
....................    { 
10391
....................    { 
10392
....................       if(y==0.0) 
10392
....................       if(y==0.0) 
10393
....................       { 
10393
....................       { 
10394
....................       #ifdef _ERRNO 
10394
....................       #ifdef _ERRNO 
10395
....................       { 
10395
....................       { 
10396
....................          errno=EDOM; 
10396
....................          errno=EDOM; 
10397
....................       } 
10397
....................       } 
10398
....................       #endif 
10398
....................       #endif 
10399
....................       } 
10399
....................       } 
10400
....................       else 
10400
....................       else 
10401
....................       { 
10401
....................       { 
10402
....................          if(sign) 
10402
....................          if(sign) 
10403
....................          { 
10403
....................          { 
10404
....................          return (-(PI_DIV_BY_TWO)); 
10404
....................          return (-(PI_DIV_BY_TWO)); 
10405
....................          } 
10405
....................          } 
10406
....................          else 
10406
....................          else 
10407
....................          { 
10407
....................          { 
10408
....................          return (PI_DIV_BY_TWO); 
10408
....................          return (PI_DIV_BY_TWO); 
10409
....................          } 
10409
....................          } 
10410
....................       } 
10410
....................       } 
10411
....................    } 
10411
....................    } 
10412
....................    else 
10412
....................    else 
10413
....................    { 
10413
....................    { 
10414
....................       z=y/x; 
10414
....................       z=y/x; 
10415
....................       switch(quad) 
10415
....................       switch(quad) 
10416
....................       { 
10416
....................       { 
10417
....................          case 1: 
10417
....................          case 1: 
10418
....................          { 
10418
....................          { 
10419
....................             return atan(z); 
10419
....................             return atan(z); 
10420
....................             break; 
10420
....................             break; 
10421
....................          } 
10421
....................          } 
10422
....................          case 2: 
10422
....................          case 2: 
10423
....................          { 
10423
....................          { 
10424
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10424
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10425
....................             return (PI-atan(z)); 
10425
....................             return (PI-atan(z)); 
10426
....................             break; 
10426
....................             break; 
10427
....................          } 
10427
....................          } 
10428
....................          case 3: 
10428
....................          case 3: 
10429
....................          { 
10429
....................          { 
10430
....................             return (atan(z)-PI); 
10430
....................             return (atan(z)-PI); 
10431
....................             break; 
10431
....................             break; 
10432
....................          } 
10432
....................          } 
10433
....................          case 4: 
10433
....................          case 4: 
10434
....................          { 
10434
....................          { 
10435
....................             return (-atan(z)); 
10435
....................             return (-atan(z)); 
10436
....................             break; 
10436
....................             break; 
10437
....................          } 
10437
....................          } 
10438
....................       } 
10438
....................       } 
10439
....................    } 
10439
....................    } 
10440
.................... } 
10440
.................... } 
10441
....................  
10441
....................  
10442
.................... //Overloaded functions for atan2() for PCD 
10442
.................... //Overloaded functions for atan2() for PCD 
10443
.................... // Overloaded function atan2() for data type - Float48 
10443
.................... // Overloaded function atan2() for data type - Float48 
10444
.................... #if defined(__PCD__) 
10444
.................... #if defined(__PCD__) 
10445
.................... float48 atan2(float48 y,float48 x) 
10445
.................... float48 atan2(float48 y,float48 x) 
10446
.................... { 
10446
.................... { 
10447
....................    float48 z; 
10447
....................    float48 z; 
10448
....................    int1 sign; 
10448
....................    int1 sign; 
10449
....................    unsigned int8 quad; 
10449
....................    unsigned int8 quad; 
10450
....................    sign=0; 
10450
....................    sign=0; 
10451
....................    quad=0; //quadrant 
10451
....................    quad=0; //quadrant 
10452
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10452
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10453
....................    if(y<0.0) 
10453
....................    if(y<0.0) 
10454
....................    { 
10454
....................    { 
10455
....................       sign=1; 
10455
....................       sign=1; 
10456
....................       y=-y; 
10456
....................       y=-y; 
10457
....................    } 
10457
....................    } 
10458
....................    if(x<0.0) 
10458
....................    if(x<0.0) 
10459
....................    { 
10459
....................    { 
10460
....................       x=-x; 
10460
....................       x=-x; 
10461
....................    } 
10461
....................    } 
10462
....................    if (x==0.0) 
10462
....................    if (x==0.0) 
10463
....................    { 
10463
....................    { 
10464
....................       if(y==0.0) 
10464
....................       if(y==0.0) 
10465
....................       { 
10465
....................       { 
10466
....................       #ifdef _ERRNO 
10466
....................       #ifdef _ERRNO 
10467
....................       { 
10467
....................       { 
10468
....................          errno=EDOM; 
10468
....................          errno=EDOM; 
10469
....................       } 
10469
....................       } 
10470
....................       #endif 
10470
....................       #endif 
10471
....................       } 
10471
....................       } 
10472
....................       else 
10472
....................       else 
10473
....................       { 
10473
....................       { 
10474
....................          if(sign) 
10474
....................          if(sign) 
10475
....................          { 
10475
....................          { 
10476
....................          return (-(PI_DIV_BY_TWO)); 
10476
....................          return (-(PI_DIV_BY_TWO)); 
10477
....................          } 
10477
....................          } 
10478
....................          else 
10478
....................          else 
10479
....................          { 
10479
....................          { 
10480
....................          return (PI_DIV_BY_TWO); 
10480
....................          return (PI_DIV_BY_TWO); 
10481
....................          } 
10481
....................          } 
10482
....................       } 
10482
....................       } 
10483
....................    } 
10483
....................    } 
10484
....................    else 
10484
....................    else 
10485
....................    { 
10485
....................    { 
10486
....................       z=y/x; 
10486
....................       z=y/x; 
10487
....................       switch(quad) 
10487
....................       switch(quad) 
10488
....................       { 
10488
....................       { 
10489
....................          case 1: 
10489
....................          case 1: 
10490
....................          { 
10490
....................          { 
10491
....................             return atan(z); 
10491
....................             return atan(z); 
10492
....................             break; 
10492
....................             break; 
10493
....................          } 
10493
....................          } 
10494
....................          case 2: 
10494
....................          case 2: 
10495
....................          { 
10495
....................          { 
10496
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10496
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10497
....................             return (PI-atan(z)); 
10497
....................             return (PI-atan(z)); 
10498
....................             break; 
10498
....................             break; 
10499
....................          } 
10499
....................          } 
10500
....................          case 3: 
10500
....................          case 3: 
10501
....................          { 
10501
....................          { 
10502
....................             return (atan(z)-PI); 
10502
....................             return (atan(z)-PI); 
10503
....................             break; 
10503
....................             break; 
10504
....................          } 
10504
....................          } 
10505
....................          case 4: 
10505
....................          case 4: 
10506
....................          { 
10506
....................          { 
10507
....................             return (-atan(z)); 
10507
....................             return (-atan(z)); 
10508
....................             break; 
10508
....................             break; 
10509
....................          } 
10509
....................          } 
10510
....................       } 
10510
....................       } 
10511
....................    } 
10511
....................    } 
10512
.................... } 
10512
.................... } 
10513
....................  
10513
....................  
10514
.................... // Overloaded function atan2() for data type - Float64 
10514
.................... // Overloaded function atan2() for data type - Float64 
10515
.................... float64 atan2(float64 y,float64 x) 
10515
.................... float64 atan2(float64 y,float64 x) 
10516
.................... { 
10516
.................... { 
10517
....................    float64 z; 
10517
....................    float64 z; 
10518
....................    int1 sign; 
10518
....................    int1 sign; 
10519
....................    unsigned int8 quad; 
10519
....................    unsigned int8 quad; 
10520
....................    sign=0; 
10520
....................    sign=0; 
10521
....................    quad=0; //quadrant 
10521
....................    quad=0; //quadrant 
10522
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10522
....................    quad=((y<=0.0)?((x<=0.0)?3:4):((x<0.0)?2:1)); 
10523
....................    if(y<0.0) 
10523
....................    if(y<0.0) 
10524
....................    { 
10524
....................    { 
10525
....................       sign=1; 
10525
....................       sign=1; 
10526
....................       y=-y; 
10526
....................       y=-y; 
10527
....................    } 
10527
....................    } 
10528
....................    if(x<0.0) 
10528
....................    if(x<0.0) 
10529
....................    { 
10529
....................    { 
10530
....................       x=-x; 
10530
....................       x=-x; 
10531
....................    } 
10531
....................    } 
10532
....................    if (x==0.0) 
10532
....................    if (x==0.0) 
10533
....................    { 
10533
....................    { 
10534
....................       if(y==0.0) 
10534
....................       if(y==0.0) 
10535
....................       { 
10535
....................       { 
10536
....................       #ifdef _ERRNO 
10536
....................       #ifdef _ERRNO 
10537
....................       { 
10537
....................       { 
10538
....................          errno=EDOM; 
10538
....................          errno=EDOM; 
10539
....................       } 
10539
....................       } 
10540
....................       #endif 
10540
....................       #endif 
10541
....................       } 
10541
....................       } 
10542
....................       else 
10542
....................       else 
10543
....................       { 
10543
....................       { 
10544
....................          if(sign) 
10544
....................          if(sign) 
10545
....................          { 
10545
....................          { 
10546
....................          return (-(PI_DIV_BY_TWO)); 
10546
....................          return (-(PI_DIV_BY_TWO)); 
10547
....................          } 
10547
....................          } 
10548
....................          else 
10548
....................          else 
10549
....................          { 
10549
....................          { 
10550
....................          return (PI_DIV_BY_TWO); 
10550
....................          return (PI_DIV_BY_TWO); 
10551
....................          } 
10551
....................          } 
10552
....................       } 
10552
....................       } 
10553
....................    } 
10553
....................    } 
10554
....................    else 
10554
....................    else 
10555
....................    { 
10555
....................    { 
10556
....................       z=y/x; 
10556
....................       z=y/x; 
10557
....................       switch(quad) 
10557
....................       switch(quad) 
10558
....................       { 
10558
....................       { 
10559
....................          case 1: 
10559
....................          case 1: 
10560
....................          { 
10560
....................          { 
10561
....................             return atan(z); 
10561
....................             return atan(z); 
10562
....................             break; 
10562
....................             break; 
10563
....................          } 
10563
....................          } 
10564
....................          case 2: 
10564
....................          case 2: 
10565
....................          { 
10565
....................          { 
10566
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10566
.................... //            return (atan(z)+PI_DIV_BY_TWO);  //2L3122 
10567
....................             return (PI-atan(z)); 
10567
....................             return (PI-atan(z)); 
10568
....................             break; 
10568
....................             break; 
10569
....................          } 
10569
....................          } 
10570
....................          case 3: 
10570
....................          case 3: 
10571
....................          { 
10571
....................          { 
10572
....................             return (atan(z)-PI); 
10572
....................             return (atan(z)-PI); 
10573
....................             break; 
10573
....................             break; 
10574
....................          } 
10574
....................          } 
10575
....................          case 4: 
10575
....................          case 4: 
10576
....................          { 
10576
....................          { 
10577
....................             return (-atan(z)); 
10577
....................             return (-atan(z)); 
10578
....................             break; 
10578
....................             break; 
10579
....................          } 
10579
....................          } 
10580
....................       } 
10580
....................       } 
10581
....................    } 
10581
....................    } 
10582
.................... } 
10582
.................... } 
10583
.................... #endif 
10583
.................... #endif 
10584
....................  
10584
....................  
10585
.................... //////////////////// Hyperbolic functions //////////////////// 
10585
.................... //////////////////// Hyperbolic functions //////////////////// 
10586
....................  
10586
....................  
10587
.................... //////////////////////////////////////////////////////////////////////////// 
10587
.................... //////////////////////////////////////////////////////////////////////////// 
10588
.................... //   float cosh(float x) 
10588
.................... //   float cosh(float x) 
10589
.................... //////////////////////////////////////////////////////////////////////////// 
10589
.................... //////////////////////////////////////////////////////////////////////////// 
10590
.................... // Description : Computes the hyperbolic cosine value of x 
10590
.................... // Description : Computes the hyperbolic cosine value of x 
10591
.................... // Returns : returns the hyperbolic cosine value of x 
10591
.................... // Returns : returns the hyperbolic cosine value of x 
10592
.................... // Date : N/A 
10592
.................... // Date : N/A 
10593
.................... // 
10593
.................... // 
10594
....................  
10594
....................  
10595
.................... float32 cosh(float32 x) 
10595
.................... float32 cosh(float32 x) 
10596
.................... { 
10596
.................... { 
10597
....................    return ((exp(x)+exp(-x))/2); 
10597
....................    return ((exp(x)+exp(-x))/2); 
10598
.................... } 
10598
.................... } 
10599
.................... //Overloaded functions for cosh() for PCD 
10599
.................... //Overloaded functions for cosh() for PCD 
10600
.................... // Overloaded function cosh() for data type - Float48 
10600
.................... // Overloaded function cosh() for data type - Float48 
10601
.................... #if defined(__PCD__) 
10601
.................... #if defined(__PCD__) 
10602
.................... float48 cosh(float48 x) 
10602
.................... float48 cosh(float48 x) 
10603
.................... { 
10603
.................... { 
10604
....................    return ((exp(x)+exp(-x))/2); 
10604
....................    return ((exp(x)+exp(-x))/2); 
10605
.................... } 
10605
.................... } 
10606
....................  
10606
....................  
10607
.................... // Overloaded function cosh() for data type - Float64 
10607
.................... // Overloaded function cosh() for data type - Float64 
10608
.................... float64 cosh(float64 x) 
10608
.................... float64 cosh(float64 x) 
10609
.................... { 
10609
.................... { 
10610
....................    return ((exp(x)+exp(-x))/2); 
10610
....................    return ((exp(x)+exp(-x))/2); 
10611
.................... } 
10611
.................... } 
10612
.................... #endif 
10612
.................... #endif 
10613
....................  
10613
....................  
10614
.................... //////////////////////////////////////////////////////////////////////////// 
10614
.................... //////////////////////////////////////////////////////////////////////////// 
10615
.................... //   float sinh(float x) 
10615
.................... //   float sinh(float x) 
10616
.................... //////////////////////////////////////////////////////////////////////////// 
10616
.................... //////////////////////////////////////////////////////////////////////////// 
10617
.................... // Description : Computes the hyperbolic sine value of x 
10617
.................... // Description : Computes the hyperbolic sine value of x 
10618
.................... // Returns : returns the hyperbolic sine value of x 
10618
.................... // Returns : returns the hyperbolic sine value of x 
10619
.................... // Date : N/A 
10619
.................... // Date : N/A 
10620
.................... // 
10620
.................... // 
10621
....................  
10621
....................  
10622
.................... float32 sinh(float32 x) 
10622
.................... float32 sinh(float32 x) 
10623
.................... { 
10623
.................... { 
10624
....................  
10624
....................  
10625
....................    return ((exp(x) - exp(-x))/2); 
10625
....................    return ((exp(x) - exp(-x))/2); 
10626
.................... } 
10626
.................... } 
10627
.................... //Overloaded functions for sinh() for PCD 
10627
.................... //Overloaded functions for sinh() for PCD 
10628
.................... // Overloaded function sinh() for data type - Float48 
10628
.................... // Overloaded function sinh() for data type - Float48 
10629
.................... #if defined(__PCD__) 
10629
.................... #if defined(__PCD__) 
10630
.................... float48 sinh(float48 x) 
10630
.................... float48 sinh(float48 x) 
10631
.................... { 
10631
.................... { 
10632
....................  
10632
....................  
10633
....................    return ((exp(x) - exp(-x))/2); 
10633
....................    return ((exp(x) - exp(-x))/2); 
10634
.................... } 
10634
.................... } 
10635
....................  
10635
....................  
10636
.................... // Overloaded function sinh() for data type - Float48 
10636
.................... // Overloaded function sinh() for data type - Float48 
10637
.................... float64 sinh(float64 x) 
10637
.................... float64 sinh(float64 x) 
10638
.................... { 
10638
.................... { 
10639
....................  
10639
....................  
10640
....................    return ((exp(x) - exp(-x))/2); 
10640
....................    return ((exp(x) - exp(-x))/2); 
10641
.................... } 
10641
.................... } 
10642
.................... #endif 
10642
.................... #endif 
10643
....................  
10643
....................  
10644
.................... //////////////////////////////////////////////////////////////////////////// 
10644
.................... //////////////////////////////////////////////////////////////////////////// 
10645
.................... //   float tanh(float x) 
10645
.................... //   float tanh(float x) 
10646
.................... //////////////////////////////////////////////////////////////////////////// 
10646
.................... //////////////////////////////////////////////////////////////////////////// 
10647
.................... // Description : Computes the hyperbolic tangent value of x 
10647
.................... // Description : Computes the hyperbolic tangent value of x 
10648
.................... // Returns : returns the hyperbolic tangent value of x 
10648
.................... // Returns : returns the hyperbolic tangent value of x 
10649
.................... // Date : N/A 
10649
.................... // Date : N/A 
10650
.................... // 
10650
.................... // 
10651
....................  
10651
....................  
10652
.................... float32 tanh(float32 x) 
10652
.................... float32 tanh(float32 x) 
10653
.................... { 
10653
.................... { 
10654
....................    return(sinh(x)/cosh(x)); 
10654
....................    return(sinh(x)/cosh(x)); 
10655
.................... } 
10655
.................... } 
10656
.................... //Overloaded functions for tanh() for PCD 
10656
.................... //Overloaded functions for tanh() for PCD 
10657
.................... // Overloaded function tanh() for data type - Float48 
10657
.................... // Overloaded function tanh() for data type - Float48 
10658
.................... #if defined(__PCD__) 
10658
.................... #if defined(__PCD__) 
10659
.................... float48 tanh(float48 x) 
10659
.................... float48 tanh(float48 x) 
10660
.................... { 
10660
.................... { 
10661
....................    return(sinh(x)/cosh(x)); 
10661
....................    return(sinh(x)/cosh(x)); 
10662
.................... } 
10662
.................... } 
10663
....................  
10663
....................  
10664
.................... // Overloaded function tanh() for data type - Float64 
10664
.................... // Overloaded function tanh() for data type - Float64 
10665
.................... float64 tanh(float64 x) 
10665
.................... float64 tanh(float64 x) 
10666
.................... { 
10666
.................... { 
10667
....................    return(sinh(x)/cosh(x)); 
10667
....................    return(sinh(x)/cosh(x)); 
10668
.................... } 
10668
.................... } 
10669
.................... #endif 
10669
.................... #endif 
10670
....................  
10670
....................  
10671
.................... //////////////////////////////////////////////////////////////////////////// 
10671
.................... //////////////////////////////////////////////////////////////////////////// 
10672
.................... //   float frexp(float x, signed int *exp) 
10672
.................... //   float frexp(float x, signed int *exp) 
10673
.................... //////////////////////////////////////////////////////////////////////////// 
10673
.................... //////////////////////////////////////////////////////////////////////////// 
10674
.................... // Description : breaks a floating point number into a normalized fraction and an integral 
10674
.................... // Description : breaks a floating point number into a normalized fraction and an integral 
10675
.................... // power of 2. It stores the integer in the signed int object pointed to by exp. 
10675
.................... // power of 2. It stores the integer in the signed int object pointed to by exp. 
10676
.................... // Returns : returns the value x, such that x is a double with magnitude in the interval 
10676
.................... // Returns : returns the value x, such that x is a double with magnitude in the interval 
10677
.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero, 
10677
.................... // [1/2,1) or zero, and value equals x times 2 raised to the power *exp.If value is zero, 
10678
.................... // both parts of the result are zero. 
10678
.................... // both parts of the result are zero. 
10679
.................... // Date : N/A 
10679
.................... // Date : N/A 
10680
.................... // 
10680
.................... // 
10681
....................  
10681
....................  
10682
.................... #define LOG2 .30102999566398119521 
10682
.................... #define LOG2 .30102999566398119521 
10683
.................... float32 frexp(float32 x, signed int8 *exp) 
10683
.................... float32 frexp(float32 x, signed int8 *exp) 
10684
.................... { 
10684
.................... { 
10685
....................    float32 res; 
10685
....................    float32 res; 
10686
....................    int1 sign = 0; 
10686
....................    int1 sign = 0; 
10687
....................    if(x == 0.0) 
10687
....................    if(x == 0.0) 
10688
....................    { 
10688
....................    { 
10689
....................       *exp=0; 
10689
....................       *exp=0; 
10690
....................       return (0.0); 
10690
....................       return (0.0); 
10691
....................    } 
10691
....................    } 
10692
....................    if(x < 0.0) 
10692
....................    if(x < 0.0) 
10693
....................    { 
10693
....................    { 
10694
....................      x=-x; 
10694
....................      x=-x; 
10695
....................      sign=1; 
10695
....................      sign=1; 
10696
....................    } 
10696
....................    } 
10697
....................    if (x > 1.0) 
10697
....................    if (x > 1.0) 
10698
....................    { 
10698
....................    { 
10699
....................       *exp=(ceil(log10(x)/LOG2)); 
10699
....................       *exp=(ceil(log10(x)/LOG2)); 
10700
....................       res=x/(pow(2, *exp)); 
10700
....................       res=x/(pow(2, *exp)); 
10701
....................       if (res == 1) 
10701
....................       if (res == 1) 
10702
....................       { 
10702
....................       { 
10703
....................          *exp=*exp+1; 
10703
....................          *exp=*exp+1; 
10704
....................           res=.5; 
10704
....................           res=.5; 
10705
....................       } 
10705
....................       } 
10706
....................    } 
10706
....................    } 
10707
....................    else 
10707
....................    else 
10708
....................    { 
10708
....................    { 
10709
....................       if(x < 0.5) 
10709
....................       if(x < 0.5) 
10710
....................       { 
10710
....................       { 
10711
....................          *exp=-1; 
10711
....................          *exp=-1; 
10712
....................          res=x*2; 
10712
....................          res=x*2; 
10713
....................       } 
10713
....................       } 
10714
....................       else 
10714
....................       else 
10715
....................       { 
10715
....................       { 
10716
....................          *exp=0; 
10716
....................          *exp=0; 
10717
....................           res=x; 
10717
....................           res=x; 
10718
....................       } 
10718
....................       } 
10719
....................    } 
10719
....................    } 
10720
....................    if(sign) 
10720
....................    if(sign) 
10721
....................    { 
10721
....................    { 
10722
....................       res=-res; 
10722
....................       res=-res; 
10723
....................    } 
10723
....................    } 
10724
....................    return res; 
10724
....................    return res; 
10725
.................... } 
10725
.................... } 
10726
....................  
10726
....................  
10727
.................... //Overloaded functions for frexp() for PCD 
10727
.................... //Overloaded functions for frexp() for PCD 
10728
.................... // Overloaded function frexp() for data type - Float48 
10728
.................... // Overloaded function frexp() for data type - Float48 
10729
.................... #if defined(__PCD__) 
10729
.................... #if defined(__PCD__) 
10730
.................... float48 frexp(float48 x, signed int8 *exp) 
10730
.................... float48 frexp(float48 x, signed int8 *exp) 
10731
.................... { 
10731
.................... { 
10732
....................    float48 res; 
10732
....................    float48 res; 
10733
....................    int1 sign = 0; 
10733
....................    int1 sign = 0; 
10734
....................    if(x == 0.0) 
10734
....................    if(x == 0.0) 
10735
....................    { 
10735
....................    { 
10736
....................       *exp=0; 
10736
....................       *exp=0; 
10737
....................       return (0.0); 
10737
....................       return (0.0); 
10738
....................    } 
10738
....................    } 
10739
....................    if(x < 0.0) 
10739
....................    if(x < 0.0) 
10740
....................    { 
10740
....................    { 
10741
....................      x=-x; 
10741
....................      x=-x; 
10742
....................      sign=1; 
10742
....................      sign=1; 
10743
....................    } 
10743
....................    } 
10744
....................    if (x > 1.0) 
10744
....................    if (x > 1.0) 
10745
....................    { 
10745
....................    { 
10746
....................       *exp=(ceil(log10(x)/LOG2)); 
10746
....................       *exp=(ceil(log10(x)/LOG2)); 
10747
....................       res=x/(pow(2, *exp)); 
10747
....................       res=x/(pow(2, *exp)); 
10748
....................       if (res == 1) 
10748
....................       if (res == 1) 
10749
....................       { 
10749
....................       { 
10750
....................          *exp=*exp+1; 
10750
....................          *exp=*exp+1; 
10751
....................           res=.5; 
10751
....................           res=.5; 
10752
....................       } 
10752
....................       } 
10753
....................    } 
10753
....................    } 
10754
....................    else 
10754
....................    else 
10755
....................    { 
10755
....................    { 
10756
....................       if(x < 0.5) 
10756
....................       if(x < 0.5) 
10757
....................       { 
10757
....................       { 
10758
....................          *exp=-1; 
10758
....................          *exp=-1; 
10759
....................          res=x*2; 
10759
....................          res=x*2; 
10760
....................       } 
10760
....................       } 
10761
....................       else 
10761
....................       else 
10762
....................       { 
10762
....................       { 
10763
....................          *exp=0; 
10763
....................          *exp=0; 
10764
....................           res=x; 
10764
....................           res=x; 
10765
....................       } 
10765
....................       } 
10766
....................    } 
10766
....................    } 
10767
....................    if(sign) 
10767
....................    if(sign) 
10768
....................    { 
10768
....................    { 
10769
....................       res=-res; 
10769
....................       res=-res; 
10770
....................    } 
10770
....................    } 
10771
....................    return res; 
10771
....................    return res; 
10772
.................... } 
10772
.................... } 
10773
....................  
10773
....................  
10774
.................... // Overloaded function frexp() for data type - Float64 
10774
.................... // Overloaded function frexp() for data type - Float64 
10775
.................... float64 frexp(float64 x, signed int8 *exp) 
10775
.................... float64 frexp(float64 x, signed int8 *exp) 
10776
.................... { 
10776
.................... { 
10777
....................    float64 res; 
10777
....................    float64 res; 
10778
....................    int1 sign = 0; 
10778
....................    int1 sign = 0; 
10779
....................    if(x == 0.0) 
10779
....................    if(x == 0.0) 
10780
....................    { 
10780
....................    { 
10781
....................       *exp=0; 
10781
....................       *exp=0; 
10782
....................       return (0.0); 
10782
....................       return (0.0); 
10783
....................    } 
10783
....................    } 
10784
....................    if(x < 0.0) 
10784
....................    if(x < 0.0) 
10785
....................    { 
10785
....................    { 
10786
....................      x=-x; 
10786
....................      x=-x; 
10787
....................      sign=1; 
10787
....................      sign=1; 
10788
....................    } 
10788
....................    } 
10789
....................    if (x > 1.0) 
10789
....................    if (x > 1.0) 
10790
....................    { 
10790
....................    { 
10791
....................       *exp=(ceil(log10(x)/LOG2)); 
10791
....................       *exp=(ceil(log10(x)/LOG2)); 
10792
....................       res=x/(pow(2, *exp)); 
10792
....................       res=x/(pow(2, *exp)); 
10793
....................       if (res == 1) 
10793
....................       if (res == 1) 
10794
....................       { 
10794
....................       { 
10795
....................          *exp=*exp+1; 
10795
....................          *exp=*exp+1; 
10796
....................           res=.5; 
10796
....................           res=.5; 
10797
....................       } 
10797
....................       } 
10798
....................    } 
10798
....................    } 
10799
....................    else 
10799
....................    else 
10800
....................    { 
10800
....................    { 
10801
....................       if(x < 0.5) 
10801
....................       if(x < 0.5) 
10802
....................       { 
10802
....................       { 
10803
....................          *exp=-1; 
10803
....................          *exp=-1; 
10804
....................          res=x*2; 
10804
....................          res=x*2; 
10805
....................       } 
10805
....................       } 
10806
....................       else 
10806
....................       else 
10807
....................       { 
10807
....................       { 
10808
....................          *exp=0; 
10808
....................          *exp=0; 
10809
....................           res=x; 
10809
....................           res=x; 
10810
....................       } 
10810
....................       } 
10811
....................    } 
10811
....................    } 
10812
....................    if(sign) 
10812
....................    if(sign) 
10813
....................    { 
10813
....................    { 
10814
....................       res=-res; 
10814
....................       res=-res; 
10815
....................    } 
10815
....................    } 
10816
....................    return res; 
10816
....................    return res; 
10817
.................... } 
10817
.................... } 
10818
.................... #endif 
10818
.................... #endif 
10819
....................  
10819
....................  
10820
.................... ////////////////////////////////////////////////////////////////////////////// 
10820
.................... ////////////////////////////////////////////////////////////////////////////// 
10821
.................... //   float ldexp(float x, signed int *exp) 
10821
.................... //   float ldexp(float x, signed int *exp) 
10822
.................... ////////////////////////////////////////////////////////////////////////////// 
10822
.................... ////////////////////////////////////////////////////////////////////////////// 
10823
.................... // Description : multiplies a floating point number by an integral power of 2. 
10823
.................... // Description : multiplies a floating point number by an integral power of 2. 
10824
.................... // Returns : returns the value of x times 2 raised to the power exp. 
10824
.................... // Returns : returns the value of x times 2 raised to the power exp. 
10825
.................... // Date : N/A 
10825
.................... // Date : N/A 
10826
.................... // 
10826
.................... // 
10827
....................  
10827
....................  
10828
.................... float32 ldexp(float32 value, signed int8 exp) 
10828
.................... float32 ldexp(float32 value, signed int8 exp) 
10829
.................... { 
10829
.................... { 
10830
....................    return (value * pow(2,exp)); 
10830
....................    return (value * pow(2,exp)); 
10831
.................... } 
10831
.................... } 
10832
.................... //Overloaded functions for ldexp() for PCD 
10832
.................... //Overloaded functions for ldexp() for PCD 
10833
.................... // Overloaded function ldexp() for data type - Float48 
10833
.................... // Overloaded function ldexp() for data type - Float48 
10834
....................  
10834
....................  
10835
.................... #if defined(__PCD__) 
10835
.................... #if defined(__PCD__) 
10836
.................... float48 ldexp(float48 value, signed int8 exp) 
10836
.................... float48 ldexp(float48 value, signed int8 exp) 
10837
.................... { 
10837
.................... { 
10838
....................    return (value * pow(2,exp)); 
10838
....................    return (value * pow(2,exp)); 
10839
.................... } 
10839
.................... } 
10840
.................... // Overloaded function ldexp() for data type - Float64 
10840
.................... // Overloaded function ldexp() for data type - Float64 
10841
.................... float64 ldexp(float64 value, signed int8 exp) 
10841
.................... float64 ldexp(float64 value, signed int8 exp) 
10842
.................... { 
10842
.................... { 
10843
....................    return (value * pow(2,exp)); 
10843
....................    return (value * pow(2,exp)); 
10844
.................... } 
10844
.................... } 
10845
.................... #endif 
10845
.................... #endif 
10846
....................  
10846
....................  
10847
.................... #endif 
10847
.................... #endif 
10848
....................  
10848
....................  
10849
....................  
10849
....................  
10850
.................... float quadraticerror(float average, float buf[], int16 size) // compute average quadratic error 
10850
.................... float quadraticerror(float average, float buf[], int16 size) // compute average quadratic error 
10851
.................... { 
10851
.................... { 
10852
....................   int16 i; 
10852
....................   int16 i; 
10853
....................   float err=0; 
10853
....................   float err=0; 
10854
1AE2:  MOVLB  6
10854
1AE2:  MOVLB  6
10855
1AE4:  CLRF   xD4
10855
1AE4:  CLRF   xD4
10856
1AE6:  CLRF   xD5
10856
1AE6:  CLRF   xD5
10857
1AE8:  CLRF   xD6
10857
1AE8:  CLRF   xD6
10858
1AEA:  CLRF   xD7
10858
1AEA:  CLRF   xD7
10859
....................  
10859
....................  
10860
....................    for(i=0; i<size; i++) err += (buf[i]-average)*(buf[i]-average);      // sum quadratic errors    
10860
....................    for(i=0; i<size; i++) err += (buf[i]-average)*(buf[i]-average);      // sum quadratic errors    
10861
1AEC:  CLRF   xD3
10861
1AEC:  CLRF   xD3
10862
1AEE:  CLRF   xD2
10862
1AEE:  CLRF   xD2
10863
1AF0:  MOVF   xD3,W
10863
1AF0:  MOVF   xD3,W
10864
1AF2:  SUBWF  xD1,W
10864
1AF2:  SUBWF  xD1,W
10865
1AF4:  BTFSS  FD8.0
10865
1AF4:  BTFSS  FD8.0
10866
1AF6:  BRA    1C48
10866
1AF6:  BRA    1C48
10867
1AF8:  BNZ   1B02
10867
1AF8:  BNZ   1B02
10868
1AFA:  MOVF   xD0,W
10868
1AFA:  MOVF   xD0,W
10869
1AFC:  SUBWF  xD2,W
10869
1AFC:  SUBWF  xD2,W
10870
1AFE:  BTFSC  FD8.0
10870
1AFE:  BTFSC  FD8.0
10871
1B00:  BRA    1C48
10871
1B00:  BRA    1C48
10872
1B02:  RLCF   xD2,W
10872
1B02:  RLCF   xD2,W
10873
1B04:  MOVWF  02
10873
1B04:  MOVWF  02
10874
1B06:  RLCF   xD3,W
10874
1B06:  RLCF   xD3,W
10875
1B08:  MOVWF  03
10875
1B08:  MOVWF  03
10876
1B0A:  RLCF   02,F
10876
1B0A:  RLCF   02,F
10877
1B0C:  RLCF   03,F
10877
1B0C:  RLCF   03,F
10878
1B0E:  MOVLW  FC
10878
1B0E:  MOVLW  FC
10879
1B10:  ANDWF  02,F
10879
1B10:  ANDWF  02,F
10880
1B12:  MOVF   02,W
10880
1B12:  MOVF   02,W
10881
1B14:  ADDWF  xCE,W
10881
1B14:  ADDWF  xCE,W
10882
1B16:  MOVWF  FE9
10882
1B16:  MOVWF  FE9
10883
1B18:  MOVF   xCF,W
10883
1B18:  MOVF   xCF,W
10884
1B1A:  ADDWFC 03,W
10884
1B1A:  ADDWFC 03,W
10885
1B1C:  MOVWF  FEA
10885
1B1C:  MOVWF  FEA
10886
1B1E:  MOVFF  FEF,6D8
10886
1B1E:  MOVFF  FEF,6D8
10887
1B22:  MOVFF  FEC,6D9
10887
1B22:  MOVFF  FEC,6D9
10888
1B26:  MOVFF  FEC,6DA
10888
1B26:  MOVFF  FEC,6DA
10889
1B2A:  MOVFF  FEC,6DB
10889
1B2A:  MOVFF  FEC,6DB
10890
1B2E:  MOVFF  FEA,6DD
10890
1B2E:  MOVFF  FEA,6DD
10891
1B32:  MOVFF  FE9,6DC
10891
1B32:  MOVFF  FE9,6DC
10892
1B36:  BSF    FD8.1
10892
1B36:  BSF    FD8.1
10893
1B38:  MOVFF  6DB,6ED
10893
1B38:  MOVFF  6DB,6ED
10894
1B3C:  MOVFF  6DA,6EC
10894
1B3C:  MOVFF  6DA,6EC
10895
1B40:  MOVFF  6D9,6EB
10895
1B40:  MOVFF  6D9,6EB
10896
1B44:  MOVFF  6D8,6EA
10896
1B44:  MOVFF  6D8,6EA
10897
1B48:  MOVFF  6CD,6F1
10897
1B48:  MOVFF  6CD,6F1
10898
1B4C:  MOVFF  6CC,6F0
10898
1B4C:  MOVFF  6CC,6F0
10899
1B50:  MOVFF  6CB,6EF
10899
1B50:  MOVFF  6CB,6EF
10900
1B54:  MOVFF  6CA,6EE
10900
1B54:  MOVFF  6CA,6EE
10901
1B58:  MOVLB  0
10901
1B58:  MOVLB  0
10902
1B5A:  RCALL  1442
10902
1B5A:  RCALL  1442
10903
1B5C:  MOVFF  6DD,FEA
10903
1B5C:  MOVFF  6DD,FEA
10904
1B60:  MOVFF  6DC,FE9
10904
1B60:  MOVFF  6DC,FE9
10905
1B64:  MOVFF  00,6D8
10905
1B64:  MOVFF  00,6D8
10906
1B68:  MOVFF  01,6D9
10906
1B68:  MOVFF  01,6D9
10907
1B6C:  MOVFF  02,6DA
10907
1B6C:  MOVFF  02,6DA
10908
1B70:  MOVFF  03,6DB
10908
1B70:  MOVFF  03,6DB
10909
1B74:  MOVLB  6
10909
1B74:  MOVLB  6
10910
1B76:  RLCF   xD2,W
10910
1B76:  RLCF   xD2,W
10911
1B78:  MOVWF  02
10911
1B78:  MOVWF  02
10912
1B7A:  RLCF   xD3,W
10912
1B7A:  RLCF   xD3,W
10913
1B7C:  MOVWF  03
10913
1B7C:  MOVWF  03
10914
1B7E:  RLCF   02,F
10914
1B7E:  RLCF   02,F
10915
1B80:  RLCF   03,F
10915
1B80:  RLCF   03,F
10916
1B82:  MOVLW  FC
10916
1B82:  MOVLW  FC
10917
1B84:  ANDWF  02,F
10917
1B84:  ANDWF  02,F
10918
1B86:  MOVF   02,W
10918
1B86:  MOVF   02,W
10919
1B88:  ADDWF  xCE,W
10919
1B88:  ADDWF  xCE,W
10920
1B8A:  MOVWF  FE9
10920
1B8A:  MOVWF  FE9
10921
1B8C:  MOVF   xCF,W
10921
1B8C:  MOVF   xCF,W
10922
1B8E:  ADDWFC 03,W
10922
1B8E:  ADDWFC 03,W
10923
1B90:  MOVWF  FEA
10923
1B90:  MOVWF  FEA
10924
1B92:  MOVFF  FEF,6DE
10924
1B92:  MOVFF  FEF,6DE
10925
1B96:  MOVFF  FEC,6DF
10925
1B96:  MOVFF  FEC,6DF
10926
1B9A:  MOVFF  FEC,6E0
10926
1B9A:  MOVFF  FEC,6E0
10927
1B9E:  MOVFF  FEC,6E1
10927
1B9E:  MOVFF  FEC,6E1
10928
1BA2:  MOVFF  FEA,6E3
10928
1BA2:  MOVFF  FEA,6E3
10929
1BA6:  MOVFF  FE9,6E2
10929
1BA6:  MOVFF  FE9,6E2
10930
1BAA:  BSF    FD8.1
10930
1BAA:  BSF    FD8.1
10931
1BAC:  MOVFF  6E1,6ED
10931
1BAC:  MOVFF  6E1,6ED
10932
1BB0:  MOVFF  6E0,6EC
10932
1BB0:  MOVFF  6E0,6EC
10933
1BB4:  MOVFF  6DF,6EB
10933
1BB4:  MOVFF  6DF,6EB
10934
1BB8:  MOVFF  6DE,6EA
10934
1BB8:  MOVFF  6DE,6EA
10935
1BBC:  MOVFF  6CD,6F1
10935
1BBC:  MOVFF  6CD,6F1
10936
1BC0:  MOVFF  6CC,6F0
10936
1BC0:  MOVFF  6CC,6F0
10937
1BC4:  MOVFF  6CB,6EF
10937
1BC4:  MOVFF  6CB,6EF
10938
1BC8:  MOVFF  6CA,6EE
10938
1BC8:  MOVFF  6CA,6EE
10939
1BCC:  MOVLB  0
10939
1BCC:  MOVLB  0
10940
1BCE:  RCALL  1442
10940
1BCE:  RCALL  1442
10941
1BD0:  MOVFF  6E3,FEA
10941
1BD0:  MOVFF  6E3,FEA
10942
1BD4:  MOVFF  6E2,FE9
10942
1BD4:  MOVFF  6E2,FE9
10943
1BD8:  MOVFF  6DB,6E7
10943
1BD8:  MOVFF  6DB,6E7
10944
1BDC:  MOVFF  6DA,6E6
10944
1BDC:  MOVFF  6DA,6E6
10945
1BE0:  MOVFF  6D9,6E5
10945
1BE0:  MOVFF  6D9,6E5
10946
1BE4:  MOVFF  6D8,6E4
10946
1BE4:  MOVFF  6D8,6E4
10947
1BE8:  MOVFF  03,6EB
10947
1BE8:  MOVFF  03,6EB
10948
1BEC:  MOVFF  02,6EA
10948
1BEC:  MOVFF  02,6EA
10949
1BF0:  MOVFF  01,6E9
10949
1BF0:  MOVFF  01,6E9
10950
1BF4:  MOVFF  00,6E8
10950
1BF4:  MOVFF  00,6E8
10951
1BF8:  RCALL  1852
10951
1BF8:  RCALL  1852
10952
1BFA:  MOVFF  FEA,6D9
10952
1BFA:  MOVFF  FEA,6D9
10953
1BFE:  MOVFF  FE9,6D8
10953
1BFE:  MOVFF  FE9,6D8
10954
1C02:  BCF    FD8.1
10954
1C02:  BCF    FD8.1
10955
1C04:  MOVFF  6D7,6ED
10955
1C04:  MOVFF  6D7,6ED
10956
1C08:  MOVFF  6D6,6EC
10956
1C08:  MOVFF  6D6,6EC
10957
1C0C:  MOVFF  6D5,6EB
10957
1C0C:  MOVFF  6D5,6EB
10958
1C10:  MOVFF  6D4,6EA
10958
1C10:  MOVFF  6D4,6EA
10959
1C14:  MOVFF  03,6F1
10959
1C14:  MOVFF  03,6F1
10960
1C18:  MOVFF  02,6F0
10960
1C18:  MOVFF  02,6F0
10961
1C1C:  MOVFF  01,6EF
10961
1C1C:  MOVFF  01,6EF
10962
1C20:  MOVFF  00,6EE
10962
1C20:  MOVFF  00,6EE
10963
1C24:  RCALL  1442
10963
1C24:  RCALL  1442
10964
1C26:  MOVFF  6D9,FEA
10964
1C26:  MOVFF  6D9,FEA
10965
1C2A:  MOVFF  6D8,FE9
10965
1C2A:  MOVFF  6D8,FE9
10966
1C2E:  MOVFF  03,6D7
10966
1C2E:  MOVFF  03,6D7
10967
1C32:  MOVFF  02,6D6
10967
1C32:  MOVFF  02,6D6
10968
1C36:  MOVFF  01,6D5
10968
1C36:  MOVFF  01,6D5
10969
1C3A:  MOVFF  00,6D4
10969
1C3A:  MOVFF  00,6D4
10970
1C3E:  MOVLB  6
10970
1C3E:  MOVLB  6
10971
1C40:  INCF   xD2,F
10971
1C40:  INCF   xD2,F
10972
1C42:  BTFSC  FD8.2
10972
1C42:  BTFSC  FD8.2
10973
1C44:  INCF   xD3,F
10973
1C44:  INCF   xD3,F
10974
1C46:  BRA    1AF0
10974
1C46:  BRA    1AF0
10975
....................    err = sqrt((1/(float)size)*err); 
10975
....................    err = sqrt((1/(float)size)*err); 
10976
1C48:  MOVFF  6D1,6D9
10976
1C48:  MOVFF  6D1,6D9
10977
1C4C:  MOVFF  6D0,6D8
10977
1C4C:  MOVFF  6D0,6D8
10978
1C50:  MOVLB  0
10978
1C50:  MOVLB  0
10979
1C52:  CALL   140C
10979
1C52:  CALL   140C
10980
1C56:  MOVLB  6
10980
1C56:  MOVLB  6
10981
1C58:  CLRF   xED
10981
1C58:  CLRF   xED
10982
1C5A:  CLRF   xEC
10982
1C5A:  CLRF   xEC
10983
1C5C:  CLRF   xEB
10983
1C5C:  CLRF   xEB
10984
1C5E:  MOVLW  7F
10984
1C5E:  MOVLW  7F
10985
1C60:  MOVWF  xEA
10985
1C60:  MOVWF  xEA
10986
1C62:  MOVFF  03,6F1
10986
1C62:  MOVFF  03,6F1
10987
1C66:  MOVFF  02,6F0
10987
1C66:  MOVFF  02,6F0
10988
1C6A:  MOVFF  01,6EF
10988
1C6A:  MOVFF  01,6EF
10989
1C6E:  MOVFF  00,6EE
10989
1C6E:  MOVFF  00,6EE
10990
1C72:  MOVLB  0
10990
1C72:  MOVLB  0
10991
1C74:  RCALL  16BA
10991
1C74:  RCALL  16BA
10992
1C76:  MOVFF  00,6D8
10992
1C76:  MOVFF  00,6D8
10993
1C7A:  MOVFF  01,6D9
10993
1C7A:  MOVFF  01,6D9
10994
1C7E:  MOVFF  02,6DA
10994
1C7E:  MOVFF  02,6DA
10995
1C82:  MOVFF  03,6DB
10995
1C82:  MOVFF  03,6DB
10996
1C86:  MOVFF  03,6E7
10996
1C86:  MOVFF  03,6E7
10997
1C8A:  MOVFF  02,6E6
10997
1C8A:  MOVFF  02,6E6
10998
1C8E:  MOVFF  01,6E5
10998
1C8E:  MOVFF  01,6E5
10999
1C92:  MOVFF  00,6E4
10999
1C92:  MOVFF  00,6E4
11000
1C96:  MOVFF  6D7,6EB
11000
1C96:  MOVFF  6D7,6EB
11001
1C9A:  MOVFF  6D6,6EA
11001
1C9A:  MOVFF  6D6,6EA
11002
1C9E:  MOVFF  6D5,6E9
11002
1C9E:  MOVFF  6D5,6E9
11003
1CA2:  MOVFF  6D4,6E8
11003
1CA2:  MOVFF  6D4,6E8
11004
1CA6:  RCALL  1852
11004
1CA6:  RCALL  1852
11005
1CA8:  MOVFF  00,6D8
11005
1CA8:  MOVFF  00,6D8
11006
1CAC:  MOVFF  01,6D9
11006
1CAC:  MOVFF  01,6D9
11007
1CB0:  MOVFF  02,6DA
11007
1CB0:  MOVFF  02,6DA
11008
1CB4:  MOVFF  03,6DB
11008
1CB4:  MOVFF  03,6DB
11009
1CB8:  MOVFF  03,6DF
11009
1CB8:  MOVFF  03,6DF
11010
1CBC:  MOVFF  02,6DE
11010
1CBC:  MOVFF  02,6DE
11011
1CC0:  MOVFF  01,6DD
11011
1CC0:  MOVFF  01,6DD
11012
1CC4:  MOVFF  00,6DC
11012
1CC4:  MOVFF  00,6DC
11013
1CC8:  BRA    19C2
11013
1CC8:  BRA    19C2
11014
1CCA:  MOVFF  03,6D7
11014
1CCA:  MOVFF  03,6D7
11015
1CCE:  MOVFF  02,6D6
11015
1CCE:  MOVFF  02,6D6
11016
1CD2:  MOVFF  01,6D5
11016
1CD2:  MOVFF  01,6D5
11017
1CD6:  MOVFF  00,6D4
11017
1CD6:  MOVFF  00,6D4
11018
....................    return err; 
11018
....................    return err; 
11019
1CDA:  MOVFF  6D4,00
11019
1CDA:  MOVFF  6D4,00
11020
1CDE:  MOVFF  6D5,01
11020
1CDE:  MOVFF  6D5,01
11021
1CE2:  MOVFF  6D6,02
11021
1CE2:  MOVFF  6D6,02
11022
1CE6:  MOVFF  6D7,03
11022
1CE6:  MOVFF  6D7,03
11023
.................... } 
11023
.................... } 
11024
1CEA:  RETLW  00
11024
1CEA:  RETLW  00
11025
....................  
11025
....................  
11026
.................... void main() 
11026
.................... void main() 
11027
.................... { 
11027
.................... { 
11028
*
11028
*
11029
1F62:  CLRF   FF8
11029
1F62:  CLRF   FF8
11030
1F64:  BCF    FD0.7
11030
1F64:  BCF    FD0.7
11031
1F66:  BSF    08.7
11031
1F66:  BSF    08.7
11032
1F68:  CLRF   FEA
11032
1F68:  CLRF   FEA
11033
1F6A:  CLRF   FE9
11033
1F6A:  CLRF   FE9
11034
1F6C:  MOVF   FC1,W
11034
1F6C:  MOVF   FC1,W
11035
1F6E:  ANDLW  C0
11035
1F6E:  ANDLW  C0
11036
1F70:  IORLW  0F
11036
1F70:  IORLW  0F
11037
1F72:  MOVWF  FC1
11037
1F72:  MOVWF  FC1
11038
1F74:  MOVLW  07
11038
1F74:  MOVLW  07
11039
1F76:  MOVWF  FB4
11039
1F76:  MOVWF  FB4
11040
1F78:  CLRF   21
11040
1F78:  CLRF   21
11041
1F7A:  MOVLW  04
11041
1F7A:  MOVLW  04
11042
1F7C:  MOVWF  22
11042
1F7C:  MOVWF  22
11043
1F7E:  MOVLW  0C
11043
1F7E:  MOVLW  0C
11044
1F80:  MOVWF  23
11044
1F80:  MOVWF  23
11045
1F82:  CLRF   24
11045
1F82:  CLRF   24
11046
1F84:  CLRF   28
11046
1F84:  CLRF   28
11047
1F86:  CLRF   x7C
11047
1F86:  CLRF   x7C
11048
1F88:  CLRF   x83
11048
1F88:  CLRF   x83
11049
....................  
11049
....................  
11050
.................... float x[BUFLEN], y[BUFLEN], z[BUFLEN]; 
11050
.................... float x[BUFLEN], y[BUFLEN], z[BUFLEN]; 
11051
.................... float xavg, yavg, zavg; 
11051
.................... float xavg, yavg, zavg; 
11052
.................... int i; 
11052
.................... int i; 
11053
....................    port_b_pullups(FALSE); 
11053
....................    port_b_pullups(FALSE); 
11054
1F8A:  BSF    FF1.7
11054
1F8A:  BSF    FF1.7
11055
....................    setup_psp(PSP_DISABLED); 
11055
....................    setup_psp(PSP_DISABLED); 
11056
1F8C:  BCF    FB0.4
11056
1F8C:  BCF    FB0.4
11057
....................    setup_spi(SPI_SS_DISABLED); 
11057
....................    setup_spi(SPI_SS_DISABLED); 
11058
1F8E:  BCF    FC6.5
11058
1F8E:  BCF    FC6.5
11059
1F90:  BCF    F94.7
11059
1F90:  BCF    F94.7
11060
1F92:  BSF    F93.0
11060
1F92:  BSF    F93.0
11061
1F94:  BCF    F93.1
11061
1F94:  BCF    F93.1
11062
1F96:  MOVLW  01
11062
1F96:  MOVLW  01
11063
1F98:  MOVWF  FC6
11063
1F98:  MOVWF  FC6
11064
1F9A:  MOVLW  00
11064
1F9A:  MOVLW  00
11065
1F9C:  MOVWF  FC7
11065
1F9C:  MOVWF  FC7
11066
....................    setup_wdt(WDT_OFF); 
11066
....................    setup_wdt(WDT_OFF); 
11067
1F9E:  BCF    FD1.0
11067
1F9E:  BCF    FD1.0
11068
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
11068
....................    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); 
11069
1FA0:  MOVLW  87
11069
1FA0:  MOVLW  87
11070
1FA2:  MOVWF  FD5
11070
1FA2:  MOVWF  FD5
11071
....................    setup_timer_1(T1_DISABLED); 
11071
....................    setup_timer_1(T1_DISABLED); 
11072
1FA4:  CLRF   FCD
11072
1FA4:  CLRF   FCD
11073
....................    setup_timer_2(T2_DISABLED,0,1); 
11073
....................    setup_timer_2(T2_DISABLED,0,1); 
11074
1FA6:  MOVLW  00
11074
1FA6:  MOVLW  00
11075
1FA8:  MOVWF  FCA
11075
1FA8:  MOVWF  FCA
11076
1FAA:  MOVLW  00
11076
1FAA:  MOVLW  00
11077
1FAC:  MOVWF  FCB
11077
1FAC:  MOVWF  FCB
11078
....................    setup_timer_3(T3_DISABLED|T3_DIV_BY_1); 
11078
....................    setup_timer_3(T3_DISABLED|T3_DIV_BY_1); 
11079
1FAE:  CLRF   FB1
11079
1FAE:  CLRF   FB1
11080
....................    setup_comparator(NC_NC_NC_NC); 
11080
....................    setup_comparator(NC_NC_NC_NC); 
11081
1FB0:  MOVLW  07
11081
1FB0:  MOVLW  07
11082
1FB2:  MOVWF  FB4
11082
1FB2:  MOVWF  FB4
11083
1FB4:  MOVF   F92,W
11083
1FB4:  MOVF   F92,W
11084
1FB6:  MOVWF  F92
11084
1FB6:  MOVWF  F92
11085
1FB8:  MOVLW  13
11085
1FB8:  MOVLW  13
11086
1FBA:  MOVWF  00
11086
1FBA:  MOVWF  00
11087
1FBC:  DECFSZ 00,F
11087
1FBC:  DECFSZ 00,F
11088
1FBE:  BRA    1FBC
11088
1FBE:  BRA    1FBC
11089
1FC0:  BRA    1FC2
11089
1FC0:  BRA    1FC2
11090
1FC2:  MOVF   FB4,W
11090
1FC2:  MOVF   FB4,W
11091
1FC4:  BCF    FA1.6
11091
1FC4:  BCF    FA1.6
11092
....................    setup_vref(FALSE); 
11092
....................    setup_vref(FALSE); 
11093
1FC6:  CLRF   FB5
11093
1FC6:  CLRF   FB5
11094
....................    enable_interrupts(INT_TIMER0); 
11094
....................    enable_interrupts(INT_TIMER0); 
11095
1FC8:  BSF    FF2.5
11095
1FC8:  BSF    FF2.5
11096
....................    enable_interrupts(GLOBAL); 
11096
....................    enable_interrupts(GLOBAL); 
11097
1FCA:  MOVLW  C0
11097
1FCA:  MOVLW  C0
11098
1FCC:  IORWF  FF2,F
11098
1FCC:  IORWF  FF2,F
11099
....................     
11099
....................     
11100
....................    setup_adc_ports(AN0_TO_AN2|VSS_VREF); 
11100
....................    setup_adc_ports(AN0_TO_AN2|VSS_VREF); 
11101
1FCE:  MOVF   FC1,W
11101
1FCE:  MOVF   FC1,W
11102
1FD0:  ANDLW  C0
11102
1FD0:  ANDLW  C0
11103
1FD2:  IORLW  1C
11103
1FD2:  IORLW  1C
11104
1FD4:  MOVWF  FC1
11104
1FD4:  MOVWF  FC1
11105
....................    setup_adc(ADC_CLOCK_DIV_64); 
11105
....................    setup_adc(ADC_CLOCK_DIV_64); 
11106
1FD6:  BCF    FC0.0
11106
1FD6:  BCF    FC0.0
11107
1FD8:  BSF    FC0.1
11107
1FD8:  BSF    FC0.1
11108
1FDA:  BSF    FC0.2
11108
1FDA:  BSF    FC0.2
11109
1FDC:  BSF    FC0.7
11109
1FDC:  BSF    FC0.7
11110
1FDE:  BSF    FC2.0
11110
1FDE:  BSF    FC2.0
11111
....................  
11111
....................  
11112
....................    usb_init(); // initialise USB module 
11112
....................    usb_init(); // initialise USB module 
11113
1FE0:  GOTO   1368
11113
1FE0:  GOTO   1368
11114
....................  
11114
....................  
11115
....................    while (TRUE) 
11115
....................    while (TRUE) 
11116
....................    { 
11116
....................    { 
11117
....................     
11117
....................     
11118
....................    while(!usb_cdc_connected()); 
11118
....................    while(!usb_cdc_connected()); 
11119
1FE4:  BTFSS  x80.0
11119
1FE4:  BTFSS  x80.0
11120
1FE6:  BRA    1FE4
11120
1FE6:  BRA    1FE4
11121
....................    time=0; 
11121
....................    time=0; 
11122
1FE8:  CLRF   1C
11122
1FE8:  CLRF   1C
11123
1FEA:  CLRF   1B
11123
1FEA:  CLRF   1B
11124
1FEC:  CLRF   1A
11124
1FEC:  CLRF   1A
11125
1FEE:  CLRF   19
11125
1FEE:  CLRF   19
11126
....................    set_timer0(0); 
11126
....................    set_timer0(0); 
11127
1FF0:  CLRF   FD7
11127
1FF0:  CLRF   FD7
11128
1FF2:  CLRF   FD6
11128
1FF2:  CLRF   FD6
11129
....................    printf(usb_cdc_putc,"time[s]  X  Xerr  Y  Yerr  Z  Zerr \n\r"); 
11129
....................    printf(usb_cdc_putc,"time[s]  X  Xerr  Y  Yerr  Z  Zerr \n\r"); 
11130
1FF4:  MOVLB  3
11130
1FF4:  MOVLB  3
11131
1FF6:  CLRF   xB1
11131
1FF6:  CLRF   xB1
11132
1FF8:  MOVF   xB1,W
11132
1FF8:  MOVF   xB1,W
11133
1FFA:  MOVLB  0
11133
1FFA:  MOVLB  0
11134
1FFC:  CALL   021E
11134
1FFC:  CALL   021E
11135
2000:  MOVLB  3
11135
2000:  MOVLB  3
11136
2002:  INCF   xB1,F
11136
2002:  INCF   xB1,F
11137
2004:  MOVWF  00
11137
2004:  MOVWF  00
11138
2006:  MOVFF  FE8,6DB
11138
2006:  MOVFF  FE8,6DB
11139
200A:  MOVLB  0
11139
200A:  MOVLB  0
11140
200C:  CALL   13D4
11140
200C:  CALL   13D4
11141
2010:  MOVLW  25
11141
2010:  MOVLW  25
11142
2012:  MOVLB  3
11142
2012:  MOVLB  3
11143
2014:  SUBWF  xB1,W
11143
2014:  SUBWF  xB1,W
11144
2016:  BNZ   1FF8
11144
2016:  BNZ   1FF8
11145
....................  
11145
....................  
11146
....................    while(usb_cdc_connected())  // pockej nez se pripoji seriovy port PC 
11146
....................    while(usb_cdc_connected())  // pockej nez se pripoji seriovy port PC 
11147
....................    { 
11147
....................    { 
11148
2018:  MOVLB  0
11148
2018:  MOVLB  0
11149
201A:  BTFSS  x80.0
11149
201A:  BTFSS  x80.0
11150
201C:  BRA    25DE
11150
201C:  BRA    25DE
11151
....................       for(i=0; i <BUFLEN; i++) 
11151
....................       for(i=0; i <BUFLEN; i++) 
11152
201E:  MOVLB  3
11152
201E:  MOVLB  3
11153
2020:  CLRF   xB0
11153
2020:  CLRF   xB0
11154
2022:  MOVF   xB0,W
11154
2022:  MOVF   xB0,W
11155
2024:  SUBLW  63
11155
2024:  SUBLW  63
11156
2026:  BTFSS  FD8.0
11156
2026:  BTFSS  FD8.0
11157
2028:  BRA    2300
11157
2028:  BRA    2300
11158
....................       { 
11158
....................       { 
11159
....................          set_adc_channel(0); 
11159
....................          set_adc_channel(0); 
11160
202A:  MOVLW  00
11160
202A:  MOVLW  00
11161
202C:  MOVWF  01
11161
202C:  MOVWF  01
11162
202E:  MOVF   FC2,W
11162
202E:  MOVF   FC2,W
11163
2030:  ANDLW  C3
11163
2030:  ANDLW  C3
11164
2032:  IORWF  01,W
11164
2032:  IORWF  01,W
11165
2034:  MOVWF  FC2
11165
2034:  MOVWF  FC2
11166
....................          delay_us(10); 
11166
....................          delay_us(10); 
11167
2036:  MOVLW  13
11167
2036:  MOVLW  13
11168
2038:  MOVWF  00
11168
2038:  MOVWF  00
11169
203A:  DECFSZ 00,F
11169
203A:  DECFSZ 00,F
11170
203C:  BRA    203A
11170
203C:  BRA    203A
11171
203E:  BRA    2040
11171
203E:  BRA    2040
11172
2040:  CLRF   18
11172
2040:  CLRF   18
11173
2042:  BTFSC  FF2.7
11173
2042:  BTFSC  FF2.7
11174
2044:  BSF    18.7
11174
2044:  BSF    18.7
11175
2046:  BCF    FF2.7
11175
2046:  BCF    FF2.7
11176
....................          x[i]=read_adc(); 
11176
....................          x[i]=read_adc(); 
11177
2048:  MOVLB  7
11177
2048:  MOVLB  7
11178
204A:  CLRF   x49
11178
204A:  CLRF   x49
11179
204C:  MOVFF  3B0,748
11179
204C:  MOVFF  3B0,748
11180
2050:  CLRF   x4B
11180
2050:  CLRF   x4B
11181
2052:  MOVLW  04
11181
2052:  MOVLW  04
11182
2054:  MOVWF  x4A
11182
2054:  MOVWF  x4A
11183
2056:  MOVLB  0
11183
2056:  MOVLB  0
11184
2058:  CALL   02BA
11184
2058:  CALL   02BA
11185
205C:  BTFSC  18.7
11185
205C:  BTFSC  18.7
11186
205E:  BSF    FF2.7
11186
205E:  BSF    FF2.7
11187
2060:  MOVFF  02,03
11187
2060:  MOVFF  02,03
11188
2064:  MOVF   01,W
11188
2064:  MOVF   01,W
11189
2066:  ADDLW  84
11189
2066:  ADDLW  84
11190
2068:  MOVWF  FE9
11190
2068:  MOVWF  FE9
11191
206A:  MOVLW  00
11191
206A:  MOVLW  00
11192
206C:  ADDWFC 02,W
11192
206C:  ADDWFC 02,W
11193
206E:  MOVWF  FEA
11193
206E:  MOVWF  FEA
11194
2070:  BSF    FC2.1
11194
2070:  BSF    FC2.1
11195
2072:  BTFSC  FC2.1
11195
2072:  BTFSC  FC2.1
11196
2074:  BRA    2072
11196
2074:  BRA    2072
11197
2076:  MOVFF  FC4,6D9
11197
2076:  MOVFF  FC4,6D9
11198
207A:  MOVFF  FC3,6D8
11198
207A:  MOVFF  FC3,6D8
11199
207E:  MOVLB  0
11199
207E:  MOVLB  0
11200
2080:  CALL   140C
11200
2080:  CALL   140C
11201
2084:  MOVFF  00,FEF
11201
2084:  MOVFF  00,FEF
11202
2088:  MOVFF  01,FEC
11202
2088:  MOVFF  01,FEC
11203
208C:  MOVFF  02,FEC
11203
208C:  MOVFF  02,FEC
11204
2090:  MOVFF  03,FEC
11204
2090:  MOVFF  03,FEC
11205
2094:  CLRF   18
11205
2094:  CLRF   18
11206
2096:  BTFSC  FF2.7
11206
2096:  BTFSC  FF2.7
11207
2098:  BSF    18.7
11207
2098:  BSF    18.7
11208
209A:  BCF    FF2.7
11208
209A:  BCF    FF2.7
11209
....................          xavg+=x[i]; 
11209
....................          xavg+=x[i]; 
11210
209C:  MOVLB  7
11210
209C:  MOVLB  7
11211
209E:  CLRF   x49
11211
209E:  CLRF   x49
11212
20A0:  MOVFF  3B0,748
11212
20A0:  MOVFF  3B0,748
11213
20A4:  CLRF   x4B
11213
20A4:  CLRF   x4B
11214
20A6:  MOVLW  04
11214
20A6:  MOVLW  04
11215
20A8:  MOVWF  x4A
11215
20A8:  MOVWF  x4A
11216
20AA:  MOVLB  0
11216
20AA:  MOVLB  0
11217
20AC:  CALL   02BA
11217
20AC:  CALL   02BA
11218
20B0:  BTFSC  18.7
11218
20B0:  BTFSC  18.7
11219
20B2:  BSF    FF2.7
11219
20B2:  BSF    FF2.7
11220
20B4:  MOVFF  02,03
11220
20B4:  MOVFF  02,03
11221
20B8:  MOVF   01,W
11221
20B8:  MOVF   01,W
11222
20BA:  ADDLW  84
11222
20BA:  ADDLW  84
11223
20BC:  MOVWF  FE9
11223
20BC:  MOVWF  FE9
11224
20BE:  MOVLW  00
11224
20BE:  MOVLW  00
11225
20C0:  ADDWFC 02,W
11225
20C0:  ADDWFC 02,W
11226
20C2:  MOVWF  FEA
11226
20C2:  MOVWF  FEA
11227
20C4:  MOVFF  FEF,00
11227
20C4:  MOVFF  FEF,00
11228
20C8:  MOVFF  FEC,01
11228
20C8:  MOVFF  FEC,01
11229
20CC:  MOVFF  FEC,02
11229
20CC:  MOVFF  FEC,02
11230
20D0:  MOVFF  FEC,03
11230
20D0:  MOVFF  FEC,03
11231
20D4:  MOVFF  FEA,3B2
11231
20D4:  MOVFF  FEA,3B2
11232
20D8:  MOVFF  FE9,3B1
11232
20D8:  MOVFF  FE9,3B1
11233
20DC:  BCF    FD8.1
11233
20DC:  BCF    FD8.1
11234
20DE:  MOVFF  3A7,6ED
11234
20DE:  MOVFF  3A7,6ED
11235
20E2:  MOVFF  3A6,6EC
11235
20E2:  MOVFF  3A6,6EC
11236
20E6:  MOVFF  3A5,6EB
11236
20E6:  MOVFF  3A5,6EB
11237
20EA:  MOVFF  3A4,6EA
11237
20EA:  MOVFF  3A4,6EA
11238
20EE:  MOVFF  03,6F1
11238
20EE:  MOVFF  03,6F1
11239
20F2:  MOVFF  02,6F0
11239
20F2:  MOVFF  02,6F0
11240
20F6:  MOVFF  01,6EF
11240
20F6:  MOVFF  01,6EF
11241
20FA:  MOVFF  00,6EE
11241
20FA:  MOVFF  00,6EE
11242
20FE:  CALL   1442
11242
20FE:  CALL   1442
11243
2102:  MOVFF  3B2,FEA
11243
2102:  MOVFF  3B2,FEA
11244
2106:  MOVFF  3B1,FE9
11244
2106:  MOVFF  3B1,FE9
11245
210A:  MOVFF  03,3A7
11245
210A:  MOVFF  03,3A7
11246
210E:  MOVFF  02,3A6
11246
210E:  MOVFF  02,3A6
11247
2112:  MOVFF  01,3A5
11247
2112:  MOVFF  01,3A5
11248
2116:  MOVFF  00,3A4
11248
2116:  MOVFF  00,3A4
11249
....................           
11249
....................           
11250
....................          set_adc_channel(1); 
11250
....................          set_adc_channel(1); 
11251
211A:  MOVLW  04
11251
211A:  MOVLW  04
11252
211C:  MOVWF  01
11252
211C:  MOVWF  01
11253
211E:  MOVF   FC2,W
11253
211E:  MOVF   FC2,W
11254
2120:  ANDLW  C3
11254
2120:  ANDLW  C3
11255
2122:  IORWF  01,W
11255
2122:  IORWF  01,W
11256
2124:  MOVWF  FC2
11256
2124:  MOVWF  FC2
11257
....................          delay_us(10); 
11257
....................          delay_us(10); 
11258
2126:  MOVLW  13
11258
2126:  MOVLW  13
11259
2128:  MOVWF  00
11259
2128:  MOVWF  00
11260
212A:  DECFSZ 00,F
11260
212A:  DECFSZ 00,F
11261
212C:  BRA    212A
11261
212C:  BRA    212A
11262
212E:  BRA    2130
11262
212E:  BRA    2130
11263
2130:  CLRF   18
11263
2130:  CLRF   18
11264
2132:  BTFSC  FF2.7
11264
2132:  BTFSC  FF2.7
11265
2134:  BSF    18.7
11265
2134:  BSF    18.7
11266
2136:  BCF    FF2.7
11266
2136:  BCF    FF2.7
11267
....................          y[i]=read_adc(); 
11267
....................          y[i]=read_adc(); 
11268
2138:  MOVLB  7
11268
2138:  MOVLB  7
11269
213A:  CLRF   x49
11269
213A:  CLRF   x49
11270
213C:  MOVFF  3B0,748
11270
213C:  MOVFF  3B0,748
11271
2140:  CLRF   x4B
11271
2140:  CLRF   x4B
11272
2142:  MOVLW  04
11272
2142:  MOVLW  04
11273
2144:  MOVWF  x4A
11273
2144:  MOVWF  x4A
11274
2146:  MOVLB  0
11274
2146:  MOVLB  0
11275
2148:  CALL   02BA
11275
2148:  CALL   02BA
11276
214C:  BTFSC  18.7
11276
214C:  BTFSC  18.7
11277
214E:  BSF    FF2.7
11277
214E:  BSF    FF2.7
11278
2150:  MOVFF  02,03
11278
2150:  MOVFF  02,03
11279
2154:  MOVF   01,W
11279
2154:  MOVF   01,W
11280
2156:  ADDLW  14
11280
2156:  ADDLW  14
11281
2158:  MOVWF  FE9
11281
2158:  MOVWF  FE9
11282
215A:  MOVLW  02
11282
215A:  MOVLW  02
11283
215C:  ADDWFC 02,W
11283
215C:  ADDWFC 02,W
11284
215E:  MOVWF  FEA
11284
215E:  MOVWF  FEA
11285
2160:  BSF    FC2.1
11285
2160:  BSF    FC2.1
11286
2162:  BTFSC  FC2.1
11286
2162:  BTFSC  FC2.1
11287
2164:  BRA    2162
11287
2164:  BRA    2162
11288
2166:  MOVFF  FC4,6D9
11288
2166:  MOVFF  FC4,6D9
11289
216A:  MOVFF  FC3,6D8
11289
216A:  MOVFF  FC3,6D8
11290
216E:  MOVLB  0
11290
216E:  MOVLB  0
11291
2170:  CALL   140C
11291
2170:  CALL   140C
11292
2174:  MOVFF  00,FEF
11292
2174:  MOVFF  00,FEF
11293
2178:  MOVFF  01,FEC
11293
2178:  MOVFF  01,FEC
11294
217C:  MOVFF  02,FEC
11294
217C:  MOVFF  02,FEC
11295
2180:  MOVFF  03,FEC
11295
2180:  MOVFF  03,FEC
11296
2184:  CLRF   18
11296
2184:  CLRF   18
11297
2186:  BTFSC  FF2.7
11297
2186:  BTFSC  FF2.7
11298
2188:  BSF    18.7
11298
2188:  BSF    18.7
11299
218A:  BCF    FF2.7
11299
218A:  BCF    FF2.7
11300
....................          yavg+=y[i]; 
11300
....................          yavg+=y[i]; 
11301
218C:  MOVLB  7
11301
218C:  MOVLB  7
11302
218E:  CLRF   x49
11302
218E:  CLRF   x49
11303
2190:  MOVFF  3B0,748
11303
2190:  MOVFF  3B0,748
11304
2194:  CLRF   x4B
11304
2194:  CLRF   x4B
11305
2196:  MOVLW  04
11305
2196:  MOVLW  04
11306
2198:  MOVWF  x4A
11306
2198:  MOVWF  x4A
11307
219A:  MOVLB  0
11307
219A:  MOVLB  0
11308
219C:  CALL   02BA
11308
219C:  CALL   02BA
11309
21A0:  BTFSC  18.7
11309
21A0:  BTFSC  18.7
11310
21A2:  BSF    FF2.7
11310
21A2:  BSF    FF2.7
11311
21A4:  MOVFF  02,03
11311
21A4:  MOVFF  02,03
11312
21A8:  MOVF   01,W
11312
21A8:  MOVF   01,W
11313
21AA:  ADDLW  14
11313
21AA:  ADDLW  14
11314
21AC:  MOVWF  FE9
11314
21AC:  MOVWF  FE9
11315
21AE:  MOVLW  02
11315
21AE:  MOVLW  02
11316
21B0:  ADDWFC 02,W
11316
21B0:  ADDWFC 02,W
11317
21B2:  MOVWF  FEA
11317
21B2:  MOVWF  FEA
11318
21B4:  MOVFF  FEF,00
11318
21B4:  MOVFF  FEF,00
11319
21B8:  MOVFF  FEC,01
11319
21B8:  MOVFF  FEC,01
11320
21BC:  MOVFF  FEC,02
11320
21BC:  MOVFF  FEC,02
11321
21C0:  MOVFF  FEC,03
11321
21C0:  MOVFF  FEC,03
11322
21C4:  MOVFF  FEA,3B2
11322
21C4:  MOVFF  FEA,3B2
11323
21C8:  MOVFF  FE9,3B1
11323
21C8:  MOVFF  FE9,3B1
11324
21CC:  BCF    FD8.1
11324
21CC:  BCF    FD8.1
11325
21CE:  MOVFF  3AB,6ED
11325
21CE:  MOVFF  3AB,6ED
11326
21D2:  MOVFF  3AA,6EC
11326
21D2:  MOVFF  3AA,6EC
11327
21D6:  MOVFF  3A9,6EB
11327
21D6:  MOVFF  3A9,6EB
11328
21DA:  MOVFF  3A8,6EA
11328
21DA:  MOVFF  3A8,6EA
11329
21DE:  MOVFF  03,6F1
11329
21DE:  MOVFF  03,6F1
11330
21E2:  MOVFF  02,6F0
11330
21E2:  MOVFF  02,6F0
11331
21E6:  MOVFF  01,6EF
11331
21E6:  MOVFF  01,6EF
11332
21EA:  MOVFF  00,6EE
11332
21EA:  MOVFF  00,6EE
11333
21EE:  CALL   1442
11333
21EE:  CALL   1442
11334
21F2:  MOVFF  3B2,FEA
11334
21F2:  MOVFF  3B2,FEA
11335
21F6:  MOVFF  3B1,FE9
11335
21F6:  MOVFF  3B1,FE9
11336
21FA:  MOVFF  03,3AB
11336
21FA:  MOVFF  03,3AB
11337
21FE:  MOVFF  02,3AA
11337
21FE:  MOVFF  02,3AA
11338
2202:  MOVFF  01,3A9
11338
2202:  MOVFF  01,3A9
11339
2206:  MOVFF  00,3A8
11339
2206:  MOVFF  00,3A8
11340
....................  
11340
....................  
11341
....................          set_adc_channel(2); 
11341
....................          set_adc_channel(2); 
11342
220A:  MOVLW  08
11342
220A:  MOVLW  08
11343
220C:  MOVWF  01
11343
220C:  MOVWF  01
11344
220E:  MOVF   FC2,W
11344
220E:  MOVF   FC2,W
11345
2210:  ANDLW  C3
11345
2210:  ANDLW  C3
11346
2212:  IORWF  01,W
11346
2212:  IORWF  01,W
11347
2214:  MOVWF  FC2
11347
2214:  MOVWF  FC2
11348
....................          delay_us(10); 
11348
....................          delay_us(10); 
11349
2216:  MOVLW  13
11349
2216:  MOVLW  13
11350
2218:  MOVWF  00
11350
2218:  MOVWF  00
11351
221A:  DECFSZ 00,F
11351
221A:  DECFSZ 00,F
11352
221C:  BRA    221A
11352
221C:  BRA    221A
11353
221E:  BRA    2220
11353
221E:  BRA    2220
11354
2220:  CLRF   18
11354
2220:  CLRF   18
11355
2222:  BTFSC  FF2.7
11355
2222:  BTFSC  FF2.7
11356
2224:  BSF    18.7
11356
2224:  BSF    18.7
11357
2226:  BCF    FF2.7
11357
2226:  BCF    FF2.7
11358
....................          z[i]=read_adc(); 
11358
....................          z[i]=read_adc(); 
11359
2228:  MOVLB  7
11359
2228:  MOVLB  7
11360
222A:  CLRF   x49
11360
222A:  CLRF   x49
11361
222C:  MOVFF  3B0,748
11361
222C:  MOVFF  3B0,748
11362
2230:  CLRF   x4B
11362
2230:  CLRF   x4B
11363
2232:  MOVLW  04
11363
2232:  MOVLW  04
11364
2234:  MOVWF  x4A
11364
2234:  MOVWF  x4A
11365
2236:  MOVLB  0
11365
2236:  MOVLB  0
11366
2238:  CALL   02BA
11366
2238:  CALL   02BA
11367
223C:  BTFSC  18.7
11367
223C:  BTFSC  18.7
11368
223E:  BSF    FF2.7
11368
223E:  BSF    FF2.7
11369
2240:  MOVFF  02,03
11369
2240:  MOVFF  02,03
11370
2244:  MOVF   01,W
11370
2244:  MOVF   01,W
11371
2246:  ADDLW  20
11371
2246:  ADDLW  20
11372
2248:  MOVWF  FE9
11372
2248:  MOVWF  FE9
11373
224A:  MOVLW  05
11373
224A:  MOVLW  05
11374
224C:  ADDWFC 02,W
11374
224C:  ADDWFC 02,W
11375
224E:  MOVWF  FEA
11375
224E:  MOVWF  FEA
11376
2250:  BSF    FC2.1
11376
2250:  BSF    FC2.1
11377
2252:  BTFSC  FC2.1
11377
2252:  BTFSC  FC2.1
11378
2254:  BRA    2252
11378
2254:  BRA    2252
11379
2256:  MOVFF  FC4,6D9
11379
2256:  MOVFF  FC4,6D9
11380
225A:  MOVFF  FC3,6D8
11380
225A:  MOVFF  FC3,6D8
11381
225E:  MOVLB  0
11381
225E:  MOVLB  0
11382
2260:  CALL   140C
11382
2260:  CALL   140C
11383
2264:  MOVFF  00,FEF
11383
2264:  MOVFF  00,FEF
11384
2268:  MOVFF  01,FEC
11384
2268:  MOVFF  01,FEC
11385
226C:  MOVFF  02,FEC
11385
226C:  MOVFF  02,FEC
11386
2270:  MOVFF  03,FEC
11386
2270:  MOVFF  03,FEC
11387
2274:  CLRF   18
11387
2274:  CLRF   18
11388
2276:  BTFSC  FF2.7
11388
2276:  BTFSC  FF2.7
11389
2278:  BSF    18.7
11389
2278:  BSF    18.7
11390
227A:  BCF    FF2.7
11390
227A:  BCF    FF2.7
11391
....................          zavg+=z[i]; 
11391
....................          zavg+=z[i]; 
11392
227C:  MOVLB  7
11392
227C:  MOVLB  7
11393
227E:  CLRF   x49
11393
227E:  CLRF   x49
11394
2280:  MOVFF  3B0,748
11394
2280:  MOVFF  3B0,748
11395
2284:  CLRF   x4B
11395
2284:  CLRF   x4B
11396
2286:  MOVLW  04
11396
2286:  MOVLW  04
11397
2288:  MOVWF  x4A
11397
2288:  MOVWF  x4A
11398
228A:  MOVLB  0
11398
228A:  MOVLB  0
11399
228C:  CALL   02BA
11399
228C:  CALL   02BA
11400
2290:  BTFSC  18.7
11400
2290:  BTFSC  18.7
11401
2292:  BSF    FF2.7
11401
2292:  BSF    FF2.7
11402
2294:  MOVFF  02,03
11402
2294:  MOVFF  02,03
11403
2298:  MOVF   01,W
11403
2298:  MOVF   01,W
11404
229A:  ADDLW  20
11404
229A:  ADDLW  20
11405
229C:  MOVWF  FE9
11405
229C:  MOVWF  FE9
11406
229E:  MOVLW  05
11406
229E:  MOVLW  05
11407
22A0:  ADDWFC 02,W
11407
22A0:  ADDWFC 02,W
11408
22A2:  MOVWF  FEA
11408
22A2:  MOVWF  FEA
11409
22A4:  MOVFF  FEF,00
11409
22A4:  MOVFF  FEF,00
11410
22A8:  MOVFF  FEC,01
11410
22A8:  MOVFF  FEC,01
11411
22AC:  MOVFF  FEC,02
11411
22AC:  MOVFF  FEC,02
11412
22B0:  MOVFF  FEC,03
11412
22B0:  MOVFF  FEC,03
11413
22B4:  MOVFF  FEA,3B2
11413
22B4:  MOVFF  FEA,3B2
11414
22B8:  MOVFF  FE9,3B1
11414
22B8:  MOVFF  FE9,3B1
11415
22BC:  BCF    FD8.1
11415
22BC:  BCF    FD8.1
11416
22BE:  MOVFF  3AF,6ED
11416
22BE:  MOVFF  3AF,6ED
11417
22C2:  MOVFF  3AE,6EC
11417
22C2:  MOVFF  3AE,6EC
11418
22C6:  MOVFF  3AD,6EB
11418
22C6:  MOVFF  3AD,6EB
11419
22CA:  MOVFF  3AC,6EA
11419
22CA:  MOVFF  3AC,6EA
11420
22CE:  MOVFF  03,6F1
11420
22CE:  MOVFF  03,6F1
11421
22D2:  MOVFF  02,6F0
11421
22D2:  MOVFF  02,6F0
11422
22D6:  MOVFF  01,6EF
11422
22D6:  MOVFF  01,6EF
11423
22DA:  MOVFF  00,6EE
11423
22DA:  MOVFF  00,6EE
11424
22DE:  CALL   1442
11424
22DE:  CALL   1442
11425
22E2:  MOVFF  3B2,FEA
11425
22E2:  MOVFF  3B2,FEA
11426
22E6:  MOVFF  3B1,FE9
11426
22E6:  MOVFF  3B1,FE9
11427
22EA:  MOVFF  03,3AF
11427
22EA:  MOVFF  03,3AF
11428
22EE:  MOVFF  02,3AE
11428
22EE:  MOVFF  02,3AE
11429
22F2:  MOVFF  01,3AD
11429
22F2:  MOVFF  01,3AD
11430
22F6:  MOVFF  00,3AC
11430
22F6:  MOVFF  00,3AC
11431
....................       } 
11431
....................       } 
11432
22FA:  MOVLB  3
11432
22FA:  MOVLB  3
11433
22FC:  INCF   xB0,F
11433
22FC:  INCF   xB0,F
11434
22FE:  BRA    2022
11434
22FE:  BRA    2022
11435
....................        
11435
....................        
11436
....................       xavg=xavg/BUFLEN; 
11436
....................       xavg=xavg/BUFLEN; 
11437
2300:  MOVFF  3A7,6ED
11437
2300:  MOVFF  3A7,6ED
11438
2304:  MOVFF  3A6,6EC
11438
2304:  MOVFF  3A6,6EC
11439
2308:  MOVFF  3A5,6EB
11439
2308:  MOVFF  3A5,6EB
11440
230C:  MOVFF  3A4,6EA
11440
230C:  MOVFF  3A4,6EA
11441
2310:  MOVLB  6
11441
2310:  MOVLB  6
11442
2312:  CLRF   xF1
11442
2312:  CLRF   xF1
11443
2314:  CLRF   xF0
11443
2314:  CLRF   xF0
11444
2316:  MOVLW  48
11444
2316:  MOVLW  48
11445
2318:  MOVWF  xEF
11445
2318:  MOVWF  xEF
11446
231A:  MOVLW  85
11446
231A:  MOVLW  85
11447
231C:  MOVWF  xEE
11447
231C:  MOVWF  xEE
11448
231E:  MOVLB  0
11448
231E:  MOVLB  0
11449
2320:  CALL   16BA
11449
2320:  CALL   16BA
11450
2324:  MOVFF  03,3A7
11450
2324:  MOVFF  03,3A7
11451
2328:  MOVFF  02,3A6
11451
2328:  MOVFF  02,3A6
11452
232C:  MOVFF  01,3A5
11452
232C:  MOVFF  01,3A5
11453
2330:  MOVFF  00,3A4
11453
2330:  MOVFF  00,3A4
11454
....................       yavg=yavg/BUFLEN; 
11454
....................       yavg=yavg/BUFLEN; 
11455
2334:  MOVFF  3AB,6ED
11455
2334:  MOVFF  3AB,6ED
11456
2338:  MOVFF  3AA,6EC
11456
2338:  MOVFF  3AA,6EC
11457
233C:  MOVFF  3A9,6EB
11457
233C:  MOVFF  3A9,6EB
11458
2340:  MOVFF  3A8,6EA
11458
2340:  MOVFF  3A8,6EA
11459
2344:  MOVLB  6
11459
2344:  MOVLB  6
11460
2346:  CLRF   xF1
11460
2346:  CLRF   xF1
11461
2348:  CLRF   xF0
11461
2348:  CLRF   xF0
11462
234A:  MOVLW  48
11462
234A:  MOVLW  48
11463
234C:  MOVWF  xEF
11463
234C:  MOVWF  xEF
11464
234E:  MOVLW  85
11464
234E:  MOVLW  85
11465
2350:  MOVWF  xEE
11465
2350:  MOVWF  xEE
11466
2352:  MOVLB  0
11466
2352:  MOVLB  0
11467
2354:  CALL   16BA
11467
2354:  CALL   16BA
11468
2358:  MOVFF  03,3AB
11468
2358:  MOVFF  03,3AB
11469
235C:  MOVFF  02,3AA
11469
235C:  MOVFF  02,3AA
11470
2360:  MOVFF  01,3A9
11470
2360:  MOVFF  01,3A9
11471
2364:  MOVFF  00,3A8
11471
2364:  MOVFF  00,3A8
11472
....................       zavg=zavg/BUFLEN; 
11472
....................       zavg=zavg/BUFLEN; 
11473
2368:  MOVFF  3AF,6ED
11473
2368:  MOVFF  3AF,6ED
11474
236C:  MOVFF  3AE,6EC
11474
236C:  MOVFF  3AE,6EC
11475
2370:  MOVFF  3AD,6EB
11475
2370:  MOVFF  3AD,6EB
11476
2374:  MOVFF  3AC,6EA
11476
2374:  MOVFF  3AC,6EA
11477
2378:  MOVLB  6
11477
2378:  MOVLB  6
11478
237A:  CLRF   xF1
11478
237A:  CLRF   xF1
11479
237C:  CLRF   xF0
11479
237C:  CLRF   xF0
11480
237E:  MOVLW  48
11480
237E:  MOVLW  48
11481
2380:  MOVWF  xEF
11481
2380:  MOVWF  xEF
11482
2382:  MOVLW  85
11482
2382:  MOVLW  85
11483
2384:  MOVWF  xEE
11483
2384:  MOVWF  xEE
11484
2386:  MOVLB  0
11484
2386:  MOVLB  0
11485
2388:  CALL   16BA
11485
2388:  CALL   16BA
11486
238C:  MOVFF  03,3AF
11486
238C:  MOVFF  03,3AF
11487
2390:  MOVFF  02,3AE
11487
2390:  MOVFF  02,3AE
11488
2394:  MOVFF  01,3AD
11488
2394:  MOVFF  01,3AD
11489
2398:  MOVFF  00,3AC
11489
2398:  MOVFF  00,3AC
11490
....................  
11490
....................  
11491
....................       // odesli namerene hodnoty 
11491
....................       // odesli namerene hodnoty 
11492
....................       printf(usb_cdc_putc, "%7.3f %4.3f %4.3f %4.3f %4.3f %4.3f %4.3f \n\r",((time << 16) + get_timer0())/15625.0, xavg, quadraticerror(xavg,x,BUFLEN), yavg, quadraticerror(yavg,y,BUFLEN), zavg, quadraticerror(zavg,z,BUFLEN)); //konstanta k je kvuli prevodu do rozzumnych jednotek [s] 
11492
....................       printf(usb_cdc_putc, "%7.3f %4.3f %4.3f %4.3f %4.3f %4.3f %4.3f \n\r",((time << 16) + get_timer0())/15625.0, xavg, quadraticerror(xavg,x,BUFLEN), yavg, quadraticerror(yavg,y,BUFLEN), zavg, quadraticerror(zavg,z,BUFLEN)); //konstanta k je kvuli prevodu do rozzumnych jednotek [s] 
11493
239C:  MOVFF  1A,3B5
11493
239C:  MOVFF  1A,3B5
11494
23A0:  MOVFF  19,3B4
11494
23A0:  MOVFF  19,3B4
11495
23A4:  MOVLB  3
11495
23A4:  MOVLB  3
11496
23A6:  CLRF   xB2
11496
23A6:  CLRF   xB2
11497
23A8:  CLRF   xB3
11497
23A8:  CLRF   xB3
11498
23AA:  MOVF   FD6,W
11498
23AA:  MOVF   FD6,W
11499
23AC:  MOVFF  FD7,03
11499
23AC:  MOVFF  FD7,03
11500
23B0:  ADDWF  xB2,F
11500
23B0:  ADDWF  xB2,F
11501
23B2:  MOVF   FD7,W
11501
23B2:  MOVF   FD7,W
11502
23B4:  ADDWFC xB3,F
11502
23B4:  ADDWFC xB3,F
11503
23B6:  MOVLW  00
11503
23B6:  MOVLW  00
11504
23B8:  ADDWFC xB4,F
11504
23B8:  ADDWFC xB4,F
11505
23BA:  ADDWFC xB5,F
11505
23BA:  ADDWFC xB5,F
11506
23BC:  MOVFF  3B5,6C5
11506
23BC:  MOVFF  3B5,6C5
11507
23C0:  MOVFF  3B4,6C4
11507
23C0:  MOVFF  3B4,6C4
11508
23C4:  MOVFF  3B3,6C3
11508
23C4:  MOVFF  3B3,6C3
11509
23C8:  MOVFF  3B2,6C2
11509
23C8:  MOVFF  3B2,6C2
11510
23CC:  MOVLB  0
11510
23CC:  MOVLB  0
11511
23CE:  GOTO   1818
11511
23CE:  GOTO   1818
11512
23D2:  MOVFF  03,6ED
11512
23D2:  MOVFF  03,6ED
11513
23D6:  MOVFF  02,6EC
11513
23D6:  MOVFF  02,6EC
11514
23DA:  MOVFF  01,6EB
11514
23DA:  MOVFF  01,6EB
11515
23DE:  MOVFF  00,6EA
11515
23DE:  MOVFF  00,6EA
11516
23E2:  MOVLB  6
11516
23E2:  MOVLB  6
11517
23E4:  CLRF   xF1
11517
23E4:  CLRF   xF1
11518
23E6:  MOVLW  24
11518
23E6:  MOVLW  24
11519
23E8:  MOVWF  xF0
11519
23E8:  MOVWF  xF0
11520
23EA:  MOVLW  74
11520
23EA:  MOVLW  74
11521
23EC:  MOVWF  xEF
11521
23EC:  MOVWF  xEF
11522
23EE:  MOVLW  8C
11522
23EE:  MOVLW  8C
11523
23F0:  MOVWF  xEE
11523
23F0:  MOVWF  xEE
11524
23F2:  MOVLB  0
11524
23F2:  MOVLB  0
11525
23F4:  CALL   16BA
11525
23F4:  CALL   16BA
11526
23F8:  MOVFF  00,3B2
11526
23F8:  MOVFF  00,3B2
11527
23FC:  MOVFF  01,3B3
11527
23FC:  MOVFF  01,3B3
11528
2400:  MOVFF  02,3B4
11528
2400:  MOVFF  02,3B4
11529
2404:  MOVFF  03,3B5
11529
2404:  MOVFF  03,3B5
11530
2408:  MOVFF  3A7,6CD
11530
2408:  MOVFF  3A7,6CD
11531
240C:  MOVFF  3A6,6CC
11531
240C:  MOVFF  3A6,6CC
11532
2410:  MOVFF  3A5,6CB
11532
2410:  MOVFF  3A5,6CB
11533
2414:  MOVFF  3A4,6CA
11533
2414:  MOVFF  3A4,6CA
11534
2418:  MOVLB  6
11534
2418:  MOVLB  6
11535
241A:  CLRF   xCF
11535
241A:  CLRF   xCF
11536
241C:  MOVLW  84
11536
241C:  MOVLW  84
11537
241E:  MOVWF  xCE
11537
241E:  MOVWF  xCE
11538
2420:  CLRF   xD1
11538
2420:  CLRF   xD1
11539
2422:  MOVLW  64
11539
2422:  MOVLW  64
11540
2424:  MOVWF  xD0
11540
2424:  MOVWF  xD0
11541
2426:  MOVLB  0
11541
2426:  MOVLB  0
11542
2428:  CALL   1AE2
11542
2428:  CALL   1AE2
11543
242C:  MOVFF  00,3B6
11543
242C:  MOVFF  00,3B6
11544
2430:  MOVFF  01,3B7
11544
2430:  MOVFF  01,3B7
11545
2434:  MOVFF  02,3B8
11545
2434:  MOVFF  02,3B8
11546
2438:  MOVFF  03,3B9
11546
2438:  MOVFF  03,3B9
11547
243C:  MOVFF  3AB,6CD
11547
243C:  MOVFF  3AB,6CD
11548
2440:  MOVFF  3AA,6CC
11548
2440:  MOVFF  3AA,6CC
11549
2444:  MOVFF  3A9,6CB
11549
2444:  MOVFF  3A9,6CB
11550
2448:  MOVFF  3A8,6CA
11550
2448:  MOVFF  3A8,6CA
11551
244C:  MOVLW  02
11551
244C:  MOVLW  02
11552
244E:  MOVLB  6
11552
244E:  MOVLB  6
11553
2450:  MOVWF  xCF
11553
2450:  MOVWF  xCF
11554
2452:  MOVLW  14
11554
2452:  MOVLW  14
11555
2454:  MOVWF  xCE
11555
2454:  MOVWF  xCE
11556
2456:  CLRF   xD1
11556
2456:  CLRF   xD1
11557
2458:  MOVLW  64
11557
2458:  MOVLW  64
11558
245A:  MOVWF  xD0
11558
245A:  MOVWF  xD0
11559
245C:  MOVLB  0
11559
245C:  MOVLB  0
11560
245E:  CALL   1AE2
11560
245E:  CALL   1AE2
11561
2462:  MOVFF  00,3BA
11561
2462:  MOVFF  00,3BA
11562
2466:  MOVFF  01,3BB
11562
2466:  MOVFF  01,3BB
11563
246A:  MOVFF  02,3BC
11563
246A:  MOVFF  02,3BC
11564
246E:  MOVFF  03,3BD
11564
246E:  MOVFF  03,3BD
11565
2472:  MOVFF  3AF,6CD
11565
2472:  MOVFF  3AF,6CD
11566
2476:  MOVFF  3AE,6CC
11566
2476:  MOVFF  3AE,6CC
11567
247A:  MOVFF  3AD,6CB
11567
247A:  MOVFF  3AD,6CB
11568
247E:  MOVFF  3AC,6CA
11568
247E:  MOVFF  3AC,6CA
11569
2482:  MOVLW  05
11569
2482:  MOVLW  05
11570
2484:  MOVLB  6
11570
2484:  MOVLB  6
11571
2486:  MOVWF  xCF
11571
2486:  MOVWF  xCF
11572
2488:  MOVLW  20
11572
2488:  MOVLW  20
11573
248A:  MOVWF  xCE
11573
248A:  MOVWF  xCE
11574
248C:  CLRF   xD1
11574
248C:  CLRF   xD1
11575
248E:  MOVLW  64
11575
248E:  MOVLW  64
11576
2490:  MOVWF  xD0
11576
2490:  MOVWF  xD0
11577
2492:  MOVLB  0
11577
2492:  MOVLB  0
11578
2494:  CALL   1AE2
11578
2494:  CALL   1AE2
11579
2498:  MOVFF  00,3BE
11579
2498:  MOVFF  00,3BE
11580
249C:  MOVFF  01,3BF
11580
249C:  MOVFF  01,3BF
11581
24A0:  MOVFF  02,3C0
11581
24A0:  MOVFF  02,3C0
11582
24A4:  MOVFF  03,3C1
11582
24A4:  MOVFF  03,3C1
11583
24A8:  MOVLW  06
11583
24A8:  MOVLW  06
11584
24AA:  MOVWF  FE9
11584
24AA:  MOVWF  FE9
11585
24AC:  MOVFF  3B5,6D1
11585
24AC:  MOVFF  3B5,6D1
11586
24B0:  MOVFF  3B4,6D0
11586
24B0:  MOVFF  3B4,6D0
11587
24B4:  MOVFF  3B3,6CF
11587
24B4:  MOVFF  3B3,6CF
11588
24B8:  MOVFF  3B2,6CE
11588
24B8:  MOVFF  3B2,6CE
11589
24BC:  MOVLW  03
11589
24BC:  MOVLW  03
11590
24BE:  MOVLB  6
11590
24BE:  MOVLB  6
11591
24C0:  MOVWF  xD2
11591
24C0:  MOVWF  xD2
11592
24C2:  MOVLB  0
11592
24C2:  MOVLB  0
11593
24C4:  RCALL  1DB0
11593
24C4:  RCALL  1DB0
11594
24C6:  MOVLW  20
11594
24C6:  MOVLW  20
11595
24C8:  MOVLB  6
11595
24C8:  MOVLB  6
11596
24CA:  MOVWF  xDB
11596
24CA:  MOVWF  xDB
11597
24CC:  MOVLB  0
11597
24CC:  MOVLB  0
11598
24CE:  CALL   13D4
11598
24CE:  CALL   13D4
11599
24D2:  MOVLW  03
11599
24D2:  MOVLW  03
11600
24D4:  MOVWF  FE9
11600
24D4:  MOVWF  FE9
11601
24D6:  MOVFF  3A7,6D1
11601
24D6:  MOVFF  3A7,6D1
11602
24DA:  MOVFF  3A6,6D0
11602
24DA:  MOVFF  3A6,6D0
11603
24DE:  MOVFF  3A5,6CF
11603
24DE:  MOVFF  3A5,6CF
11604
24E2:  MOVFF  3A4,6CE
11604
24E2:  MOVFF  3A4,6CE
11605
24E6:  MOVLB  6
11605
24E6:  MOVLB  6
11606
24E8:  MOVWF  xD2
11606
24E8:  MOVWF  xD2
11607
24EA:  MOVLB  0
11607
24EA:  MOVLB  0
11608
24EC:  RCALL  1DB0
11608
24EC:  RCALL  1DB0
11609
24EE:  MOVLW  20
11609
24EE:  MOVLW  20
11610
24F0:  MOVLB  6
11610
24F0:  MOVLB  6
11611
24F2:  MOVWF  xDB
11611
24F2:  MOVWF  xDB
11612
24F4:  MOVLB  0
11612
24F4:  MOVLB  0
11613
24F6:  CALL   13D4
11613
24F6:  CALL   13D4
11614
24FA:  MOVLW  03
11614
24FA:  MOVLW  03
11615
24FC:  MOVWF  FE9
11615
24FC:  MOVWF  FE9
11616
24FE:  MOVFF  3B9,6D1
11616
24FE:  MOVFF  3B9,6D1
11617
2502:  MOVFF  3B8,6D0
11617
2502:  MOVFF  3B8,6D0
11618
2506:  MOVFF  3B7,6CF
11618
2506:  MOVFF  3B7,6CF
11619
250A:  MOVFF  3B6,6CE
11619
250A:  MOVFF  3B6,6CE
11620
250E:  MOVLB  6
11620
250E:  MOVLB  6
11621
2510:  MOVWF  xD2
11621
2510:  MOVWF  xD2
11622
2512:  MOVLB  0
11622
2512:  MOVLB  0
11623
2514:  RCALL  1DB0
11623
2514:  RCALL  1DB0
11624
2516:  MOVLW  20
11624
2516:  MOVLW  20
11625
2518:  MOVLB  6
11625
2518:  MOVLB  6
11626
251A:  MOVWF  xDB
11626
251A:  MOVWF  xDB
11627
251C:  MOVLB  0
11627
251C:  MOVLB  0
11628
251E:  CALL   13D4
11628
251E:  CALL   13D4
11629
2522:  MOVLW  03
11629
2522:  MOVLW  03
11630
2524:  MOVWF  FE9
11630
2524:  MOVWF  FE9
11631
2526:  MOVFF  3AB,6D1
11631
2526:  MOVFF  3AB,6D1
11632
252A:  MOVFF  3AA,6D0
11632
252A:  MOVFF  3AA,6D0
11633
252E:  MOVFF  3A9,6CF
11633
252E:  MOVFF  3A9,6CF
11634
2532:  MOVFF  3A8,6CE
11634
2532:  MOVFF  3A8,6CE
11635
2536:  MOVLB  6
11635
2536:  MOVLB  6
11636
2538:  MOVWF  xD2
11636
2538:  MOVWF  xD2
11637
253A:  MOVLB  0
11637
253A:  MOVLB  0
11638
253C:  RCALL  1DB0
11638
253C:  RCALL  1DB0
11639
253E:  MOVLW  20
11639
253E:  MOVLW  20
11640
2540:  MOVLB  6
11640
2540:  MOVLB  6
11641
2542:  MOVWF  xDB
11641
2542:  MOVWF  xDB
11642
2544:  MOVLB  0
11642
2544:  MOVLB  0
11643
2546:  CALL   13D4
11643
2546:  CALL   13D4
11644
254A:  MOVLW  03
11644
254A:  MOVLW  03
11645
254C:  MOVWF  FE9
11645
254C:  MOVWF  FE9
11646
254E:  MOVFF  3BD,6D1
11646
254E:  MOVFF  3BD,6D1
11647
2552:  MOVFF  3BC,6D0
11647
2552:  MOVFF  3BC,6D0
11648
2556:  MOVFF  3BB,6CF
11648
2556:  MOVFF  3BB,6CF
11649
255A:  MOVFF  3BA,6CE
11649
255A:  MOVFF  3BA,6CE
11650
255E:  MOVLB  6
11650
255E:  MOVLB  6
11651
2560:  MOVWF  xD2
11651
2560:  MOVWF  xD2
11652
2562:  MOVLB  0
11652
2562:  MOVLB  0
11653
2564:  RCALL  1DB0
11653
2564:  RCALL  1DB0
11654
2566:  MOVLW  20
11654
2566:  MOVLW  20
11655
2568:  MOVLB  6
11655
2568:  MOVLB  6
11656
256A:  MOVWF  xDB
11656
256A:  MOVWF  xDB
11657
256C:  MOVLB  0
11657
256C:  MOVLB  0
11658
256E:  CALL   13D4
11658
256E:  CALL   13D4
11659
2572:  MOVLW  03
11659
2572:  MOVLW  03
11660
2574:  MOVWF  FE9
11660
2574:  MOVWF  FE9
11661
2576:  MOVFF  3AF,6D1
11661
2576:  MOVFF  3AF,6D1
11662
257A:  MOVFF  3AE,6D0
11662
257A:  MOVFF  3AE,6D0
11663
257E:  MOVFF  3AD,6CF
11663
257E:  MOVFF  3AD,6CF
11664
2582:  MOVFF  3AC,6CE
11664
2582:  MOVFF  3AC,6CE
11665
2586:  MOVLB  6
11665
2586:  MOVLB  6
11666
2588:  MOVWF  xD2
11666
2588:  MOVWF  xD2
11667
258A:  MOVLB  0
11667
258A:  MOVLB  0
11668
258C:  RCALL  1DB0
11668
258C:  RCALL  1DB0
11669
258E:  MOVLW  20
11669
258E:  MOVLW  20
11670
2590:  MOVLB  6
11670
2590:  MOVLB  6
11671
2592:  MOVWF  xDB
11671
2592:  MOVWF  xDB
11672
2594:  MOVLB  0
11672
2594:  MOVLB  0
11673
2596:  CALL   13D4
11673
2596:  CALL   13D4
11674
259A:  MOVLW  03
11674
259A:  MOVLW  03
11675
259C:  MOVWF  FE9
11675
259C:  MOVWF  FE9
11676
259E:  MOVFF  3C1,6D1
11676
259E:  MOVFF  3C1,6D1
11677
25A2:  MOVFF  3C0,6D0
11677
25A2:  MOVFF  3C0,6D0
11678
25A6:  MOVFF  3BF,6CF
11678
25A6:  MOVFF  3BF,6CF
11679
25AA:  MOVFF  3BE,6CE
11679
25AA:  MOVFF  3BE,6CE
11680
25AE:  MOVLB  6
11680
25AE:  MOVLB  6
11681
25B0:  MOVWF  xD2
11681
25B0:  MOVWF  xD2
11682
25B2:  MOVLB  0
11682
25B2:  MOVLB  0
11683
25B4:  CALL   1DB0
11683
25B4:  CALL   1DB0
11684
25B8:  MOVLW  20
11684
25B8:  MOVLW  20
11685
25BA:  MOVLB  6
11685
25BA:  MOVLB  6
11686
25BC:  MOVWF  xDB
11686
25BC:  MOVWF  xDB
11687
25BE:  MOVLB  0
11687
25BE:  MOVLB  0
11688
25C0:  CALL   13D4
11688
25C0:  CALL   13D4
11689
25C4:  MOVLW  0A
11689
25C4:  MOVLW  0A
11690
25C6:  MOVLB  6
11690
25C6:  MOVLB  6
11691
25C8:  MOVWF  xDB
11691
25C8:  MOVWF  xDB
11692
25CA:  MOVLB  0
11692
25CA:  MOVLB  0
11693
25CC:  CALL   13D4
11693
25CC:  CALL   13D4
11694
25D0:  MOVLW  0D
11694
25D0:  MOVLW  0D
11695
25D2:  MOVLB  6
11695
25D2:  MOVLB  6
11696
25D4:  MOVWF  xDB
11696
25D4:  MOVWF  xDB
11697
25D6:  MOVLB  0
11697
25D6:  MOVLB  0
11698
25D8:  CALL   13D4
11698
25D8:  CALL   13D4
11699
....................    } 
11699
....................    } 
11700
25DC:  BRA    201A
11700
25DC:  BRA    201A
11701
....................  } 
11701
....................  } 
11702
25DE:  BRA    1FE4
11702
25DE:  BRA    1FE4
11703
.................... } 
11703
.................... } 
11704
25E0:  SLEEP 
11704
25E0:  SLEEP 
11705
 
11705
 
11706
Configuration Fuses:
11706
Configuration Fuses:
11707
   Word  1: CE3C   IESO FCMEN HSPLL PLL5 CPUDIV4 USBDIV
11707
   Word  1: CE3C   IESO FCMEN HSPLL PLL5 CPUDIV4 USBDIV
11708
   Word  2: 0E39   NOBROWNOUT WDT128 NOWDT BORV20 NOPUT VREGEN
11708
   Word  2: 0E39   NOBROWNOUT WDT128 NOWDT BORV20 NOPUT VREGEN
11709
   Word  3: 8700   PBADEN CCP2C1 MCLR LPT1OSC
11709
   Word  3: 8700   PBADEN CCP2C1 MCLR LPT1OSC
11710
   Word  4: 00A1   STVREN NODEBUG NOLVP NOXINST ICPRT
11710
   Word  4: 00A1   STVREN NODEBUG NOLVP NOXINST ICPRT
11711
   Word  5: C00F   NOPROTECT NOCPD NOCPB
11711
   Word  5: C00F   NOPROTECT NOCPD NOCPB
11712
   Word  6: E00F   NOWRT NOWRTD NOWRTC NOWRTB
11712
   Word  6: E00F   NOWRT NOWRTD NOWRTC NOWRTB
11713
   Word  7: 400F   NOEBTR NOEBTRB
11713
   Word  7: 400F   NOEBTR NOEBTRB