/*
	Copyright 2003 Chris Cavey
	
	This file is part of XID.
	
	XID is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.
	
	XID 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.  See the
	GNU General Public License for more details.
	
	You should have received a copy of the GNU General Public License
	along with XID; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

#include "xidtypes.h"

BYTE XidHidReportDesc[] = 
{
    0x05, 0x01,                    	// 	USAGE_PAGE (Generic Desktop)
    0x09, 0x04,                    	// 	USAGE (Joystick)
    0xa1, 0x01,                    	//	COLLECTION (Application)
    0x09, 0x01,                    	// 		USAGE (Pointer)
    0xa1, 0x00,                    	//   	COLLECTION (Physical)
    0x09, 0x30,                    	//    		USAGE (X)
    0x09, 0x31,                    	//     		USAGE (Y)
    0x09, 0x33,                   	//     		USAGE (Rx)
    0x09, 0x34,                    	//     		USAGE (Ry)
    0x16, 0x00, 0x80,              	//     		LOGICAL_MINIMUM (-32768)
    0x26, 0xFF, 0x7F,              	//     		LOGICAL_MAXIMUM (32767)
    0x95, 0x04,                   	//     		REPORT_COUNT (4)
    0x75, 0x10,                    	//     		REPORT_SIZE (16)
    0x81, 0x02,                    	//     		INPUT (Data,Var,Abs)
    0xc0,                          	//     	END_COLLECTION
    
	0x15, 0x00,			           	//		LOGICAL_MINIMUM (0)
	0x26, 0xFF, 0x00,		        //	 	LOGICAL_MAXIMUM (255)
	0x95, 0x02,		                //   	REPORT_COUNT (2)
	0x75, 0x08,						//   	REPORT_SIZE (8)
	0x05, 0x01,						//   	USAGE_PAGE (Generic Desktop)
	0x09, 0x32,						//		USAGE (Z)
	0x09, 0x35,						//		USAGE (Rz)
	0x81, 0x02,						//		INPUT (Data,Var,Abs)

	0x05, 0x01,						//   	USAGE_PAGE (Generic Desktop)
	0x15, 0x00,			           	//		LOGICAL_MINIMUM (0)
	0x26, 0xFF, 0x00,		        //	 	LOGICAL_MAXIMUM (255)
	0x95, 0x02,		                //   	REPORT_COUNT (2)
	0x75, 0x08,						//   	REPORT_SIZE (8)
	0x09, 0x36,						//		USAGE (Slider)
	0x09, 0x37,						//		USAGE (Dial)
	0x81, 0x02,						//		INPUT (Data,Var,Abs)

	0x05, 0x01,                    	// 		USAGE_PAGE (Generic Desktop)
    0x09, 0x39,                    	// 		USAGE (Hat switch)
    0x15, 0x00,                    	// 		LOGICAL_MINIMUM (0)
    0x25, 0x07,                    	// 		LOGICAL_MAXIMUM (7)
    0x35, 0x00,                    	// 		PHYSICAL_MINIMUM (0)
    0x46, 0x3B, 0x01,              	// 		PHYSICAL_MAXIMUM (315)
    0x65, 0x14,                    	// 		UNIT (Eng Rot:Angular Pos)
    0x55, 0x00,                    	// 		UNIT_EXPONENT (0)
    0x75, 0x04,                    	// 		REPORT_SIZE (4)
    0x95, 0x01,                    	// 		REPORT_COUNT (1)
    0x81, 0x42,                     // 		INPUT (Data,Var,Abs,Null)
    
    0x95, 0x04,					   	//   	REPORT_COUNT (4)
    0x75, 0x01,                    	//   	REPORT_SIZE (1)
    0x81, 0x03,                    	//   	INPUT (Cnst,Var,Abs)

	0x05, 0x09,                    	//   	USAGE_PAGE (Button)
	0x09, 0x01,                    	//   	USAGE (Button 1)
	0x09, 0x02,                    	//   	USAGE (Button 2)
	0x09, 0x03,                    	//   	USAGE (Button 3)
	0x09, 0x04,                    	//   	USAGE (Button 4)
	0x09, 0x05,                    	//   	USAGE (Button 5)
	0x09, 0x06,                    	//   	USAGE (Button 6)
	0x09, 0x07,                    	//   	USAGE (Button 7)
	0x09, 0x08,                    	//   	USAGE (Button 8)
	0x09, 0x09,                    	//   	USAGE (Button 9)
	0x09, 0x0A,                    	//   	USAGE (Button 10)
	0x09, 0x0B,                    	//   	USAGE (Button 11)
	0x09, 0x0C,                    	//   	USAGE (Button 12)
	0x09, 0x0D,                    	//   	USAGE (Button 13)
	0x09, 0x0E,                    	//   	USAGE (Button 14)
	0x09, 0x0F,                    	//   	USAGE (Button 15)
	0x09, 0x10,                    	//   	USAGE (Button 16)
    0x15, 0x00,			           	//		LOGICAL_MINIMUM (0)
	0x26, 0xFF, 0x00,		        //	 	LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    	//   	REPORT_SIZE (8)
	0x95, 0x10,                    	//   	REPORT_COUNT (3)
    0x81, 0x02,                    	//   	INPUT (Data,Var,Abs)

  

									// ULTRA-JUICY SUPER CLEVER FEATURE REPORT

    0x06, 0x00, 0xff,               //		USAGE_PAGE (Vendor Defined Page 1)
    0x09, 0x01,                     //		USAGE (Vendor Usage 1)
    0x15, 0x00,                     //		LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,               //		LOGICAL_MAXIMUM (255)
    0x75, 0x08,                     //		REPORT_SIZE (8)
    0x95, 0x7F,                     //		REPORT_COUNT (127) + 1 gives a pretty 128 report size. I like powers of 2
    0xb1, 0x02,                     //		FEATURE (Data,Var,Abs)


									// OUTPUT REPORT FOR SOME RUMBLE ACTION

    0x05, 0x01,                    	// 		USAGE_PAGE (Generic Desktop)
    0xa1, 0x02,                    	// 		COLLECTION (Logical)
    0x15, 0x00,                    	//  		LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              	//   		LOGICAL_MAXIMUM (255)
    0x35, 0x00,                    	//   		PHYSICAL_MINIMUM (0)
    0x46, 0xff, 0x00,              	//   		PHYSICAL_MAXIMUM (255)
    0x95, 0x02,                    	//   		REPORT_COUNT (2)
    0x75, 0x08,                    	//   		REPORT_SIZE (8)
    0x06, 0x00, 0xff,             	//   		USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    	//   		USAGE (Vendor Usage 1)
    0x91, 0x42,                     //   		OUTPUT (Data,Var,Abs,Null)
    0xc0,                           // 		END_COLLECTION
    
    0xc0                           	// END_COLLECTION
};