]> git.sur5r.net Git - freertos/blob
fbdf55fad46eb20be39ce16f4fa54abdb470dfd3
[freertos] /
1 /*\r
2  * @brief USB Controller definitions for the LPC microcontrollers\r
3  *\r
4  * @note\r
5  * Copyright(C) NXP Semiconductors, 2012\r
6  * All rights reserved.\r
7  *\r
8  * @par\r
9  * Software that is described herein is for illustrative purposes only\r
10  * which provides customers with programming information regarding the\r
11  * LPC products.  This software is supplied "AS IS" without any warranties of\r
12  * any kind, and NXP Semiconductors and its licensor disclaim any and\r
13  * all warranties, express or implied, including all implied warranties of\r
14  * merchantability, fitness for a particular purpose and non-infringement of\r
15  * intellectual property rights.  NXP Semiconductors assumes no responsibility\r
16  * or liability for the use of the software, conveys no license or rights under any\r
17  * patent, copyright, mask work right, or any other intellectual property rights in\r
18  * or to any products. NXP Semiconductors reserves the right to make changes\r
19  * in the software without notification. NXP Semiconductors also makes no\r
20  * representation or warranty that such application will be suitable for the\r
21  * specified use without further testing or modification.\r
22  *\r
23  * @par\r
24  * Permission to use, copy, modify, and distribute this software and its\r
25  * documentation is hereby granted, under NXP Semiconductors' and its\r
26  * licensor's relevant copyrights in the software, without fee, provided that it\r
27  * is used in conjunction with NXP Semiconductors microcontrollers.  This\r
28  * copyright, permission, and disclaimer notice must appear in all copies of\r
29  * this code.\r
30  */\r
31 \r
32 #define  __INCLUDE_FROM_USB_DRIVER\r
33 #define  __INCLUDE_FROM_USB_CONTROLLER_C\r
34 #include "USBController.h"\r
35 \r
36 volatile uint8_t USB_CurrentMode[MAX_USB_CORE];\r
37 volatile bool Mem_IsInitialized = false;\r
38 \r
39 \r
40 void USB_Init(uint8_t corenum, uint8_t mode)\r
41 {\r
42 #if defined(USB_CAN_BE_HOST)    \r
43         if (mode == USB_MODE_Host && Mem_IsInitialized == false)\r
44         {\r
45         USB_Memory_Init(USBRAM_BUFFER_SIZE);\r
46                 Mem_IsInitialized = true;\r
47         }\r
48 #endif\r
49         USB_CurrentMode[corenum] = mode;\r
50         HAL_USBInit(corenum);\r
51         USB_ResetInterface(corenum, mode);\r
52         USB_IsInitialized = true;\r
53 }\r
54 \r
55 void USB_Disable(uint8_t corenum, uint8_t mode)\r
56 {\r
57         USB_IsInitialized = false;\r
58         if (mode == USB_MODE_Device) {\r
59                 #if defined(USB_CAN_BE_DEVICE)\r
60                 HAL_USBConnect(corenum, 0);\r
61                 HAL_USBDeInit(corenum, mode);\r
62                 #endif\r
63         }\r
64         if (mode == USB_MODE_Host) {\r
65                 #if defined(USB_CAN_BE_HOST)\r
66 \r
67                 #if defined(USB_MULTI_PORTS)\r
68                 uint8_t i;\r
69                 for (i = 0; i < MAX_USB_CORE; i++) {\r
70                         HcdDeInitDriver(i);\r
71                         HAL_USBDeInit(i, mode);\r
72                 }\r
73                 #else\r
74                 HcdDeInitDriver(corenum);\r
75                 HAL_USBDeInit(corenum, mode);\r
76                 #endif\r
77 \r
78                 #endif\r
79         }\r
80 }\r
81 \r
82 void USB_ResetInterface(uint8_t corenum, uint8_t mode)\r
83 {\r
84         if (mode == USB_MODE_Device) {\r
85                 #if defined(USB_CAN_BE_DEVICE)\r
86                 USB_Init_Device(corenum);\r
87                 #endif\r
88         }\r
89         else if (mode == USB_MODE_Host) {\r
90                 #if defined(USB_CAN_BE_HOST)\r
91                 USB_Init_Host(corenum);\r
92                 #endif\r
93         }\r
94 }\r
95 \r
96 #if defined(USB_CAN_BE_DEVICE)\r
97 static void USB_Init_Device(uint8_t corenum)\r
98 {\r
99         USB_DeviceState[corenum]          = DEVICE_STATE_Unattached;\r
100         USB_Device_ConfigurationNumber  = 0;\r
101 \r
102         #if !defined(NO_DEVICE_REMOTE_WAKEUP)\r
103         USB_Device_RemoteWakeupEnabled  = false;\r
104         #endif\r
105 \r
106         #if !defined(NO_DEVICE_SELF_POWER)\r
107         USB_Device_CurrentlySelfPowered = false;\r
108         #endif\r
109 \r
110         #if defined(USB_DEVICE_ROM_DRIVER)\r
111         UsbdRom_Init(corenum);\r
112         #else\r
113         Endpoint_ConfigureEndpoint(corenum, ENDPOINT_CONTROLEP, EP_TYPE_CONTROL,\r
114                                                            ENDPOINT_DIR_OUT, USB_Device_ControlEndpointSize,\r
115                                                            ENDPOINT_BANK_SINGLE);\r
116         #endif\r
117         HAL_EnableUSBInterrupt(corenum);\r
118         HAL_USBConnect(corenum, 1);\r
119 }\r
120 \r
121 #endif\r
122 \r
123 #if defined(USB_CAN_BE_HOST)\r
124 static void USB_Init_Host(uint8_t corenum)\r
125 {\r
126         // uint8_t i;\r
127 \r
128         // for(i=0;i<PIPE_TOTAL_PIPES;i++) PipeInfo[i].PipeHandle=0;\r
129 \r
130         pipeselected[corenum] = PIPE_CONTROLPIPE;\r
131 \r
132         USB_HostState[corenum]   = HOST_STATE_Unattached;\r
133         USB_Host_ControlPipeSize[corenum] = PIPE_CONTROLPIPE_DEFAULT_SIZE;\r
134 \r
135         if (HcdInitDriver(corenum) == HCD_STATUS_OK) {\r
136                 USB_IsInitialized = true;\r
137                 HAL_EnableUSBInterrupt(corenum);\r
138         }\r
139         else {\r
140                 USB_IsInitialized = false;\r
141                 HcdDeInitDriver(corenum);\r
142         }\r
143 \r
144 }\r
145 \r
146 #endif\r