uhciio.java

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

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

import org.jnode.system.IOResource;

/**
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class UHCIIO implements UHCIConstants {

	private final IOResource io;
	private final int base;
	
	/**
	 * Create a new instance
	 * @param io
	 */
	public UHCIIO(IOResource io) {
		this.io = io;
		this.base = io.getStartPort();
	}
	
	/**
	 * Release all resources
	 */
	public void release() {
		io.release();
	}
	
	/**
	 * Gets the command register
	 */
	protected final int getCommand() {
		return io.inPortWord(base + USBCMD);
	}
	
	/**
	 * Are the given bits in the command register set?
	 */
	protected final boolean getCommandBits(int mask) {
		return ((io.inPortWord(base + USBCMD) & mask) == mask);
	}
	
	/**
	 * Sets the command register
	 */
	protected final void setCommand(int command) {
		io.outPortWord(base + USBCMD, command);
	}
	
	/**
	 * Sets certain bits of the command register on/off
	 */
	protected final void setCommandBits(int mask, boolean on) {
		int cmd = io.inPortWord(base + USBCMD);
		if (on) {
			cmd |= mask;
		} else {
			cmd &= ~mask;
		}
		io.outPortWord(base + USBCMD, cmd);
	}
	
	/**
	 * Gets the status register
	 */
	protected final int getStatus() {
		return io.inPortWord(base + USBSTS);
	}
	
	/**
	 * Are the given bits in the status register set?
	 */
	protected final boolean getStatusBits(int mask) {
		return ((io.inPortWord(base + USBSTS) & mask) == mask);
	}
	
	/**
	 * Clear the status register
	 */
	protected final void clearStatus(int clearMask) {
		io.outPortWord(base + USBSTS, clearMask);
	}
	
	/**
	 * Gets the interrupt enable register
	 */
	protected final int getInterruptEnable() {
		return io.inPortWord(base + USBINTR);
	}
	
	/**
	 * Sets the interrupt enable register
	 */
	protected final void setInterruptEnable(int mask) {
		io.outPortWord(base + USBINTR, mask);
	}
	
	/**
	 * Gets the frame number register
	 */
	protected final int getFrameNumber() {
		return io.inPortWord(base + USBFRNUM);
	}
	
	/**
	 * Sets the frame number register
	 */
	protected final void setFrameNumber(int frnum) {
		io.outPortWord(base + USBFRNUM, frnum);
	}
	
	/**
	 * Gets the frame list base address register
	 */
	protected final int getFrameListBaseAddress() {
		return io.inPortDword(base + USBFLBASEADD);
	}
	
	/**
	 * Sets the frame list base address register
	 */
	protected final void setFrameListBaseAddress(int baseAddress) {
		io.outPortDword(base + USBFLBASEADD, baseAddress);
	}
	
	/**
	 * Gets the start of frame (SOF) modify register
	 */
	protected final int getStartOfFrame() {
		return io.inPortByte(base + USBSOF);
	}
	
	/**
	 * Sets the start of frame (SOF) modify register
	 */
	protected final void setStartOfFrame(int sof) {
		io.outPortByte(base + USBSOF, sof);
	}
	
	/**
	 * Gets the port status and control register
	 */
	protected final int getPortSC(int port) {
		return io.inPortWord(base + USBPORTSC1 + (port << 1));
	}
	
	/**
	 * Are the given bits in the port status and control register set?
	 */
	protected final boolean getPortSCBits(int port, int mask) {
		return ((io.inPortWord(base + USBPORTSC1 + (port << 1)) & mask) == mask);
	}
	
	/**
	 * Sets certain bits of the port1 status and control register on/off
	 */
	protected final void setPortSCBits(int port, int mask, boolean on) {
		int sc = io.inPortWord(base + USBPORTSC1 + (port << 1));
		sc &= 0xFFF5;
		if (on) {
			sc |= mask;
		} else {
			sc &= ~mask;
		}
		io.outPortWord(base + USBPORTSC1 + (port << 1), sc);
	}
	
	/**
	 * Sets all bits of the port1 status and control register 
	 */
	protected final void setPortSC(int port, int value) {
		io.outPortWord(base + USBPORTSC1 + (port << 1), value);
	}
}

⌨️ 快捷键说明

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