Rev 111 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 111 | Rev 275 | ||
---|---|---|---|
Line 1... | Line 1... | ||
1 | /******************** (C) COPYRIGHT 2006 STMicroelectronics ******************** |
1 | /******************** (C) COPYRIGHT 2008 STMicroelectronics ******************** |
2 | * File Name : usb_prop.c |
2 | * File Name : usb_prop.c |
3 | * Author : MCD Application Team |
3 | * Author : MCD Application Team |
4 | * Date First Issued : 10/01/2006 : V1.0 |
4 | * Date First Issued : 10/01/2008 : V1.0 |
5 | * Description : All processings related to Virtual Com Port Demo |
5 | * Description : All processings related to Virtual Com Port Demo |
6 | ******************************************************************************** |
6 | ******************************************************************************** |
7 | * History: |
7 | * History: |
8 | * 10/01/2006 : V1.0 |
8 | * 10/01/2008 : V1.0 |
9 | ******************************************************************************** |
9 | ******************************************************************************** |
10 | * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS |
10 | * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS |
11 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. |
11 | * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. |
12 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, |
12 | * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, |
13 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE |
13 | * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE |
14 | * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING |
14 | * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING |
15 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. |
15 | * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. |
16 | *******************************************************************************/ |
16 | *******************************************************************************/ |
Line 17... | Line 17... | ||
17 | 17 | ||
- | 18 | /* Includes ------------------------------------------------------------------*/ |
|
18 | /* Includes ------------------------------------------------------------------*/ |
19 | #include "usb.h" |
- | 20 | #include "usb_lib.h" |
|
- | 21 | #include "usb_conf.h" |
|
19 | #include "usb_lib.h" |
22 | #include "usb_prop.h" |
20 | #include "usb_desc.h" |
23 | #include "usb_desc.h" |
21 | #include "usb_pwr.h" |
- | |
- | 24 | #include "usb_pwr.h" |
|
22 | #include "usb_prop.h" |
25 | |
23 | /* Private typedef -----------------------------------------------------------*/ |
26 | /* Private typedef -----------------------------------------------------------*/ |
24 | /* Private define ------------------------------------------------------------*/ |
27 | /* Private define ------------------------------------------------------------*/ |
25 | /* Private macro -------------------------------------------------------------*/ |
28 | /* Private macro -------------------------------------------------------------*/ |
26 | /* Private variables ---------------------------------------------------------*/ |
29 | /* Private variables ---------------------------------------------------------*/ |
Line 27... | Line 30... | ||
27 | u32 Request = 0; |
30 | u32 Request = 0; |
28 | 31 | ||
29 | LINE_CODING linecoding = |
32 | LINE_CODING linecoding = |
30 | { |
33 | { |
31 | 57600, /* baud rate*/ |
34 | 57600, /* baud rate*/ |
32 | 0x00, /* stop bits-1*/ |
35 | 0x00, /* stop bits-1*/ |
33 | 0x00, /* parity - none*/ |
36 | 0x00, /* parity - none*/ |
34 | 0x08 /* no. of bits 8*/ |
37 | 0x08 /* no. of bits 8*/ |
35 | }; |
38 | }; |
36 | /* -------------------------------------------------------------------------- */ |
39 | /* -------------------------------------------------------------------------- */ |
Line 37... | Line 40... | ||
37 | /* Structures initializations */ |
40 | /* Structures initializations */ |
38 | /* -------------------------------------------------------------------------- */ |
41 | /* -------------------------------------------------------------------------- */ |
39 | 42 | ||
40 | DEVICE Device_Table = { |
43 | DEVICE Device_Table = { |
Line 41... | Line 44... | ||
41 | EP_NUM, |
44 | EP_NUM, |
42 | 1 |
45 | 1 |
43 | }; |
46 | }; |
44 | 47 | ||
45 | DEVICE_PROP Device_Property = { |
48 | DEVICE_PROP Device_Property = { |
46 | Virtual_Com_Port_init, |
49 | Virtual_Com_Port_init, |
47 | Virtual_Com_Port_Reset, |
50 | Virtual_Com_Port_Reset, |
48 | Virtual_Com_Port_Status_In, |
51 | Virtual_Com_Port_Status_In, |
49 | Virtual_Com_Port_Status_Out, |
52 | Virtual_Com_Port_Status_Out, |
50 | Virtual_Com_Port_Data_Setup, |
53 | Virtual_Com_Port_Data_Setup, |
51 | Virtual_Com_Port_NoData_Setup, |
54 | Virtual_Com_Port_NoData_Setup, |
52 | Virtual_Com_Port_Get_Interface_Setting, |
55 | Virtual_Com_Port_Get_Interface_Setting, |
53 | Virtual_Com_Port_GetDeviceDescriptor, |
56 | Virtual_Com_Port_GetDeviceDescriptor, |
54 | Virtual_Com_Port_GetConfigDescriptor, |
57 | Virtual_Com_Port_GetConfigDescriptor, |
55 | Virtual_Com_Port_GetStringDescriptor, |
58 | Virtual_Com_Port_GetStringDescriptor, |
56 | 0, |
59 | 0, |
57 | 0x40 /*MAX PACKET SIZE*/ |
60 | 0x40 /*MAX PACKET SIZE*/ |
58 | }; |
61 | }; |
59 | USER_STANDARD_REQUESTS User_Standard_Requests = { |
62 | USER_STANDARD_REQUESTS User_Standard_Requests = { |
60 | Virtual_Com_Port_GetConfiguration, |
63 | Virtual_Com_Port_GetConfiguration, |
61 | Virtual_Com_Port_SetConfiguration, |
64 | Virtual_Com_Port_SetConfiguration, |
62 | Virtual_Com_Port_GetInterface, |
65 | Virtual_Com_Port_GetInterface, |
63 | Virtual_Com_Port_SetInterface, |
66 | Virtual_Com_Port_SetInterface, |
64 | Virtual_Com_Port_GetStatus, |
67 | Virtual_Com_Port_GetStatus, |
65 | Virtual_Com_Port_ClearFeature, |
68 | Virtual_Com_Port_ClearFeature, |
Line 66... | Line 69... | ||
66 | Virtual_Com_Port_SetEndPointFeature, |
69 | Virtual_Com_Port_SetEndPointFeature, |
67 | Virtual_Com_Port_SetDeviceFeature, |
70 | Virtual_Com_Port_SetDeviceFeature, |
68 | Virtual_Com_Port_SetDeviceAddress |
71 | Virtual_Com_Port_SetDeviceAddress |
69 | }; |
- | |
- | 72 | }; |
|
Line 70... | Line 73... | ||
70 | 73 | ||
71 | ONE_DESCRIPTOR Device_Descriptor = { |
74 | ONE_DESCRIPTOR Device_Descriptor = { |
72 | (u8*)Virtual_Com_Port_DeviceDescriptor, |
75 | (u8*)Virtual_Com_Port_DeviceDescriptor, |
73 | VIRTUAL_COM_PORT_SIZ_DEVICE_DESC |
- | |
- | 76 | VIRTUAL_COM_PORT_SIZ_DEVICE_DESC |
|
Line 74... | Line 77... | ||
74 | }; |
77 | }; |
75 | 78 | ||
76 | ONE_DESCRIPTOR Config_Descriptor = { |
79 | ONE_DESCRIPTOR Config_Descriptor = { |
77 | (u8*)Virtual_Com_Port_ConfigDescriptor, |
80 | (u8*)Virtual_Com_Port_ConfigDescriptor, |
78 | VIRTUAL_COM_PORT_SIZ_CONFIG_DESC |
81 | VIRTUAL_COM_PORT_SIZ_CONFIG_DESC |
Line 79... | Line -... | ||
79 | }; |
- | |
- | 82 | }; |
|
80 | 83 | ||
81 | ONE_DESCRIPTOR String_Descriptor[5] = { |
84 | ONE_DESCRIPTOR String_Descriptor[5] = { |
82 | {(u8*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID}, |
85 | {(u8*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID}, |
83 | {(u8*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR}, |
86 | {(u8*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR}, |
84 | {(u8*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT}, |
87 | {(u8*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT}, |
Line 96... | Line 99... | ||
96 | * Output : None. |
99 | * Output : None. |
97 | * Return : None. |
100 | * Return : None. |
98 | *******************************************************************************/ |
101 | *******************************************************************************/ |
99 | void Virtual_Com_Port_init(void) |
102 | void Virtual_Com_Port_init(void) |
100 | { |
103 | { |
101 | u32 timeout = 0; |
- | |
102 | 104 | ||
103 | pInformation->Current_Configuration = 0; |
105 | pInformation->Current_Configuration = 0; |
104 | /* Connect the device */ |
106 | /* Connect the device */ |
105 | PowerOn(); |
107 | PowerOn(); |
106 | /* USB interrupts initialization */ |
108 | /* USB interrupts initialization */ |
107 | _SetISTR(0); /* clear pending interrupts */ |
109 | _SetISTR(0); /* clear pending interrupts */ |
108 | wInterrupt_Mask = IMR_MSK; |
110 | wInterrupt_Mask = IMR_MSK; |
109 | _SetCNTR(wInterrupt_Mask); /* set interrupts mask */ |
111 | _SetCNTR(wInterrupt_Mask); /* set interrupts mask */ |
110 | pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; |
- | |
- | 112 | ||
111 | /* Wait until device is configured */ |
113 | //UART0_Config_Default(); |
112 | while (pInformation->Current_Configuration == 0 && (timeout++<600000)) NOP_Process(); |
- | |
- | 114 | ||
113 | if(pInformation->Current_Configuration !=0) bDeviceState = CONFIGURED; |
115 | bDeviceState = UNCONNECTED; |
114 | } |
116 | } |
115 | /******************************************************************************* |
117 | /******************************************************************************* |
116 | * Function Name : Virtual_Com_Port_Reset |
118 | * Function Name : Virtual_Com_Port_Reset |
117 | * Description : Virtual_Com_Port Mouse reset routine |
119 | * Description : Virtual_Com_Port Mouse reset routine |
118 | * Input : None. |
120 | * Input : None. |
119 | * Output : None. |
121 | * Output : None. |
120 | * Return : None. |
122 | * Return : None. |
121 | *******************************************************************************/ |
123 | *******************************************************************************/ |
122 | void Virtual_Com_Port_Reset(void) |
124 | void Virtual_Com_Port_Reset(void) |
123 | { |
125 | { |
124 | /* Set Virtual_Com_Port_DEVICE as not configured */ |
126 | /* Set Virtual_Com_Port_DEVICE as not configured */ |
125 | pInformation->Current_Configuration = 0; |
127 | pInformation->Current_Configuration = 0; |
126 | pInformation->Current_Interface = 0;/*the default Interface*/ |
128 | pInformation->Current_Interface = 0;/*the default Interface*/ |
- | 129 | ||
- | 130 | /* Current Feature initialization */ |
|
- | 131 | pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7]; |
|
- | 132 | ||
127 | SetBTABLE(BTABLE_ADDRESS); |
133 | SetBTABLE(BTABLE_ADDRESS); |
128 | 134 | ||
129 | /* Initialize Endpoint 0 */ |
135 | /* Initialize Endpoint 0 */ |
130 | SetEPType(ENDP0, EP_CONTROL); |
136 | SetEPType(ENDP0, EP_CONTROL); |
131 | SetEPTxStatus(ENDP0, EP_TX_STALL); |
137 | SetEPTxStatus(ENDP0, EP_TX_STALL); |
132 | SetEPRxAddr(ENDP0, ENDP0_RXADDR); |
138 | SetEPRxAddr(ENDP0, ENDP0_RXADDR); |
133 | SetEPTxAddr(ENDP0, ENDP0_TXADDR); |
139 | SetEPTxAddr(ENDP0, ENDP0_TXADDR); |
134 | Clear_Status_Out(ENDP0); |
140 | Clear_Status_Out(ENDP0); |
135 | SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); |
141 | SetEPRxCount(ENDP0, Device_Property.MaxPacketSize); |
136 | SetEPRxValid(ENDP0); |
142 | SetEPRxValid(ENDP0); |
137 | 143 | ||
138 | /* Initialize Endpoint 1 */ |
144 | /* Initialize Endpoint 1 */ |
139 | SetEPType(ENDP1, EP_BULK); |
145 | SetEPType(ENDP1, EP_BULK); |
140 | SetEPTxAddr(ENDP1, ENDP1_TXADDR); |
146 | SetEPTxAddr(ENDP1, ENDP1_TXADDR); |
141 | SetEPTxStatus(ENDP1, EP_TX_NAK); |
147 | SetEPTxStatus(ENDP1, EP_TX_NAK); |
142 | SetEPRxStatus(ENDP1, EP_RX_DIS); |
148 | SetEPRxStatus(ENDP1, EP_RX_DIS); |
143 | 149 | ||
144 | /* Initialize Endpoint 2 */ |
150 | /* Initialize Endpoint 2 */ |
145 | SetEPType(ENDP2, EP_INTERRUPT); |
151 | SetEPType(ENDP2, EP_INTERRUPT); |
146 | SetEPTxAddr(ENDP2, ENDP2_TXADDR); |
152 | SetEPTxAddr(ENDP2, ENDP2_TXADDR); |
147 | SetEPRxStatus(ENDP2, EP_RX_DIS); |
153 | SetEPRxStatus(ENDP2, EP_RX_DIS); |
148 | SetEPTxStatus(ENDP2, EP_TX_NAK); |
154 | SetEPTxStatus(ENDP2, EP_TX_NAK); |
149 | 155 | ||
150 | /* Initialize Endpoint 3 */ |
156 | /* Initialize Endpoint 3 */ |
151 | SetEPType(ENDP3, EP_BULK); |
157 | SetEPType(ENDP3, EP_BULK); |
152 | SetEPRxAddr(ENDP3, ENDP3_RXADDR); |
158 | SetEPRxAddr(ENDP3, ENDP3_RXADDR); |
153 | SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE); |
159 | SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE); |
154 | SetEPRxStatus(ENDP3, EP_RX_VALID); |
160 | SetEPRxStatus(ENDP3, EP_RX_VALID); |
155 | SetEPTxStatus(ENDP3, EP_TX_DIS); |
161 | SetEPTxStatus(ENDP3, EP_TX_DIS); |
156 | 162 | ||
157 | /* Set this device to response on default address */ |
163 | /* Set this device to response on default address */ |
158 | SetDeviceAddress(0); |
164 | SetDeviceAddress(0); |
- | 165 | bDeviceState = ATTACHED; |
|
- | 166 | } |
|
- | 167 | ||
- | 168 | /******************************************************************************* |
|
- | 169 | * Function Name : Virtual_Com_Port_SetConfiguration. |
|
- | 170 | * Description : Udpade the device state to configured. |
|
- | 171 | * Input : None. |
|
- | 172 | * Output : None. |
|
- | 173 | * Return : None. |
|
- | 174 | *******************************************************************************/ |
|
- | 175 | void Virtual_Com_Port_SetConfiguration(void) |
|
- | 176 | { |
|
- | 177 | DEVICE_INFO *pInfo = &Device_Info; |
|
- | 178 | ||
- | 179 | if (pInfo->Current_Configuration != 0) |
|
- | 180 | { |
|
- | 181 | /* Device configured */ |
|
- | 182 | bDeviceState = CONFIGURED; |
|
- | 183 | } |
|
- | 184 | } |
|
- | 185 | /******************************************************************************* |
|
- | 186 | * Function Name : Virtual_Com_Port_SetConfiguration. |
|
- | 187 | * Description : Udpade the device state to addressed. |
|
- | 188 | * Input : None. |
|
- | 189 | * Output : None. |
|
- | 190 | * Return : None. |
|
- | 191 | *******************************************************************************/ |
|
- | 192 | void Virtual_Com_Port_SetDeviceAddress (void) |
|
- | 193 | { |
|
- | 194 | bDeviceState = ADDRESSED; |
|
159 | } |
195 | } |
160 | /******************************************************************************* |
196 | /******************************************************************************* |
161 | * Function Name : Virtual_Com_Port_Status_In |
197 | * Function Name : Virtual_Com_Port_Status_In |
162 | * Description : |
198 | * Description : |
163 | * Input : None. |
199 | * Input : None. |
164 | * Output : None. |
200 | * Output : None. |
165 | * Return : None. |
201 | * Return : None. |
166 | *******************************************************************************/ |
202 | *******************************************************************************/ |
167 | void Virtual_Com_Port_Status_In(void) |
203 | void Virtual_Com_Port_Status_In(void) |
168 | { |
204 | { |
169 | if (Request == SET_LINE_CODING) |
205 | if (Request == SET_LINE_CODING) |
170 | { |
206 | { |
- | 207 | //UART0_Config(); |
|
171 | Request = 0; |
208 | Request = 0; |
172 | } |
209 | } |
173 | } |
210 | } |
174 | /******************************************************************************* |
211 | /******************************************************************************* |
175 | * Function Name : Virtual_Com_Port_Status_Out |
212 | * Function Name : Virtual_Com_Port_Status_Out |
176 | * Description : |
213 | * Description : |
177 | * Input : None. |
214 | * Input : None. |
178 | * Output : None. |
215 | * Output : None. |
179 | * Return : None. |
216 | * Return : None. |
180 | *******************************************************************************/ |
217 | *******************************************************************************/ |
181 | void Virtual_Com_Port_Status_Out (void) |
218 | void Virtual_Com_Port_Status_Out (void) |
182 | { |
- | |
183 | } |
219 | {} |
184 | /******************************************************************************* |
220 | /******************************************************************************* |
185 | * Function Name : Virtual_Com_Port_Data_Setup |
221 | * Function Name : Virtual_Com_Port_Data_Setup |
186 | * Description : handle the data class specific requests |
222 | * Description : handle the data class specific requests |
187 | * Input : Request Nb. |
223 | * Input : Request Nb. |
188 | * Output : None. |
224 | * Output : None. |
189 | * Return : USB_UNSUPPORT or USB_SUCCESS. |
225 | * Return : USB_UNSUPPORT or USB_SUCCESS. |
190 | *******************************************************************************/ |
226 | *******************************************************************************/ |
191 | RESULT Virtual_Com_Port_Data_Setup(u8 RequestNo) |
227 | RESULT Virtual_Com_Port_Data_Setup(u8 RequestNo) |
192 | { |
228 | { |
193 | u8 *(*CopyRoutine)(u16); |
229 | u8 *(*CopyRoutine)(u16); |
194 | 230 | ||
195 | CopyRoutine = NULL; |
231 | CopyRoutine = NULL; |
196 | 232 | ||
197 | if (RequestNo == GET_LINE_CODING) |
233 | if (RequestNo == GET_LINE_CODING) |
198 | { |
234 | { |
199 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) CopyRoutine = Virtual_Com_Port_GetLineCoding; |
235 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) |
- | 236 | CopyRoutine = Virtual_Com_Port_GetLineCoding; |
|
200 | } |
237 | } |
201 | else if (RequestNo == SET_LINE_CODING) |
238 | else if (RequestNo == SET_LINE_CODING) |
202 | { |
239 | { |
203 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) CopyRoutine = Virtual_Com_Port_SetLineCoding; |
240 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) |
- | 241 | CopyRoutine = Virtual_Com_Port_SetLineCoding; |
|
204 | Request = SET_LINE_CODING; |
242 | Request = SET_LINE_CODING; |
205 | } |
243 | } |
- | 244 | ||
206 | if (CopyRoutine == NULL) return USB_UNSUPPORT; |
245 | if (CopyRoutine == NULL) return USB_UNSUPPORT; |
207 | 246 | ||
208 | pInformation->Ctrl_Info.CopyData = CopyRoutine; |
247 | pInformation->Ctrl_Info.CopyData = CopyRoutine; |
209 | pInformation->Ctrl_Info.Usb_wOffset = 0; |
248 | pInformation->Ctrl_Info.Usb_wOffset = 0; |
210 | (*CopyRoutine)(0); |
249 | (*CopyRoutine)(0); |
211 | return USB_SUCCESS; |
250 | return USB_SUCCESS; |
212 | } |
251 | } |
213 | /******************************************************************************* |
252 | /******************************************************************************* |
214 | * Function Name : Virtual_Com_Port_NoData_Setup |
253 | * Function Name : Virtual_Com_Port_NoData_Setup |
215 | * Description : handle the no data class specific requests |
254 | * Description : handle the no data class specific requests |
216 | * Input : Request Nb. |
255 | * Input : Request Nb. |
217 | * Output : None. |
256 | * Output : None. |
218 | * Return : USB_UNSUPPORT or USB_SUCCESS. |
257 | * Return : USB_UNSUPPORT or USB_SUCCESS. |
219 | *******************************************************************************/ |
258 | *******************************************************************************/ |
220 | RESULT Virtual_Com_Port_NoData_Setup(u8 RequestNo) |
259 | RESULT Virtual_Com_Port_NoData_Setup(u8 RequestNo) |
221 | { |
260 | { |
- | 261 | ||
222 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) |
262 | if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) |
223 | { |
263 | { |
224 | if (RequestNo == SET_COMM_FEATURE) return USB_SUCCESS; |
264 | if (RequestNo == SET_COMM_FEATURE) return USB_SUCCESS; |
225 | else if (RequestNo == SET_CONTROL_LINE_STATE) return USB_SUCCESS; |
265 | else if (RequestNo == SET_CONTROL_LINE_STATE) return USB_SUCCESS; |
226 | } |
266 | } |
- | 267 | ||
227 | return USB_UNSUPPORT; |
268 | return USB_UNSUPPORT; |
228 | } |
269 | } |
229 | /******************************************************************************* |
270 | /******************************************************************************* |
230 | * Function Name : Virtual_Com_Port_GetDeviceDescriptor. |
271 | * Function Name : Virtual_Com_Port_GetDeviceDescriptor. |
231 | * Description : Gets the device descriptor. |
272 | * Description : Gets the device descriptor. |
232 | * Input : Length |
273 | * Input : Length |
233 | * Output : None. |
274 | * Output : None. |
234 | * Return : The address of the device descriptor. |
275 | * Return : The address of the device descriptor. |
235 | *******************************************************************************/ |
276 | *******************************************************************************/ |
236 | u8 *Virtual_Com_Port_GetDeviceDescriptor(u16 Length) |
277 | u8 *Virtual_Com_Port_GetDeviceDescriptor(u16 Length) |
237 | { |
278 | { |
238 | return Standard_GetDescriptorData( Length, &Device_Descriptor ); |
279 | return Standard_GetDescriptorData(Length, &Device_Descriptor); |
239 | } |
280 | } |
240 | /******************************************************************************* |
281 | /******************************************************************************* |
241 | * Function Name : Virtual_Com_Port_GetConfigDescriptor. |
282 | * Function Name : Virtual_Com_Port_GetConfigDescriptor. |
242 | * Description : get the configuration descriptor. |
283 | * Description : get the configuration descriptor. |
243 | * Input : Length |
284 | * Input : Length |
244 | * Output : None. |
285 | * Output : None. |
245 | * Return : The address of the configuration descriptor. |
286 | * Return : The address of the configuration descriptor. |
246 | *******************************************************************************/ |
287 | *******************************************************************************/ |
247 | u8 *Virtual_Com_Port_GetConfigDescriptor(u16 Length) |
288 | u8 *Virtual_Com_Port_GetConfigDescriptor(u16 Length) |
248 | { |
289 | { |
249 | return Standard_GetDescriptorData( Length, &Config_Descriptor ); |
290 | return Standard_GetDescriptorData(Length, &Config_Descriptor); |
250 | } |
291 | } |
251 | /******************************************************************************* |
292 | /******************************************************************************* |
252 | * Function Name : Virtual_Com_Port_GetStringDescriptor |
293 | * Function Name : Virtual_Com_Port_GetStringDescriptor |
253 | * Description : Gets the string descriptors according to the needed index |
294 | * Description : Gets the string descriptors according to the needed index |
254 | * Input : Length |
295 | * Input : Length |
255 | * Output : None. |
296 | * Output : None. |
256 | * Return : The address of the string descriptors. |
297 | * Return : The address of the string descriptors. |
257 | *******************************************************************************/ |
298 | *******************************************************************************/ |
258 | u8 *Virtual_Com_Port_GetStringDescriptor(u16 Length) |
299 | u8 *Virtual_Com_Port_GetStringDescriptor(u16 Length) |
259 | { |
300 | { |
260 | u8 wValue0 = pInformation->USBwValue0; |
301 | u8 wValue0 = pInformation->USBwValue0; |
- | 302 | ||
- | 303 | if (wValue0 > 5) |
|
- | 304 | { |
|
- | 305 | return NULL; |
|
- | 306 | } |
|
- | 307 | else |
|
- | 308 | { |
|
261 | return Standard_GetDescriptorData( Length, &String_Descriptor[wValue0] ); |
309 | return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]); |
- | 310 | } |
|
262 | } |
311 | } |
263 | /******************************************************************************* |
312 | /******************************************************************************* |
264 | * Function Name : Virtual_Com_Port_Get_Interface_Setting. |
313 | * Function Name : Virtual_Com_Port_Get_Interface_Setting. |
265 | * Description : test the interface and the alternate setting according to the |
314 | * Description : test the interface and the alternate setting according to the |
266 | * supported one. |
315 | * supported one. |
267 | * Input1 : u8: Interface : interface number. |
316 | * Input1 : u8: Interface : interface number. |
268 | * Input2 : u8: AlternateSetting : Alternate Setting number. |
317 | * Input2 : u8: AlternateSetting : Alternate Setting number. |
269 | * Output : None. |
318 | * Output : None. |
270 | * Return : The address of the string descriptors. |
319 | * Return : The address of the string descriptors. |
271 | *******************************************************************************/ |
320 | *******************************************************************************/ |
272 | RESULT Virtual_Com_Port_Get_Interface_Setting(u8 Interface,u8 AlternateSetting) |
321 | RESULT Virtual_Com_Port_Get_Interface_Setting(u8 Interface, u8 AlternateSetting) |
273 | { |
322 | { |
- | 323 | if (AlternateSetting > 0) |
|
- | 324 | { |
|
274 | if(AlternateSetting >0) return USB_UNSUPPORT; |
325 | return USB_UNSUPPORT; |
- | 326 | } |
|
- | 327 | else if (Interface > 1) |
|
- | 328 | { |
|
275 | else if(Interface > 1) return USB_UNSUPPORT; |
329 | return USB_UNSUPPORT; |
- | 330 | } |
|
276 | return USB_SUCCESS; |
331 | return USB_SUCCESS; |
277 | } |
332 | } |
278 | /******************************************************************************* |
333 | /******************************************************************************* |
279 | * Function Name : Virtual_Com_Port_GetLineCoding. |
334 | * Function Name : Virtual_Com_Port_GetLineCoding. |
280 | * Description : send the linecoding structure to the PC host. |
335 | * Description : send the linecoding structure to the PC host. |
281 | * Input : Length |
336 | * Input : Length |
282 | * Output : None. |
337 | * Output : None. |
283 | * Return : Inecoding structure base address. |
338 | * Return : Inecoding structure base address. |
284 | *******************************************************************************/ |
339 | *******************************************************************************/ |
285 | u8 *Virtual_Com_Port_GetLineCoding(u16 Length) |
340 | u8 *Virtual_Com_Port_GetLineCoding(u16 Length) |
286 | { |
341 | { |
287 | if(Length==0) |
342 | if (Length == 0) |
288 | { |
343 | { |
289 | pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);; |
344 | pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding); |
290 | return NULL; |
345 | return NULL; |
291 | } |
346 | } |
292 | return(u8 *)&linecoding; |
347 | return(u8 *)&linecoding; |
293 | } |
348 | } |
294 | /******************************************************************************* |
349 | /******************************************************************************* |
295 | * Function Name : Virtual_Com_Port_SetLineCoding. |
350 | * Function Name : Virtual_Com_Port_SetLineCoding. |
296 | * Description : Set the linecoding structure fields. |
351 | * Description : Set the linecoding structure fields. |
297 | * Input : Length |
352 | * Input : Length |
298 | * Output : None |
353 | * Output : None |
299 | * Return : Linecoding structure base address. |
354 | * Return : Linecoding structure base address. |
300 | *******************************************************************************/ |
355 | *******************************************************************************/ |
301 | u8 *Virtual_Com_Port_SetLineCoding(u16 Length) |
356 | u8 *Virtual_Com_Port_SetLineCoding(u16 Length) |
302 | { |
357 | { |
303 | if(Length==0) |
358 | if (Length == 0) |
304 | { |
359 | { |
305 | pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);; |
360 | pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding); |
306 | return NULL; |
361 | return NULL; |
307 | } |
362 | } |
308 | return(u8 *)&linecoding; |
363 | return(u8 *)&linecoding; |
309 | } |
364 | } |
Line 310... | Line 365... | ||
310 | 365 |