]> git.sur5r.net Git - freertos/blob
ba596d3e286cec2e6993f02ce1ac0995f31bd0db
[freertos] /
1 /*\r
2  * @brief USB ROM based core driver functions\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 #include "../../USBMode.h"\r
34 \r
35 #if defined(USB_CAN_BE_DEVICE)\r
36 #include "../../Device.h"\r
37 #include "../../Endpoint.h"\r
38 \r
39 #if defined(USB_DEVICE_ROM_DRIVER)\r
40 USBD_HANDLE_T UsbHandle;\r
41 /* FIXME Abstract & make this size configurable */\r
42 //#define ROMDRIVER_MEM_SIZE    0x1000\r
43 //uint8_t usb_RomDriver_buffer[ROMDRIVER_MEM_SIZE] ATTR_ALIGNED(2048) __BSS(USBRAM_SECTION);\r
44 \r
45 ErrorCode_t UsbdRom_Event_Stub (USBD_HANDLE_T hUsb);\r
46 PRAGMA_WEAK(USB_Interface_Event,UsbdRom_Event_Stub)\r
47 ErrorCode_t USB_Interface_Event (USBD_HANDLE_T hUsb) ATTR_WEAK ATTR_ALIAS(UsbdRom_Event_Stub);\r
48 PRAGMA_WEAK(USB_Configure_Event,USB_Configure_Event_Stub)\r
49 ErrorCode_t USB_Configure_Event (USBD_HANDLE_T hUsb) ATTR_WEAK ATTR_ALIAS(USB_Configure_Event_Stub);\r
50 ErrorCode_t USB_Configure_Event_Stub (USBD_HANDLE_T hUsb)\r
51 {\r
52         USB_CORE_CTRL_T* pCtrl = (USB_CORE_CTRL_T*)hUsb;\r
53         uint8_t epnum = CALLBACK_UsbdRom_Register_ConfigureEndpoint();\r
54 \r
55         if((pCtrl->config_value)&&(epnum!=0))\r
56         {\r
57                 USBD_API->hw->WriteEP(hUsb, (epnum + 0x80), usb_RomDriver_buffer, 1);//TODO: what is this for?\r
58         }\r
59         return LPC_OK;\r
60 }\r
61 void UsbdRom_Init(uint8_t corenum)\r
62 {\r
63         ErrorCode_t ret;\r
64 \r
65         USBD_API_INIT_PARAM_T usb_param =\r
66         {\r
67                         .usb_reg_base = ROMDRIVER_USB0_BASE,\r
68                         .max_num_ep = ENDPOINT_TOTAL_ENDPOINTS(corenum),\r
69                         .mem_base = (uint32_t) usb_RomDriver_buffer,\r
70                         .mem_size = ROMDRIVER_MEM_SIZE,\r
71                         .USB_Configure_Event = USB_Configure_Event\r
72         };\r
73         USB_CORE_DESCS_T DeviceDes = {NULL};\r
74 \r
75         if(corenum)\r
76                 usb_param.usb_reg_base = ROMDRIVER_USB1_BASE;\r
77 \r
78         /* add custom Interface Event */\r
79         if(USB_Interface_Event != UsbdRom_Event_Stub)\r
80         {\r
81                 usb_param.USB_Interface_Event = USB_Interface_Event;\r
82         }\r
83         DeviceDes.device_desc = (uint8_t*)CALLBACK_UsbdRom_Register_DeviceDescriptor();\r
84         DeviceDes.high_speed_desc = (uint8_t*)CALLBACK_UsbdRom_Register_ConfigurationDescriptor();\r
85         DeviceDes.full_speed_desc = (uint8_t*)CALLBACK_UsbdRom_Register_ConfigurationDescriptor();\r
86         DeviceDes.string_desc = (uint8_t*)CALLBACK_UsbdRom_Register_StringDescriptor();\r
87         DeviceDes.device_qualifier = (uint8_t*)CALLBACK_UsbdRom_Register_DeviceQualifierDescriptor();\r
88 \r
89         ret = USBD_API->hw->Init(&UsbHandle, &DeviceDes, &usb_param);\r
90 \r
91         // trap failed initialization\r
92         while(ret != LPC_OK);\r
93 }\r
94 \r
95 void UsbdRom_IrqHandler(void)\r
96 {\r
97         USBD_API->hw->ISR(UsbHandle);\r
98 }\r
99 \r
100 ErrorCode_t UsbdRom_Event_Stub (USBD_HANDLE_T hUsb)\r
101 {\r
102         return LPC_OK;\r
103 }\r
104 #endif /* USB_DEVICE_ROM_DRIVER */\r
105 \r
106 #endif /* USB_CAN_BE_DEVICE */\r