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 + -
显示快捷键?