static void startHandler() { if(usb_get_speed() == USBHighSpeed) { USB_BYTES_AT_A_TIME = 512; } else { USB_BYTES_AT_A_TIME = 0x80; } usb_receive_interrupt(4, controlRecvBuffer, sizeof(OpenIBootCmd)); }
static void controlReceived(uint32_t token) { OpenIBootCmd* cmd = (OpenIBootCmd*)controlRecvBuffer; OpenIBootCmd* reply = (OpenIBootCmd*)controlSendBuffer; if(cmd->command == OPENIBOOTCMD_DUMPBUFFER) { int length; if(sendFileBytesLeft > 0) { length = sendFileBytesLeft; } else { length = getScrollbackLen(); // getScrollbackLen();// USB_BYTES_AT_A_TIME; } reply->command = OPENIBOOTCMD_DUMPBUFFER_LEN; reply->dataLen = length; usb_send_interrupt(3, controlSendBuffer, sizeof(OpenIBootCmd)); //uartPrintf("got dumpbuffer cmd, returning length: %d\r\n", length); } else if(cmd->command == OPENIBOOTCMD_DUMPBUFFER_GOAHEAD) { left = cmd->dataLen; //uartPrintf("got dumpbuffer goahead, writing length: %d\r\n", (int)left); size_t toRead = (left > USB_BYTES_AT_A_TIME) ? USB_BYTES_AT_A_TIME: left; if(sendFileBytesLeft > 0) { usb_send_bulk(1, sendFilePtr, toRead); sendFilePtr += toRead; sendFileBytesLeft -= toRead; if(sendFileBytesLeft == 0) { bufferPrintf("file sent.\r\n"); } } else { bufferFlush((char*) dataSendBuffer, toRead); usb_send_bulk(1, dataSendBuffer, toRead); } left -= toRead; } else if(cmd->command == OPENIBOOTCMD_SENDCOMMAND) { dataRecvPtr = dataRecvBuffer; rxLeft = cmd->dataLen; lastRxLen = rxLeft; //uartPrintf("got sendcommand, receiving length: %d\r\n", (int)rxLeft); reply->command = OPENIBOOTCMD_SENDCOMMAND_GOAHEAD; reply->dataLen = cmd->dataLen; usb_send_interrupt(3, controlSendBuffer, sizeof(OpenIBootCmd)); size_t toRead = (rxLeft > USB_BYTES_AT_A_TIME) ? USB_BYTES_AT_A_TIME: rxLeft; usb_receive_bulk(2, dataRecvPtr, toRead); rxLeft -= toRead; dataRecvPtr += toRead; } usb_receive_interrupt(4, controlRecvBuffer, sizeof(OpenIBootCmd)); }
static void startHandler() { if(usb_get_speed() == USBHighSpeed) { USB_BYTES_AT_A_TIME = 512; } else { USB_BYTES_AT_A_TIME = 0x80; } usb_setup_endpoint(1, USBIn, USBBulk, getPacketSizeFromSpeed(), 0); usb_setup_endpoint(2, USBOut, USBBulk, getPacketSizeFromSpeed(), 0); usb_setup_endpoint(3, USBIn, USBInterrupt, USB_MAX_PACKETSIZE, 0); usb_setup_endpoint(4, USBOut, USBInterrupt, USB_MAX_PACKETSIZE, 0); usb_receive_interrupt(4, controlRecvBuffer, sizeof(OpenIBootCmd), controlReceived); }