uhcidatarequest.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 66 行

JAVA
66
字号
/*
 * $Id: UHCIDataRequest.java,v 1.1 2003/11/25 11:42:17 epr Exp $
 */
package org.jnode.driver.usb.uhci;

import org.jnode.driver.usb.USBConstants;
import org.jnode.driver.usb.USBEndPoint;
import org.jnode.driver.usb.USBPacket;
import org.jnode.driver.usb.spi.AbstractUSBDataRequest;

/**
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class UHCIDataRequest extends AbstractUSBDataRequest implements UHCIRequest, USBConstants {

	/** The first TD of this request */
	private TransferDescriptor firstTD;

	/**
	 * Initialize this instance.
	 * 
	 * @param dataPacket
	 */
	public UHCIDataRequest(USBPacket dataPacket) {
		super(dataPacket);
	}
	
	public void createTDs(UHCIPipe pipe) {
		final USBPacket dataPacket = getDataPacket();
		int offset = 0;
		int length = dataPacket.getSize();
		final USBEndPoint ep = pipe.getEndPoint();
		final int dataPid = (ep.getDescriptor().isDirIn() ? USB_PID_IN : USB_PID_OUT);
		final int maxPacketSize = pipe.getMaxPacketSize();
		TransferDescriptor firstTD = null;

		while (length > 0) {

			// Create the TD for this part of the data packet
			final int curlen = Math.min(length, maxPacketSize);
			final TransferDescriptor dataTD;
			final boolean ioc = (curlen == length);
			dataTD = pipe.createTD(dataPid, ep.getDataToggle(), dataPacket.getData(), offset, curlen, ioc);
			// Add the TD to the list
			if (firstTD == null) {
				firstTD = dataTD;
			} else {
				firstTD.append(dataTD, false);
			}

			// Update fields
			ep.toggle();
			length -= curlen;
			offset += curlen;
		}
		this.firstTD = firstTD;
	}

	/**
	 * @see org.jnode.driver.usb.uhci.UHCIRequest#getFirstTD()
	 */
	public final TransferDescriptor getFirstTD() {
		return firstTD;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?