]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_A5_SAMA5D4x_EK_IAR/AtmelFiles/usb/include/CDCDSerialPort.h
Core kernel code:
[freertos] / FreeRTOS / Demo / CORTEX_A5_SAMA5D4x_EK_IAR / AtmelFiles / usb / include / CDCDSerialPort.h
1 /* ----------------------------------------------------------------------------\r
2  *         ATMEL Microcontroller Software Support\r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2010, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\r
8  * Redistribution and use in source and binary forms, with or without\r
9  * modification, are permitted provided that the following conditions are met:\r
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\r
14  * Atmel's name may not be used to endorse or promote products derived from\r
15  * this software without specific prior written permission.\r
16  *\r
17  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR\r
18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\r
19  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE\r
20  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,\r
21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,\r
23  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\r
24  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\r
25  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
26  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
27  * ----------------------------------------------------------------------------\r
28  */\r
29 \r
30 /** \file\r
31  *  Definition of a class for implementing a USB device\r
32  *  CDC serial port function.\r
33  */\r
34 \r
35 #ifndef _CDCDSERIALPORT_H_\r
36 #define _CDCDSERIALPORT_H_\r
37 \r
38 /*------------------------------------------------------------------------------\r
39  *         Headers\r
40  *------------------------------------------------------------------------------*/\r
41  \r
42 /* These headers were introduced in C99\r
43    by working group ISO/IEC JTC1/SC22/WG14. */\r
44 #include <stdint.h>\r
45 \r
46 #include <USBRequests.h>\r
47 #include <CDCRequests.h>\r
48 #include <CDCNotifications.h>\r
49 #include "USBD.h"\r
50 #include <USBDDriver.h>\r
51 /** \addtogroup usbd_cdc\r
52  *@{\r
53  */\r
54 \r
55 /*------------------------------------------------------------------------------\r
56  *         Defines\r
57  *------------------------------------------------------------------------------*/\r
58 \r
59 /** \addtogroup usbd_cdc_serial_desc USB Device Serial Port Descriptor Values\r
60  *      @{\r
61  */\r
62 /** Default CDC interrupt endpoints max packat size (8). */\r
63 #define CDCDSerialPort_INTERRUPT_MAXPACKETSIZE          8\r
64 /** Default CDC interrupt endpoint polling rate of High Speed (16ms). */\r
65 #define CDCDSerialPort_INTERRUPT_INTERVAL_HS            8\r
66 /** Default CDC interrupt endpoint polling rate of Full Speed (16ms). */\r
67 #define CDCDSerialPort_INTERRUPT_INTERVAL_FS            16\r
68 /** Default CDC bulk endpoints max packat size (512, for HS actually). */\r
69 #define CDCDSerialPort_BULK_MAXPACKETSIZE_HS            512\r
70 /** Default CDC bulk endpoints max packat size (64, for FS actually). */\r
71 #define CDCDSerialPort_BULK_MAXPACKETSIZE_FS            64\r
72 /**     @}*/\r
73 \r
74 /** \addtogroup usbd_cdc_serial_events USB Device Serial Port Events\r
75  *      @{\r
76  */\r
77 /** SetControlLineState event, value is changed */\r
78 #define CDCDSerialPortEvent_SETCONTROLLINESTATE         0\r
79 /** SetLineCoding event, value is to changed according to return value */\r
80 #define CDCDSerialPortEvent_SETLINECODING               1\r
81 /**     @}*/\r
82 \r
83 /*------------------------------------------------------------------------------\r
84  *         Types\r
85  *------------------------------------------------------------------------------*/\r
86 \r
87 /** Callback function for serial port events */\r
88 typedef uint32_t (*CDCDSerialPortEventHandler)(uint32_t dwEvent,\r
89                                                uint32_t dwParam,\r
90                                                void * pArguments);\r
91 \r
92 /**\r
93  * Struct for USB CDC virtual COM serial port function.\r
94  */\r
95 typedef struct _CDCDSerialPort {\r
96     /** USB Driver for the %device */\r
97     USBDDriver *pUsbd;\r
98     /** Callback for serial port events */\r
99     CDCDSerialPortEventHandler fEventHandler;\r
100     /** Callback arguments */\r
101     void *pArg;\r
102     /** USB starting interface index */\r
103     uint8_t bInterfaceNdx;\r
104     /** USB number of interfaces */\r
105     uint8_t bNumInterface;\r
106     /** USB interrupt IN endpoint address */\r
107     uint8_t bIntInPIPE;\r
108     /** USB bulk IN endpoint address */\r
109     uint8_t bBulkInPIPE;\r
110     /** USB bulk OUT endpoint address */\r
111     uint8_t bBulkOutPIPE;\r
112 \r
113     /** Serial port ControlLineState */\r
114     uint8_t        bControlLineState;\r
115     /** Serial port SerialState */\r
116     uint16_t       wSerialState;\r
117     /** Serial port linecoding */\r
118     CDCLineCoding  lineCoding;\r
119 \r
120     uint8_t  bReserved;\r
121 } CDCDSerialPort;\r
122 \r
123 /*------------------------------------------------------------------------------\r
124  *         Functions\r
125  *------------------------------------------------------------------------------*/\r
126 \r
127 extern void CDCDSerialPort_Initialize(CDCDSerialPort *pCdcd,\r
128                                       USBDDriver *pUsbd,\r
129                                       CDCDSerialPortEventHandler fCallback,\r
130                                       void *pArg,\r
131                                       uint8_t firstInterface,\r
132                                       uint8_t numInterface);\r
133 \r
134 extern USBGenericDescriptor * CDCDSerialPort_ParseInterfaces(\r
135     CDCDSerialPort * pCdcd,\r
136     USBGenericDescriptor * pDescriptors, uint32_t dwLength);\r
137 \r
138 extern uint32_t CDCDSerialPort_RequestHandler(\r
139     CDCDSerialPort *pCdcd,\r
140     const USBGenericRequest *pRequest);\r
141 \r
142 extern uint32_t CDCDSerialPort_Write(\r
143     const CDCDSerialPort *pCdcd,\r
144     void *pData, uint32_t dwSize,\r
145     TransferCallback fCallback, void* pArg);\r
146 \r
147 extern uint32_t CDCDSerialPort_Read(\r
148     const CDCDSerialPort *pCdcd,\r
149     void *pData, uint32_t dwSize,\r
150     TransferCallback fCallback, void* pArg);\r
151 \r
152 extern uint16_t CDCDSerialPort_GetSerialState(\r
153     const CDCDSerialPort *pCdcd);\r
154 \r
155 extern void CDCDSerialPort_SetSerialState(\r
156     CDCDSerialPort *pCdcd,\r
157     uint16_t wSerialState);\r
158 \r
159 extern uint8_t CDCDSerialPort_GetControlLineState(\r
160     const CDCDSerialPort * pCdcd);\r
161 \r
162 extern void CDCDSerialPort_GetLineCoding(\r
163     const CDCDSerialPort * pCdcd,\r
164     CDCLineCoding * pLineCoding);\r
165 \r
166 /**@}*/\r
167 #endif /* #ifndef _CDCDSERIALPORT_H_ */\r