log.debug("PointerId == " + id);
log.debug("PointerId 0x" + NumberUtils.hex(id, 2));
	public boolean probe(AbstractPointerDriver d) {		try {			// reset the mouse			if (!d.initPointer()) {				log.debug("Reset mouse failed");				return false;			}			int id = d.getPointerId();			if (id != 0) {				// does not seem to be a mouse, more likely a tablet of touch screen				log.debug("PointerId == " + id);				return false;			}			//int protocolBytes = 3; // standard: 3 byte protocol			// try to make this a 3 button + wheel			boolean result = d.setRate(200);			result &= d.setRate(100);			result &= d.setRate(80);			// a "normal" mouse doesn't recognize this sequence as special			// but a mouse with a wheel will change its mouse ID			id = d.getPointerId();			// select protocol			for (Iterator i = protocolsHandlers.iterator(); i.hasNext();) {				final MouseProtocolHandler p = (MouseProtocolHandler) i.next();				if (p.supportsId(id)) {					this.protocol = p;					break;				}			}			if (protocol == null) {				log.error("No mouse driver found for PointerID " + id);				return false;			}			this.data = new byte[protocol.getPacketSize()];			return result;		} catch (DriverException ex) {			log.error("Error probing for mouse", ex);			return false;		} catch (DeviceException ex) {			log.error("Error probing for mouse", ex);			return false;		}	}