abstracthostcontrollerdriver.java

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

JAVA
83
字号
/*
 * $Id: AbstractHostControllerDriver.java,v 1.1 2003/11/25 11:41:20 epr Exp $
 */
package org.jnode.driver.usb;

import javax.naming.NameNotFoundException;

import org.apache.log4j.Logger;
import org.jnode.driver.Device;
import org.jnode.driver.DeviceAlreadyRegisteredException;
import org.jnode.driver.DeviceManager;
import org.jnode.driver.Driver;
import org.jnode.driver.DriverException;
import org.jnode.naming.InitialNaming;

/**
 * Abstract Host Controller driver.
 * 
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public abstract class AbstractHostControllerDriver extends Driver {

	/** My logger */
	private final Logger log = Logger.getLogger(getClass());
	/** The root hub monitor */
	private USBHubMonitor rootHubMonitor;

	/**
	 * @see org.jnode.driver.Driver#startDevice()
	 */
	protected final void startDevice() throws DriverException {
		final Device device = getDevice();
		final DeviceManager dm;
		try {
			dm = (DeviceManager) InitialNaming.lookup(DeviceManager.NAME);
			dm.rename(device, getDevicePrefix(), true);
		} catch (DeviceAlreadyRegisteredException ex) {
			log.error("Cannot rename device", ex);
			throw new DriverException("Cannot rename device", ex);
		} catch (NameNotFoundException ex) {
			throw new DriverException("Cannot find DeviceManager", ex);
		}
		claimResources();
		device.registerAPI(USBHostControllerAPI.class, getAPIImplementation());
		// Create & start a monitor
		final USBHubAPI hubApi = getAPIImplementation().getRootHUB();
		this.rootHubMonitor = new USBHubMonitor(device, hubApi);
		rootHubMonitor.startMonitor();
	}

	/**
	 * @see org.jnode.driver.Driver#stopDevice()
	 */
	protected final void stopDevice() throws DriverException {
		if (this.rootHubMonitor != null) {
			rootHubMonitor.stopMonitor();
			this.rootHubMonitor = null;
		}
		getDevice().unregisterAPI(USBHostControllerAPI.class);
		releaseResources();
	}

	/**
	 * Gets the prefix for the device name
	 */
	protected abstract String getDevicePrefix();

	/**
	 * Claim all resources required to start the device
	 */
	protected abstract void claimResources() throws DriverException;

	/**
	 * Release all claimed resources
	 */
	protected abstract void releaseResources();

	/**
	 * Gets the API implementation.
	 */
	protected abstract USBHostControllerAPI getAPIImplementation();
}

⌨️ 快捷键说明

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