rem: case USAGE_PAGE_BUTTONS:
add: case USAGE_PAGE_BUTTON:
context: count_controls(report_insn *insns, size_t num_insns,	int *num_axes, int *num_hats, int *num_buttons){		unsigned int insn_idx;	int hats = 0, buttons = 0,		axes = 2;		/* X and Y axes are reserved */	if (insns == NULL || num_insns <= 0)		return FAILURE;	for (insn_idx = 0; insn_idx < num_insns; insn_idx++) {		report_insn *insn = &insns [insn_idx];		insn->ctrl_type = TYPE_NONE;		switch (insn->usage_page) {		case USAGE_PAGE_GENERIC_DESKTOP:			switch (insn->usage_id) {			case USAGE_ID_X:				insn->ctrl_type = TYPE_AXIS_X;				break;			case USAGE_ID_Y:				insn->ctrl_type = TYPE_AXIS_Y;				break;			case USAGE_ID_Z:			case USAGE_ID_RX:			case USAGE_ID_RY:			case USAGE_ID_RZ:			case USAGE_ID_SLIDER:			case USAGE_ID_DIAL:			case USAGE_ID_WHEEL:				axes++;				insn->ctrl_type = TYPE_AXIS;				break;			case USAGE_ID_HAT_SWITCH:				hats++;				insn->ctrl_type = TYPE_HAT;				break;			}			break;		case USAGE_PAGE_SIMULATION:			switch (insn->usage_id) {			case USAGE_ID_RUDDER:			case USAGE_ID_THROTTLE:				axes++;				insn->ctrl_type = TYPE_AXIS;				break;			}			break;		case USAGE_PAGE_BUTTONS:			if (insn->num_bits == 1) {				buttons++;				insn->ctrl_type = TYPE_BUTTON;			}			break;		}	}	if (num_axes != NULL)		*num_axes = axes;	if (num_hats != NULL)		*num_hats = hats;	if (num_buttons != NULL)		*num_buttons = buttons;	return SUCCESS;}