32 #define __INCLUDE_FROM_USB_DRIVER
33 #include "../../USBMode.h"
35 #if (defined(__LPC11U1X__) || defined(__LPC11U2X_3X__) || defined(__LPC1347__)) && 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);
57 #define IsOutEndpoint(PhysicalEP) (!((PhysicalEP) & 1) )
61 static uint8_t SetupPackage[8] __BSS(
USBRAM_SECTION) ATTR_ALIGNED(64);
63 uint32_t Remain_length[ENDPOINT_DETAILS_MAXEP];
64 bool shortpacket, epout_primed;
65 uint16_t stream_total_packets;
89 shortpacket = epout_primed =
false;
93 bool Endpoint_ConfigureEndpointControl(
const uint16_t
Size)
111 EndpointMaxPacketSize[0] = EndpointMaxPacketSize[1] =
Size;
117 const uint8_t
Direction,
const uint16_t
Size,
const uint8_t Banks)
124 LPC_USB->INTSTAT &= ~(1 << PhyEP);
125 LPC_USB->INTEN |= (1 << PhyEP);
127 EndpointMaxPacketSize[PhyEP] =
Size;
134 uint16_t totalpackets, uint16_t dummypackets)
140 for (i = 0; i < totalpackets; i++) {
145 for (i = 0; i < dummypackets; i++) {
152 stream_total_packets = totalpackets + dummypackets;
153 for (i = 0; i < totalpackets; i++) {
154 DcdDataTransfer(PhyEP, (uint8_t *) (buffer + i * packetsize), packetsize);
158 for (i = 0; i < dummypackets; i++) {
163 stream_total_packets = 0;
170 if (length >= EndpointMaxPacketSize[EPNum]) {
171 if ((length == EndpointMaxPacketSize[EPNum]) && (EPNum == 1)) {
174 Remain_length[EPNum / 2] = length - EndpointMaxPacketSize[EPNum];
175 length = EndpointMaxPacketSize[EPNum];
178 Remain_length[EPNum / 2] = 0;
189 memcpy(pData, SetupPackage, 8);
195 void USB_IRQHandler(
void)
198 #if defined(USB_DEVICE_ROM_DRIVER)
240 if (IntStat & 0x3FF) {
243 if ( IntStat & (1 << PhyEP) ) {
244 if ( IsOutEndpoint(PhyEP) ) {
250 else if (stream_total_packets == 0) {
253 if ((PhyEP == 0) || (stream_total_packets == 0)) {
259 epout_primed =
false;
271 if (Remain_length[PhyEP / 2] > 0) {
274 for (i = 0; i < Remain_length[PhyEP / 2]; i++)
279 for (i = 0; i < Remain_length[PhyEP / 2]; i++)