]> git.sur5r.net Git - freertos/blob
acf7328c6a19893fc28f6655d2d6583119077129
[freertos] /
1 /*\r
2  * @brief Main USB service task management\r
3  *\r
4  * @note\r
5  * Copyright(C) NXP Semiconductors, 2012\r
6  * Copyright(C) Dean Camera, 2011, 2012\r
7  * All rights reserved.\r
8  *\r
9  * @par\r
10  * Software that is described herein is for illustrative purposes only\r
11  * which provides customers with programming information regarding the\r
12  * LPC products.  This software is supplied "AS IS" without any warranties of\r
13  * any kind, and NXP Semiconductors and its licensor disclaim any and\r
14  * all warranties, express or implied, including all implied warranties of\r
15  * merchantability, fitness for a particular purpose and non-infringement of\r
16  * intellectual property rights.  NXP Semiconductors assumes no responsibility\r
17  * or liability for the use of the software, conveys no license or rights under any\r
18  * patent, copyright, mask work right, or any other intellectual property rights in\r
19  * or to any products. NXP Semiconductors reserves the right to make changes\r
20  * in the software without notification. NXP Semiconductors also makes no\r
21  * representation or warranty that such application will be suitable for the\r
22  * specified use without further testing or modification.\r
23  *\r
24  * @par\r
25  * Permission to use, copy, modify, and distribute this software and its\r
26  * documentation is hereby granted, under NXP Semiconductors' and its\r
27  * licensor's relevant copyrights in the software, without fee, provided that it\r
28  * is used in conjunction with NXP Semiconductors microcontrollers.  This\r
29  * copyright, permission, and disclaimer notice must appear in all copies of\r
30  * this code.\r
31  */\r
32 \r
33 \r
34 #define  __INCLUDE_FROM_USBTASK_C\r
35 #define  __INCLUDE_FROM_USB_DRIVER\r
36 #include "USBTask.h"\r
37 \r
38 volatile bool        USB_IsInitialized;\r
39 \r
40 /* This structure must be 4 bytes aligned */\r
41 PRAGMA_ALIGN_4\r
42 USB_Request_Header_t USB_ControlRequest ATTR_ALIGNED(4) __BSS(USBRAM_SECTION);\r
43 \r
44 #if defined(USB_CAN_BE_HOST) && !defined(HOST_STATE_AS_GPIOR)\r
45 volatile uint8_t     USB_HostState[MAX_USB_CORE];\r
46 #endif\r
47 \r
48 #if defined(USB_CAN_BE_DEVICE) && !defined(DEVICE_STATE_AS_GPIOR)\r
49 volatile uint8_t     USB_DeviceState[MAX_USB_CORE];\r
50 #endif\r
51 \r
52 void USB_USBTask(uint8_t corenum, uint8_t mode)\r
53 {\r
54         #if defined(USB_HOST_ONLY)\r
55                 USB_HostTask(corenum);\r
56         #elif defined(USB_DEVICE_ONLY)\r
57                 USB_DeviceTask(corenum);\r
58         #else\r
59                         if (mode == USB_MODE_Device)\r
60                                 USB_DeviceTask(corenum);\r
61                         else if (mode == USB_MODE_Host)\r
62                                 USB_HostTask(corenum);\r
63         #endif\r
64 }\r
65 \r
66 #if defined(USB_CAN_BE_DEVICE)\r
67 static void USB_DeviceTask(uint8_t corenum)\r
68 {\r
69         if (USB_DeviceState[corenum] != DEVICE_STATE_Unattached)\r
70         {\r
71                 uint8_t PrevEndpoint = Endpoint_GetCurrentEndpoint(corenum);\r
72 \r
73                 Endpoint_SelectEndpoint(corenum, ENDPOINT_CONTROLEP);\r
74 \r
75                 if (Endpoint_IsSETUPReceived(corenum))\r
76                   USB_Device_ProcessControlRequest(corenum);\r
77 \r
78                 Endpoint_SelectEndpoint(corenum, PrevEndpoint);\r
79         }\r
80 }\r
81 #endif\r
82 \r
83 #if defined(USB_CAN_BE_HOST)\r
84 static void USB_HostTask(uint8_t corenum)\r
85 {\r
86 \r
87         uint8_t PrevPipe;\r
88 \r
89         PrevPipe = Pipe_GetCurrentPipe(corenum);\r
90         Pipe_SelectPipe(corenum,PIPE_CONTROLPIPE);\r
91         USB_Host_ProcessNextHostState(corenum);\r
92         Pipe_SelectPipe(corenum,PrevPipe);\r
93 }\r
94 #endif\r
95 \r