/*
 * Copyright (C) 2010 - 2015 UNISYS CORPORATION
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
 * NON INFRINGEMENT.  See the GNU General Public License for more
 * details.
 */

#ifndef __SPAR_ULTRAINPUTREPORT_H__
#define __SPAR_ULTRAINPUTREPORT_H__

#include <linux/types.h>

/* These defines identify mouse and keyboard activity which is specified by the
 * firmware to the host using the cmsimpleinput protocol.  @ingroup coretypes
 */
	/* only motion; arg1=x, arg2=y */
#define INPUTACTION_XY_MOTION 1
/* arg1: 1=left,2=center,3=right */
#define INPUTACTION_MOUSE_BUTTON_DOWN 2
/* arg1: 1=left,2=center,3=right */
#define INPUTACTION_MOUSE_BUTTON_UP 3
/* arg1: 1=left,2=center,3=right */
#define INPUTACTION_MOUSE_BUTTON_CLICK 4
/* arg1: 1=left,2=center 3=right */
#define INPUTACTION_MOUSE_BUTTON_DCLICK 5
/* arg1: wheel rotation away from user */
#define INPUTACTION_WHEEL_ROTATE_AWAY 6
/* arg1: wheel rotation toward user */
#define INPUTACTION_WHEEL_ROTATE_TOWARD 7
/* arg1: scancode, as follows: If arg1 <= 0xff, it's a 1-byte scancode and arg1
 *	 is that scancode. If arg1 > 0xff, it's a 2-byte scanecode, with the 1st
 *	 byte in the low 8 bits, and the 2nd byte in the high 8 bits.
 *	 E.g., the right ALT key would appear as x'38e0'.
 */
#define INPUTACTION_KEY_DOWN 64
/* arg1: scancode (in same format as inputaction_keyDown) */
#define INPUTACTION_KEY_UP 65
/* arg1: scancode (in same format as inputaction_keyDown); MUST refer to one of
 *	 the locking keys, like capslock, numlock, or scrolllock.
 * arg2: 1 iff locking key should be in the LOCKED position (e.g., light is ON)
 */
#define INPUTACTION_SET_LOCKING_KEY_STATE 66
/* arg1: scancode (in same format as inputaction_keyDown */
#define INPUTACTION_KEY_DOWN_UP 67

struct visor_inputactivity {
	u16 action;
	u16 arg1;
	u16 arg2;
	u16 arg3;
} __packed;

struct visor_inputreport {
	u64 seq_no;
	struct visor_inputactivity activity;
} __packed;

#endif
