usbmousedriver.java

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

JAVA
113
字号
/*
 * $Id: USBMouseDriver.java,v 1.1 2003/11/25 11:51:35 epr Exp $
 */
package org.jnode.driver.usb.input;

import org.apache.log4j.Logger;
import org.jnode.driver.Driver;
import org.jnode.driver.DriverException;
import org.jnode.driver.input.PointerAPI;
import org.jnode.driver.input.PointerAPIAdapter;
import org.jnode.driver.input.PointerEvent;
import org.jnode.driver.usb.USBRequest;
import org.jnode.driver.usb.USBConfiguration;
import org.jnode.driver.usb.USBConstants;
import org.jnode.driver.usb.USBDataPipe;
import org.jnode.driver.usb.USBDevice;
import org.jnode.driver.usb.USBEndPoint;
import org.jnode.driver.usb.USBException;
import org.jnode.driver.usb.USBPacket;
import org.jnode.driver.usb.USBPipeListener;

/**
 * @author Ewout Prangsma (epr@users.sourceforge.net)
 */
public class USBMouseDriver extends Driver implements USBPipeListener, USBConstants {

	/** My logger */
	private final Logger log = Logger.getLogger(getClass());
	/** The endpoint we're communicating with */
	private USBEndPoint ep;
	/** The interrupt pipe */
	private USBDataPipe intPipe;
	/** The request data packet */
	private USBPacket intData;
	/** The pointer API implementation */
	private final PointerAPIAdapter apiAdapter = new PointerAPIAdapter();

	/**
	 * @see org.jnode.driver.Driver#startDevice()
	 */
	protected void startDevice() throws DriverException {
		try {
			final USBDevice dev = (USBDevice) getDevice();

			// Get active configuration
			final USBConfiguration conf = dev.getConfiguration();

			// Get the HID endpoint
			this.ep = conf.getInterface(0).getEndPoint(0);

			// Create the interrupt request
			intPipe = (USBDataPipe) ep.getPipe();
			intPipe.addListener(this);
			intPipe.open();
			intData = new USBPacket(ep.getDescriptor().getMaxPacketSize());
			final USBRequest req = intPipe.createRequest(intData);
			intPipe.asyncSubmit(req);

			// Register the PointerAPI
			dev.registerAPI(PointerAPI.class, apiAdapter);
		} catch (USBException ex) {
			throw new DriverException(ex);
		}
	}

	/**
	 * @see org.jnode.driver.Driver#stopDevice()
	 */
	protected void stopDevice() throws DriverException {
		// Unregister API
		getDevice().unregisterAPI(PointerAPI.class);
		apiAdapter.clear();
		// Close the pipe
		if (intPipe != null) {
			intPipe.close();
			intPipe.removeListener(this);
		}
		intData = null;
		ep = null;
	}

	/**
	 * @see org.jnode.driver.usb.USBPipeListener#requestCompleted(org.jnode.driver.usb.USBRequest)
	 */
	public void requestCompleted(USBRequest request) {
		//log.debug("Completed");
		final byte[] data = intData.getData();
		int buttons = 0;
		final int v0 = data[0];
		if ((v0 & 0x01) != 0) {
			buttons |= PointerEvent.BUTTON_LEFT;
		}
		if ((v0 & 0x02) != 0) {
			buttons |= PointerEvent.BUTTON_RIGHT;
		}
		if ((v0 & 0x04) != 0) {
			buttons |= PointerEvent.BUTTON_MIDDLE;
		}

		final PointerEvent event = new PointerEvent(buttons, data[1], data[2], data[3], PointerEvent.RELATIVE);
		apiAdapter.fireEvent(event);
	}

	/**
	 * @see org.jnode.driver.usb.USBPipeListener#requestFailed(org.jnode.driver.usb.USBRequest)
	 */
	public void requestFailed(USBRequest request) {
		log.debug("Mouse interrupt error status:" + request.getStatus());
		intPipe.close();
	}

}

⌨️ 快捷键说明

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