?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 32

Line No. Rev Author Line
1 32 kaklik /************************************************************************
2 File Information:
3 FileName: usb_function_cdc.h
4 Dependencies: See INCLUDES section
5 Processor: PIC18 or PIC24 USB Microcontrollers
6 Hardware: The code is natively intended to be used on the following
7 hardware platforms: PICDEM™ FS USB Demo Board,
8 PIC18F87J50 FS USB Plug-In Module, or
9 Explorer 16 + PIC24 USB PIM. The firmware may be
10 modified for use on other USB platforms by editing the
11 HardwareProfile.h file.
12 Complier: Microchip C18 (for PIC18) or C30 (for PIC24)
13 Company: Microchip Technology, Inc.
14  
15 Software License Agreement:
16  
17 The software supplied herewith by Microchip Technology Incorporated
18 (the “Company”) for its PIC® Microcontroller is intended and
19 supplied to you, the Company’s customer, for use solely and
20 exclusively on Microchip PIC Microcontroller products. The
21 software is owned by the Company and/or its supplier, and is
22 protected under applicable copyright laws. All rights are reserved.
23 Any use in violation of the foregoing restrictions may subject the
24 user to criminal sanctions under applicable laws, as well as to
25 civil liability for the breach of the terms and conditions of this
26 license.
27  
28 THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
29 WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
30 TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
31 PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
32 IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
33 CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
34  
35 Summary:
36 This file contains all of functions, macros, definitions, variables,
37 datatypes, etc. that are required for usage with the CDC function
38 driver. This file should be included in projects that use the CDC
39 \function driver. This file should also be included into the
40 usb_descriptors.c file and any other user file that requires access to the
41 CDC interface.
42  
43  
44  
45 This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB"
46 directory.
47  
48 Description:
49 USB CDC Function Driver File
50  
51 This file contains all of functions, macros, definitions, variables,
52 datatypes, etc. that are required for usage with the CDC function
53 driver. This file should be included in projects that use the CDC
54 \function driver. This file should also be included into the
55 usb_descriptors.c file and any other user file that requires access to the
56 CDC interface.
57  
58 This file is located in the "\<Install Directory\>\\Microchip\\Include\\USB"
59 directory.
60  
61 When including this file in a new project, this file can either be
62 referenced from the directory in which it was installed or copied
63 directly into the user application folder. If the first method is
64 chosen to keep the file located in the folder in which it is installed
65 then include paths need to be added so that the library and the
66 application both know where to reference each others files. If the
67 application folder is located in the same folder as the Microchip
68 folder (like the current demo folders), then the following include
69 paths need to be added to the application's project:
70  
71 .
72  
73 ..\\..\\Microchip\\Include
74  
75 If a different directory structure is used, modify the paths as
76 required. An example using absolute paths instead of relative paths
77 would be the following:
78  
79 C:\\Microchip Solutions\\Microchip\\Include
80  
81 C:\\Microchip Solutions\\My Demo Application
82  
83 ********************************************************************/
84  
85 /********************************************************************
86 Change History:
87 Rev Description
88 ---- -----------
89 2.3 Decricated the mUSBUSARTIsTxTrfReady() macro. It is
90 replaced by the USBUSARTIsTxTrfReady() function.
91  
92 2.6 Minor defintion changes
93 2.6a- No change
94 2.7a
95 ********************************************************************/
96  
97 #ifndef CDC_H
98 #define CDC_H
99  
100 /** I N C L U D E S **********************************************************/
101 #include "GenericTypeDefs.h"
102 #include "USB\usb.h"
103 #include "usb_config.h"
104  
105 /** D E F I N I T I O N S ****************************************************/
106  
107 /* Class-Specific Requests */
108 #define SEND_ENCAPSULATED_COMMAND 0x00
109 #define GET_ENCAPSULATED_RESPONSE 0x01
110 #define SET_COMM_FEATURE 0x02
111 #define GET_COMM_FEATURE 0x03
112 #define CLEAR_COMM_FEATURE 0x04
113 #define SET_LINE_CODING 0x20
114 #define GET_LINE_CODING 0x21
115 #define SET_CONTROL_LINE_STATE 0x22
116 #define SEND_BREAK 0x23
117  
118 /* Notifications *
119 * Note: Notifications are polled over
120 * Communication Interface (Interrupt Endpoint)
121 */
122 #define NETWORK_CONNECTION 0x00
123 #define RESPONSE_AVAILABLE 0x01
124 #define SERIAL_STATE 0x20
125  
126  
127 /* Device Class Code */
128 #define CDC_DEVICE 0x02
129  
130 /* Communication Interface Class Code */
131 #define COMM_INTF 0x02
132  
133 /* Communication Interface Class SubClass Codes */
134 #define ABSTRACT_CONTROL_MODEL 0x02
135  
136 /* Communication Interface Class Control Protocol Codes */
137 #define V25TER 0x01 // Common AT commands ("Hayes(TM)")
138  
139  
140 /* Data Interface Class Codes */
141 #define DATA_INTF 0x0A
142  
143 /* Data Interface Class Protocol Codes */
144 #define NO_PROTOCOL 0x00 // No class specific protocol required
145  
146  
147 /* Communication Feature Selector Codes */
148 #define ABSTRACT_STATE 0x01
149 #define COUNTRY_SETTING 0x02
150  
151 /* Functional Descriptors */
152 /* Type Values for the bDscType Field */
153 #define CS_INTERFACE 0x24
154 #define CS_ENDPOINT 0x25
155  
156 /* bDscSubType in Functional Descriptors */
157 #define DSC_FN_HEADER 0x00
158 #define DSC_FN_CALL_MGT 0x01
159 #define DSC_FN_ACM 0x02 // ACM - Abstract Control Management
160 #define DSC_FN_DLM 0x03 // DLM - Direct Line Managment
161 #define DSC_FN_TELEPHONE_RINGER 0x04
162 #define DSC_FN_RPT_CAPABILITIES 0x05
163 #define DSC_FN_UNION 0x06
164 #define DSC_FN_COUNTRY_SELECTION 0x07
165 #define DSC_FN_TEL_OP_MODES 0x08
166 #define DSC_FN_USB_TERMINAL 0x09
167 /* more.... see Table 25 in USB CDC Specification 1.1 */
168  
169 /* CDC Bulk IN transfer states */
170 #define CDC_TX_READY 0
171 #define CDC_TX_BUSY 1
172 #define CDC_TX_BUSY_ZLP 2 // ZLP: Zero Length Packet
173 #define CDC_TX_COMPLETING 3
174  
175 #if defined(USB_CDC_SET_LINE_CODING_HANDLER)
176 #define LINE_CODING_TARGET &cdc_notice.SetLineCoding._byte[0]
177 #define LINE_CODING_PFUNC &USB_CDC_SET_LINE_CODING_HANDLER
178 #else
179 #define LINE_CODING_TARGET &line_coding._byte[0]
180 #define LINE_CODING_PFUNC NULL
181 #endif
182  
183 #if defined(USB_CDC_SUPPORT_HARDWARE_FLOW_CONTROL)
184 #define CONFIGURE_RTS(a) UART_RTS = a;
185 #define CONFIGURE_DTR(a) UART_DTR = a;
186 #else
187 #define CONFIGURE_RTS(a)
188 #define CONFIGURE_DTR(a)
189 #endif
190  
191 #if defined(USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D3)
192 #error This option is not currently supported.
193 #else
194 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D3_VAL 0x00
195 #endif
196  
197 #if defined(USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D2)
198 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D2_VAL 0x04
199 #else
200 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D2_VAL 0x00
201 #endif
202  
203 #if defined(USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1)
204 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1_VAL 0x02
205 #else
206 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1_VAL 0x00
207 #endif
208  
209 #if defined(USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D0)
210 #error This option is not currently supported.
211 #else
212 #define USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D0_VAL 0x00
213 #endif
214  
215 #define USB_CDC_ACM_FN_DSC_VAL \
216 USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D3_VAL |\
217 USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D2_VAL |\
218 USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D1_VAL |\
219 USB_CDC_SUPPORT_ABSTRACT_CONTROL_MANAGEMENT_CAPABILITIES_D0_VAL
220  
221 /******************************************************************************
222 Function:
223 void CDCSetBaudRate(DWORD baudRate)
224  
225 Summary:
226 This macro is used set the baud rate reported back to the host during
227 a get line coding request. (optional)
228  
229 Description:
230 This macro is used set the baud rate reported back to the host during
231 a get line coding request.
232  
233 Typical Usage:
234 <code>
235 CDCSetBaudRate(19200);
236 </code>
237  
238 This function is optional for CDC devices that do not actually convert
239 the USB traffic to a hardware UART.
240  
241 PreCondition:
242 None
243  
244 Parameters:
245 DWORD baudRate - The desired baudrate
246  
247 Return Values:
248 None
249  
250 Remarks:
251 None
252  
253 *****************************************************************************/
254 #define CDCSetBaudRate(baudRate) {line_coding.dwDTERate.Val=baudRate;}
255  
256 /******************************************************************************
257 Function:
258 void CDCSetCharacterFormat(BYTE charFormat)
259  
260 Summary:
261 This macro is used manually set the character format reported back to
262 the host during a get line coding request. (optional)
263  
264 Description:
265 This macro is used manually set the character format reported back to
266 the host during a get line coding request.
267  
268 Typical Usage:
269 <code>
270 CDCSetCharacterFormat(19200);
271 </code>
272  
273 This function is optional for CDC devices that do not actually convert
274 the USB traffic to a hardware UART.
275  
276 PreCondition:
277 None
278  
279 Parameters:
280 BYTE charFormat - number of stop bits. Available options are:
281 * NUM_STOP_BITS_1 - 1 Stop bit
282 * NUM_STOP_BITS_1_5 - 1.5 Stop bits
283 * NUM_STOP_BITS_2 - 2 Stop bits
284  
285 Return Values:
286 None
287  
288 Remarks:
289 None
290  
291 *****************************************************************************/
292 #define CDCSetCharacterFormat(charFormat) {line_coding.bCharFormat=charFormat;}
293 #define NUM_STOP_BITS_1 0 //1 stop bit - used by CDCSetLineCoding() and CDCSetCharacterFormat()
294 #define NUM_STOP_BITS_1_5 1 //1.5 stop bit - used by CDCSetLineCoding() and CDCSetCharacterFormat()
295 #define NUM_STOP_BITS_2 2 //2 stop bit - used by CDCSetLineCoding() and CDCSetCharacterFormat()
296  
297 /******************************************************************************
298 Function:
299 void CDCSetParity(BYTE parityType)
300  
301 Summary:
302 This function is used manually set the parity format reported back to
303 the host during a get line coding request. (optional)
304  
305 Description:
306 This macro is used manually set the parity format reported back to
307 the host during a get line coding request.
308  
309 Typical Usage:
310 <code>
311 CDCSetParity(PARITY_NONE);
312 </code>
313  
314 This function is optional for CDC devices that do not actually convert
315 the USB traffic to a hardware UART.
316  
317 PreCondition:
318 None
319  
320 Parameters:
321 BYTE parityType - Type of parity. The options are the following:
322 * PARITY_NONE
323 * PARITY_ODD
324 * PARITY_EVEN
325 * PARITY_MARK
326 * PARITY_SPACE
327  
328 Return Values:
329 None
330  
331 Remarks:
332 None
333  
334 *****************************************************************************/
335 #define CDCSetParity(parityType) {line_coding.bParityType=parityType;}
336 #define PARITY_NONE 0 //no parity - used by CDCSetLineCoding() and CDCSetParity()
337 #define PARITY_ODD 1 //odd parity - used by CDCSetLineCoding() and CDCSetParity()
338 #define PARITY_EVEN 2 //even parity - used by CDCSetLineCoding() and CDCSetParity()
339 #define PARITY_MARK 3 //mark parity - used by CDCSetLineCoding() and CDCSetParity()
340 #define PARITY_SPACE 4 //space parity - used by CDCSetLineCoding() and CDCSetParity()
341  
342 /******************************************************************************
343 Function:
344 void CDCSetDataSize(BYTE dataBits)
345  
346 Summary:
347 This function is used manually set the number of data bits reported back
348 to the host during a get line coding request. (optional)
349  
350 Description:
351 This function is used manually set the number of data bits reported back
352 to the host during a get line coding request.
353  
354 Typical Usage:
355 <code>
356 CDCSetDataSize(8);
357 </code>
358  
359 This function is optional for CDC devices that do not actually convert
360 the USB traffic to a hardware UART.
361  
362 PreCondition:
363 None
364  
365 Parameters:
366 BYTE dataBits - number of data bits. The options are 5, 6, 7, 8, or 16.
367  
368 Return Values:
369 None
370  
371 Remarks:
372 None
373  
374 *****************************************************************************/
375 #define CDCSetDataSize(dataBits) {line_coding.bDataBits=dataBits;}
376  
377 /******************************************************************************
378 Function:
379 void CDCSetLineCoding(DWORD baud, BYTE format, BYTE parity, BYTE dataSize)
380  
381 Summary:
382 This function is used to manually set the data reported back
383 to the host during a get line coding request. (optional)
384  
385 Description:
386 This function is used to manually set the data reported back
387 to the host during a get line coding request.
388  
389 Typical Usage:
390 <code>
391 CDCSetLineCoding(19200, NUM_STOP_BITS_1, PARITY_NONE, 8);
392 </code>
393  
394 This function is optional for CDC devices that do not actually convert
395 the USB traffic to a hardware UART.
396  
397 PreCondition:
398 None
399  
400 Parameters:
401 DWORD baud - The desired baudrate
402 BYTE format - number of stop bits. Available options are:
403 * NUM_STOP_BITS_1 - 1 Stop bit
404 * NUM_STOP_BITS_1_5 - 1.5 Stop bits
405 * NUM_STOP_BITS_2 - 2 Stop bits
406 BYTE parity - Type of parity. The options are the following:
407 * PARITY_NONE
408 * PARITY_ODD
409 * PARITY_EVEN
410 * PARITY_MARK
411 * PARITY_SPACE
412 BYTE dataSize - number of data bits. The options are 5, 6, 7, 8, or 16.
413  
414 Return Values:
415 None
416  
417 Remarks:
418 None
419  
420 *****************************************************************************/
421 #define CDCSetLineCoding(baud,format,parity,dataSize) {\
422 CDCSetBaudRate(baud);\
423 CDCSetCharacterFormat(format);\
424 CDCSetParity(parity);\
425 CDCSetDataSize(dataSize);\
426 }
427  
428 /******************************************************************************
429 Function:
430 BOOL USBUSARTIsTxTrfReady(void)
431  
432 Summary:
433 This macro is used to check if the CDC class is ready
434 to send more data.
435  
436 Description:
437 This macro is used to check if the CDC class is ready
438 to send more data.
439  
440 Typical Usage:
441 <code>
442 if(USBUSARTIsTxTrfReady())
443 {
444 putrsUSBUSART("Hello World");
445 }
446 </code>
447  
448 PreCondition:
449 The return value of this function is only valid if the device is in a
450 configured state (i.e. - USBDeviceGetState() returns CONFIGURED_STATE)
451  
452 Parameters:
453 None
454  
455 Return Values:
456 None
457  
458 Remarks:
459 None
460  
461 *****************************************************************************/
462 #define USBUSARTIsTxTrfReady() (cdc_trf_state == CDC_TX_READY)
463  
464 /******************************************************************************
465 Function:
466 void mUSBUSARTTxRam(BYTE *pData, BYTE len)
467  
468 Description:
469 Depricated in MCHPFSUSB v2.3. This macro has been replaced by
470 USBUSARTIsTxTrfReady().
471 *****************************************************************************/
472 #define mUSBUSARTIsTxTrfReady() USBUSARTIsTxTrfReady()
473  
474 /******************************************************************************
475 Function:
476 void mUSBUSARTTxRam(BYTE *pData, BYTE len)
477  
478 Description:
479 Use this macro to transfer data located in data memory.
480 Use this macro when:
481 1. Data stream is not null-terminated
482 2. Transfer length is known
483 Remember: cdc_trf_state must == CDC_TX_READY
484 Unlike putsUSBUSART, there is not code double checking
485 the transfer state. Unexpected behavior will occur if
486 this function is called when cdc_trf_state != CDC_TX_READY
487  
488 PreCondition:
489 cdc_trf_state must be in the CDC_TX_READY state.
490 Value of 'len' must be equal to or smaller than 255 bytes.
491  
492 Paramters:
493 pDdata : Pointer to the starting location of data bytes
494 len : Number of bytes to be transferred
495  
496 Return Values:
497 None
498  
499 Remarks:
500 This macro only handles the setup of the transfer. The
501 actual transfer is handled by CDCTxService().
502  
503 *****************************************************************************/
504 #define mUSBUSARTTxRam(pData,len) \
505 { \
506 pCDCSrc.bRam = pData; \
507 cdc_tx_len = len; \
508 cdc_mem_type = USB_EP0_RAM; \
509 cdc_trf_state = CDC_TX_BUSY; \
510 }
511  
512 /******************************************************************************
513 Function:
514 void mUSBUSARTTxRom(rom BYTE *pData, BYTE len)
515  
516 Description:
517 Use this macro to transfer data located in program memory.
518 Use this macro when:
519 1. Data stream is not null-terminated
520 2. Transfer length is known
521  
522 Remember: cdc_trf_state must == CDC_TX_READY
523 Unlike putrsUSBUSART, there is not code double checking
524 the transfer state. Unexpected behavior will occur if
525 this function is called when cdc_trf_state != CDC_TX_READY
526  
527 PreCondition:
528 cdc_trf_state must be in the CDC_TX_READY state.
529 Value of 'len' must be equal to or smaller than 255 bytes.
530  
531 Parameters:
532 pDdata : Pointer to the starting location of data bytes
533 len : Number of bytes to be transferred
534  
535 Return Values:
536 None
537  
538 Remarks:
539 This macro only handles the setup of the transfer. The
540 actual transfer is handled by CDCTxService().
541  
542 *****************************************************************************/
543 #define mUSBUSARTTxRom(pData,len) \
544 { \
545 pCDCSrc.bRom = pData; \
546 cdc_tx_len = len; \
547 cdc_mem_type = USB_EP0_ROM; \
548 cdc_trf_state = CDC_TX_BUSY; \
549 }
550  
551 /** S T R U C T U R E S ******************************************************/
552  
553 /* Line Coding Structure */
554 #define LINE_CODING_LENGTH 0x07
555  
556 typedef union _LINE_CODING
557 {
558 struct
559 {
560 BYTE _byte[LINE_CODING_LENGTH];
561 };
562 struct
563 {
564 DWORD_VAL dwDTERate; // Complex data structure
565 BYTE bCharFormat;
566 BYTE bParityType;
567 BYTE bDataBits;
568 };
569 } LINE_CODING;
570  
571 typedef union _CONTROL_SIGNAL_BITMAP
572 {
573 BYTE _byte;
574 struct
575 {
576 unsigned DTE_PRESENT:1; // [0] Not Present [1] Present
577 unsigned CARRIER_CONTROL:1; // [0] Deactivate [1] Activate
578 };
579 } CONTROL_SIGNAL_BITMAP;
580  
581  
582 /* Functional Descriptor Structure - See CDC Specification 1.1 for details */
583  
584 /* Header Functional Descriptor */
585 typedef struct __attribute__((packed)) _USB_CDC_HEADER_FN_DSC
586 {
587 BYTE bFNLength;
588 BYTE bDscType;
589 BYTE bDscSubType;
590 WORD bcdCDC;
591 } USB_CDC_HEADER_FN_DSC;
592  
593 /* Abstract Control Management Functional Descriptor */
594 typedef struct __attribute__((packed)) _USB_CDC_ACM_FN_DSC
595 {
596 BYTE bFNLength;
597 BYTE bDscType;
598 BYTE bDscSubType;
599 BYTE bmCapabilities;
600 } USB_CDC_ACM_FN_DSC;
601  
602 /* Union Functional Descriptor */
603 typedef struct __attribute__((packed)) _USB_CDC_UNION_FN_DSC
604 {
605 BYTE bFNLength;
606 BYTE bDscType;
607 BYTE bDscSubType;
608 BYTE bMasterIntf;
609 BYTE bSaveIntf0;
610 } USB_CDC_UNION_FN_DSC;
611  
612 /* Call Management Functional Descriptor */
613 typedef struct __attribute__((packed)) _USB_CDC_CALL_MGT_FN_DSC
614 {
615 BYTE bFNLength;
616 BYTE bDscType;
617 BYTE bDscSubType;
618 BYTE bmCapabilities;
619 BYTE bDataInterface;
620 } USB_CDC_CALL_MGT_FN_DSC;
621  
622 typedef union __attribute__((packed)) _CDC_NOTICE
623 {
624 LINE_CODING GetLineCoding;
625 LINE_CODING SetLineCoding;
626 unsigned char packet[CDC_COMM_IN_EP_SIZE];
627 } CDC_NOTICE, *PCDC_NOTICE;
628  
629 /** E X T E R N S ************************************************************/
630 extern BYTE cdc_rx_len;
631 extern USB_HANDLE lastTransmission;
632  
633 extern BYTE cdc_trf_state;
634 extern POINTER pCDCSrc;
635 extern BYTE cdc_tx_len;
636 extern BYTE cdc_mem_type;
637  
638 extern volatile FAR CDC_NOTICE cdc_notice;
639 extern LINE_CODING line_coding;
640  
641 extern volatile CTRL_TRF_SETUP SetupPkt;
642 extern ROM BYTE configDescriptor1[];
643  
644 /** Public Prototypes *************************************************/
645 void USBCheckCDCRequest(void);
646 void CDCInitEP(void);
647 BYTE getsUSBUSART(char *buffer, BYTE len);
648 void putrsUSBUSART(const ROM char *data);
649 void putUSBUSART(char *data, BYTE Length);
650 void putsUSBUSART(char *data);
651 void CDCTxService(void);
652  
653 #endif //CDC_H
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3