static int acm_send() { if(acm_file_recv_left > 0) { acm_busy = TRUE; return 1; } if(acm_file_send_left > 0) { acm_busy = TRUE; int amt = acm_file_send_left; if(amt > acm_usb_mps) amt = acm_usb_mps; memcpy(acm_send_buffer, acm_file_ptr, amt); acm_file_ptr += amt; acm_file_send_left -= amt; usb_send_bulk(ACM_EP_SEND, acm_send_buffer, amt); if(acm_file_send_left == 0) bufferPrintf("ACM: Sent file (finished at 0x%08x)!\n", acm_file_ptr); return 1; } if(getScrollbackLen() > 0) { acm_busy = TRUE; int amt = getScrollbackLen(); if(amt > acm_usb_mps) amt = acm_usb_mps; bufferFlush(acm_send_buffer, amt); usb_send_bulk(ACM_EP_SEND, acm_send_buffer, amt); return 1; } acm_busy = FALSE; return 0; }
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 setReady(int _r) { if(ready == _r) return; else { if(usb_state() >= USBConfigured && (_r == 0 || getScrollbackLen() == 0)) { OpenIBootCmd *cmd = (OpenIBootCmd*)controlSendBuffer; if(_r) cmd->command = OPENIBOOTCMD_READY; else cmd->command = OPENIBOOTCMD_NOTREADY; cmd->dataLen = 0; usb_send_interrupt(3, controlSendBuffer, sizeof(OpenIBootCmd)); } ready = _r; } }