void output_capabilities(const struct Capabilities *cap)
{
	char line[1024];
	int i;
	memset(line, 0, sizeof(line));
	ADDCAP(line, cap, left);
	ADDCAP(line, cap, middle);
	ADDCAP(line, cap, right);
	ADDCAP(line, cap, mtdata);
	ADDCAP(line, cap, ibt);
	xf86Msg(X_INFO, "mtrack: devname: %s\n", cap->devname);
	xf86Msg(X_INFO, "mtrack: devid: %x %x %x\n",
		cap->devid.vendor, cap->devid.product, cap->devid.version);
	xf86Msg(X_INFO, "mtrack: caps:%s\n", line);
	for (i = 0; i < MT_ABS_SIZE; i++) {
		if (cap->has_abs[i])
			xf86Msg(X_INFO, "mtrack: %d: min: %d max: %d\n",
				i,
				cap->abs[i].minimum,
				cap->abs[i].maximum);
	}
}
void output_capabilities(const struct Capabilities *cap)
{
	char line[1024];
	int i;

	LOG_INFO("Capabilities: \n");
	LOG_INFO_CONT("devname: %s\n", cap->devname);
	LOG_INFO_CONT("devid: %x %x %x\n", cap->devid.vendor, cap->devid.product, cap->devid.version);

	char cap_names[MT_ABS_SIZE][24] = {
		"ABS_MT_TOUCH_MAJOR", "ABS_MT_TOUCH_MINOR",
		"ABS_MT_WIDTH_MAJOR",	"ABS_MT_WIDTH_MINOR",
		"ABS_MT_ORIENTATION",
		"ABS_MT_POSITION_X", "ABS_MT_POSITION_Y",
		"ABS_MT_TOOL_TYPE",
		"ABS_MT_BLOB_ID",
		"ABS_MT_TRACKING_ID",
		"ABS_MT_PRESSURE"
	};
	for (i = 0; i < MT_ABS_SIZE; i++) {
		if (cap->has_abs[i])
			LOG_INFO_CONT("%s: min: %d max: %d\n",
				cap_names[i],
				cap->abs[i].minimum,
				cap->abs[i].maximum);
	}
	if(cap->has_slot)
		LOG_INFO_CONT("ABS_MT_SLOT: min: %d max: %d\n", cap->slot.minimum, cap->slot.maximum);

	memset(line, 0, sizeof(line));
	ADDCAP(line, cap, left);
	ADDCAP(line, cap, middle);
	ADDCAP(line, cap, right);
	ADDCAP(line, cap, mtdata);
	ADDCAP(line, cap, ibt);
	ADDCAP(line, cap, slot);
	LOG_INFO_CONT("enabled caps:%s\n", line);
}