Ejemplo n.º 1
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));
}
Ejemplo n.º 2
0
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;
	}
}