32 #define __INCLUDE_FROM_USB_DRIVER
33 #include "../../../USBMode.h"
35 #if (defined(__LPC11UXX__) || defined(__LPC13UXX__)) && defined(USB_CAN_BE_DEVICE)
36 #include "../../../Endpoint.h"
38 #if defined(USB_DEVICE_ROM_DRIVER)
41 uint8_t usb_RomDriver_buffer[ROMDRIVER_MEM_SIZE]
ATTR_ALIGNED(256);
43 uint8_t usb_RomDriver_MSC_buffer[ROMDRIVER_MSC_MEM_SIZE]
ATTR_ALIGNED(4);
45 uint8_t usb_RomDriver_CDC_buffer[ROMDRIVER_CDC_MEM_SIZE]
ATTR_ALIGNED(4);
48 uint8_t UsbdCdc_EPIN_buffer[CDC_MAX_BULK_EP_SIZE]
ATTR_ALIGNED(4);
51 uint8_t UsbdCdc_EPOUT_buffer[CDC_MAX_BULK_EP_SIZE]
ATTR_ALIGNED(4);
53 uint8_t usb_RomDriver_HID_buffer[ROMDRIVER_HID_MEM_SIZE]
ATTR_ALIGNED(4);
55 void USB_IRQHandler(
void)
62 #define IsOutEndpoint(PhysicalEP) (!((PhysicalEP) & 1) )
66 static uint8_t SetupPackage[8] __DATA(
USBRAM_SECTION) ATTR_ALIGNED(64);
68 uint32_t Remain_length[ENDPOINT_DETAILS_MAXEP];
69 bool shortpacket, epout_primed;
70 uint16_t stream_total_packets;
75 LPC_USB->EPSKIP = 0xFFFFFFFF;
76 LPC_USB->EPBUFCFG = 0;
80 LPC_USB->INTSTAT = 0xC00003FF;
94 shortpacket = epout_primed =
false;
98 bool Endpoint_ConfigureEndpointControl(
const uint16_t
Size)
113 LPC_USB->INTSTAT &= ~3;
116 EndpointMaxPacketSize[0] = EndpointMaxPacketSize[1] =
Size;
122 const uint8_t
Direction,
const uint16_t
Size,
const uint8_t Banks)
129 LPC_USB->INTSTAT &= ~(1 << PhyEP);
130 LPC_USB->INTEN |= (1 << PhyEP);
132 EndpointMaxPacketSize[PhyEP] =
Size;
139 uint16_t totalpackets, uint16_t dummypackets)
145 for (i = 0; i < totalpackets; i++) {
150 for (i = 0; i < dummypackets; i++) {
157 stream_total_packets = totalpackets + dummypackets;
158 for (i = 0; i < totalpackets; i++) {
159 DcdDataTransfer(PhyEP, (uint8_t *) (buffer + i * packetsize), packetsize);
163 for (i = 0; i < dummypackets; i++) {
168 stream_total_packets = 0;
175 if (length >= EndpointMaxPacketSize[EPNum]) {
176 if ((length == EndpointMaxPacketSize[EPNum]) && (EPNum == 1)) {
179 Remain_length[EPNum / 2] = length - EndpointMaxPacketSize[EPNum];
180 length = EndpointMaxPacketSize[EPNum];
183 Remain_length[EPNum / 2] = 0;
194 memcpy(pData, SetupPackage, 8);
200 void USB_IRQHandler(
void)
202 uint32_t IntStat = LPC_USB->INTSTAT & LPC_USB->INTEN;
208 LPC_USB->INTSTAT = IntStat;
215 uint32_t DevCmdStat = LPC_USB->DEVCMDSTAT;
238 if (IntStat & 0x3FF) {
241 if ( IntStat & (1 << PhyEP) ) {
242 if ( IsOutEndpoint(PhyEP) ) {
248 else if (stream_total_packets == 0) {
251 if ((PhyEP == 0) || (stream_total_packets == 0)) {
257 epout_primed =
false;
269 if (Remain_length[PhyEP / 2] > 0) {
272 for (i = 0; i < Remain_length[PhyEP / 2]; i++)
277 for (i = 0; i < Remain_length[PhyEP / 2]; i++)
296 #endif // defined(USB_DEVICE_ROM_DRIVER)