1*53ee8cc1Swenshuai.xi //<MStar Software> 2*53ee8cc1Swenshuai.xi //****************************************************************************** 3*53ee8cc1Swenshuai.xi // MStar Software 4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved. 5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are 6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by 7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties. 8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all 9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written 10*53ee8cc1Swenshuai.xi // permission has been granted by MStar. 11*53ee8cc1Swenshuai.xi // 12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you 13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to 14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations: 15*53ee8cc1Swenshuai.xi // 16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar 17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof. 18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any 19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms. 20*53ee8cc1Swenshuai.xi // 21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be 22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar 23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties. 24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately 25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of 26*53ee8cc1Swenshuai.xi // such third party`s software. 27*53ee8cc1Swenshuai.xi // 28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as 29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s 30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any 31*53ee8cc1Swenshuai.xi // third party. 32*53ee8cc1Swenshuai.xi // 33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any 34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including 35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of 36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free 37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any 38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may 39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software. 40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or 41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or 42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use. 43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected 44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your 45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both 46*53ee8cc1Swenshuai.xi // parties in writing. 47*53ee8cc1Swenshuai.xi // 48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or 49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of 50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product 51*53ee8cc1Swenshuai.xi // ("Services"). 52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in 53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty 54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply. 55*53ee8cc1Swenshuai.xi // 56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels 57*53ee8cc1Swenshuai.xi // or otherwise: 58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service 59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification; 60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person, 61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance 62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or 63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right. 64*53ee8cc1Swenshuai.xi // 65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws 66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules. 67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally 68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association, 69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration 70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance 71*53ee8cc1Swenshuai.xi // with the said Rules. 72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall 73*53ee8cc1Swenshuai.xi // be English. 74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties. 75*53ee8cc1Swenshuai.xi // 76*53ee8cc1Swenshuai.xi //****************************************************************************** 77*53ee8cc1Swenshuai.xi //<MStar Software> 78*53ee8cc1Swenshuai.xi typedef U8 __u8; // 1 byte 79*53ee8cc1Swenshuai.xi typedef S8 __s8; // 1 byte 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi /// data type unsigned short, data length 2 byte 82*53ee8cc1Swenshuai.xi typedef U16 __u16; // 2 bytes 83*53ee8cc1Swenshuai.xi typedef S16 __s16; // 2 bytes 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi /// data type unsigned int, data length 4 byte 86*53ee8cc1Swenshuai.xi typedef U32 __u32; // 4 bytes 87*53ee8cc1Swenshuai.xi typedef S32 __s32; // 4 bytes 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi /// data type signed char, data length 1 byte 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi /* 93*53ee8cc1Swenshuai.xi * HID report item format 94*53ee8cc1Swenshuai.xi */ 95*53ee8cc1Swenshuai.xi 96*53ee8cc1Swenshuai.xi #define HID_ITEM_FORMAT_SHORT 0 97*53ee8cc1Swenshuai.xi #define HID_ITEM_FORMAT_LONG 1 98*53ee8cc1Swenshuai.xi 99*53ee8cc1Swenshuai.xi /* 100*53ee8cc1Swenshuai.xi * Special tag indicating long items 101*53ee8cc1Swenshuai.xi */ 102*53ee8cc1Swenshuai.xi 103*53ee8cc1Swenshuai.xi #define HID_ITEM_TAG_LONG 15 104*53ee8cc1Swenshuai.xi 105*53ee8cc1Swenshuai.xi /* 106*53ee8cc1Swenshuai.xi * HID report descriptor item type (prefix bit 2,3) 107*53ee8cc1Swenshuai.xi */ 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi #define HID_ITEM_TYPE_MAIN 0 110*53ee8cc1Swenshuai.xi #define HID_ITEM_TYPE_GLOBAL 1 111*53ee8cc1Swenshuai.xi #define HID_ITEM_TYPE_LOCAL 2 112*53ee8cc1Swenshuai.xi #define HID_ITEM_TYPE_RESERVED 3 113*53ee8cc1Swenshuai.xi 114*53ee8cc1Swenshuai.xi /* 115*53ee8cc1Swenshuai.xi * HID report descriptor main item tags 116*53ee8cc1Swenshuai.xi */ 117*53ee8cc1Swenshuai.xi 118*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_TAG_INPUT 8 119*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_TAG_OUTPUT 9 120*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_TAG_FEATURE 11 121*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_TAG_BEGIN_COLLECTION 10 122*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_TAG_END_COLLECTION 12 123*53ee8cc1Swenshuai.xi 124*53ee8cc1Swenshuai.xi /* 125*53ee8cc1Swenshuai.xi * HID report descriptor main item contents 126*53ee8cc1Swenshuai.xi */ 127*53ee8cc1Swenshuai.xi 128*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_CONSTANT 0x001 129*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_VARIABLE 0x002 130*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_RELATIVE 0x004 131*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_WRAP 0x008 132*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_NONLINEAR 0x010 133*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_NO_PREFERRED 0x020 134*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_NULL_STATE 0x040 135*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_VOLATILE 0x080 136*53ee8cc1Swenshuai.xi #define HID_MAIN_ITEM_BUFFERED_BYTE 0x100 137*53ee8cc1Swenshuai.xi 138*53ee8cc1Swenshuai.xi /* 139*53ee8cc1Swenshuai.xi * HID report descriptor collection item types 140*53ee8cc1Swenshuai.xi */ 141*53ee8cc1Swenshuai.xi 142*53ee8cc1Swenshuai.xi #define HID_COLLECTION_PHYSICAL 0 143*53ee8cc1Swenshuai.xi #define HID_COLLECTION_APPLICATION 1 144*53ee8cc1Swenshuai.xi #define HID_COLLECTION_LOGICAL 2 145*53ee8cc1Swenshuai.xi 146*53ee8cc1Swenshuai.xi /* 147*53ee8cc1Swenshuai.xi * HID report descriptor global item tags 148*53ee8cc1Swenshuai.xi */ 149*53ee8cc1Swenshuai.xi 150*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_USAGE_PAGE 0 151*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM 1 152*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM 2 153*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM 3 154*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM 4 155*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT 5 156*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_UNIT 6 157*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_REPORT_SIZE 7 158*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_REPORT_ID 8 159*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_REPORT_COUNT 9 160*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_PUSH 10 161*53ee8cc1Swenshuai.xi #define HID_GLOBAL_ITEM_TAG_POP 11 162*53ee8cc1Swenshuai.xi 163*53ee8cc1Swenshuai.xi /* 164*53ee8cc1Swenshuai.xi * HID report descriptor local item tags 165*53ee8cc1Swenshuai.xi */ 166*53ee8cc1Swenshuai.xi 167*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_USAGE 0 168*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_USAGE_MINIMUM 1 169*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_USAGE_MAXIMUM 2 170*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_DESIGNATOR_INDEX 3 171*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MINIMUM 4 172*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_DESIGNATOR_MAXIMUM 5 173*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_STRING_INDEX 7 174*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_STRING_MINIMUM 8 175*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_STRING_MAXIMUM 9 176*53ee8cc1Swenshuai.xi #define HID_LOCAL_ITEM_TAG_DELIMITER 10 177*53ee8cc1Swenshuai.xi 178*53ee8cc1Swenshuai.xi /* 179*53ee8cc1Swenshuai.xi * HID usage tables 180*53ee8cc1Swenshuai.xi */ 181*53ee8cc1Swenshuai.xi 182*53ee8cc1Swenshuai.xi #define HID_USAGE_PAGE 0xffff0000 183*53ee8cc1Swenshuai.xi 184*53ee8cc1Swenshuai.xi #define HID_UP_GENDESK 0x00010000 185*53ee8cc1Swenshuai.xi #define HID_UP_KEYBOARD 0x00070000 186*53ee8cc1Swenshuai.xi #define HID_UP_LED 0x00080000 187*53ee8cc1Swenshuai.xi #define HID_UP_BUTTON 0x00090000 188*53ee8cc1Swenshuai.xi #define HID_UP_CONSUMER 0x000c0000 189*53ee8cc1Swenshuai.xi #define HID_UP_DIGITIZER 0x000d0000 190*53ee8cc1Swenshuai.xi #define HID_UP_PID 0x000f0000 191*53ee8cc1Swenshuai.xi 192*53ee8cc1Swenshuai.xi #define HID_USAGE 0x0000ffff 193*53ee8cc1Swenshuai.xi 194*53ee8cc1Swenshuai.xi #define HID_GD_POINTER 0x00010001 195*53ee8cc1Swenshuai.xi #define HID_GD_MOUSE 0x00010002 196*53ee8cc1Swenshuai.xi #define HID_GD_JOYSTICK 0x00010004 197*53ee8cc1Swenshuai.xi #define HID_GD_GAMEPAD 0x00010005 198*53ee8cc1Swenshuai.xi #define HID_GD_HATSWITCH 0x00010039 199*53ee8cc1Swenshuai.xi 200*53ee8cc1Swenshuai.xi /* 201*53ee8cc1Swenshuai.xi * HID report types --- Ouch! HID spec says 1 2 3! 202*53ee8cc1Swenshuai.xi */ 203*53ee8cc1Swenshuai.xi 204*53ee8cc1Swenshuai.xi #define HID_INPUT_REPORT 0 205*53ee8cc1Swenshuai.xi #define HID_OUTPUT_REPORT 1 206*53ee8cc1Swenshuai.xi #define HID_FEATURE_REPORT 2 207*53ee8cc1Swenshuai.xi 208*53ee8cc1Swenshuai.xi /* 209*53ee8cc1Swenshuai.xi * HID device quirks. 210*53ee8cc1Swenshuai.xi */ 211*53ee8cc1Swenshuai.xi 212*53ee8cc1Swenshuai.xi #define HID_QUIRK_INVERT 0x01 213*53ee8cc1Swenshuai.xi #define HID_QUIRK_NOTOUCH 0x02 214*53ee8cc1Swenshuai.xi #define HID_QUIRK_IGNORE 0x04 215*53ee8cc1Swenshuai.xi #define HID_QUIRK_NOGET 0x08 216*53ee8cc1Swenshuai.xi 217*53ee8cc1Swenshuai.xi #define USEAGE_X 0x30 218*53ee8cc1Swenshuai.xi #define USEAGE_Y 0x31 219*53ee8cc1Swenshuai.xi #define USEAGE_Z 0x32 220*53ee8cc1Swenshuai.xi #define USEAGE_UNDEFINED 0 221*53ee8cc1Swenshuai.xi #define MAX_AXIS_NUM 6 222*53ee8cc1Swenshuai.xi 223*53ee8cc1Swenshuai.xi #define USEAGE_PAGE_BUTTON 9 224*53ee8cc1Swenshuai.xi /* 225*53ee8cc1Swenshuai.xi * We parse each description item into this structure. Short items data 226*53ee8cc1Swenshuai.xi * values are expanded to 32-bit signed int, long items contain a pointer 227*53ee8cc1Swenshuai.xi * into the data area. 228*53ee8cc1Swenshuai.xi */ 229*53ee8cc1Swenshuai.xi 230*53ee8cc1Swenshuai.xi struct hid_item { 231*53ee8cc1Swenshuai.xi __u8 format; 232*53ee8cc1Swenshuai.xi __u8 size; 233*53ee8cc1Swenshuai.xi __u8 type; 234*53ee8cc1Swenshuai.xi __u8 tag; 235*53ee8cc1Swenshuai.xi union { 236*53ee8cc1Swenshuai.xi __u8 u8; 237*53ee8cc1Swenshuai.xi __s8 s8; 238*53ee8cc1Swenshuai.xi __u16 u16; 239*53ee8cc1Swenshuai.xi __s16 s16; 240*53ee8cc1Swenshuai.xi __u32 u32; 241*53ee8cc1Swenshuai.xi __s32 s32; 242*53ee8cc1Swenshuai.xi __u8 *longdata; 243*53ee8cc1Swenshuai.xi } zdata; 244*53ee8cc1Swenshuai.xi }; 245*53ee8cc1Swenshuai.xi struct hid_global { 246*53ee8cc1Swenshuai.xi __u32 usage_page; 247*53ee8cc1Swenshuai.xi __s32 logical_minimum; 248*53ee8cc1Swenshuai.xi __s32 logical_maximum; 249*53ee8cc1Swenshuai.xi __s32 physical_minimum; 250*53ee8cc1Swenshuai.xi __s32 physical_maximum; 251*53ee8cc1Swenshuai.xi __u8 unit_exponent; 252*53ee8cc1Swenshuai.xi __u8 unit; 253*53ee8cc1Swenshuai.xi __u8 report_id; 254*53ee8cc1Swenshuai.xi __u8 report_size; 255*53ee8cc1Swenshuai.xi __u8 report_count; 256*53ee8cc1Swenshuai.xi }; 257*53ee8cc1Swenshuai.xi /* 258*53ee8cc1Swenshuai.xi * This is the collection stack. We climb up the stack to determine 259*53ee8cc1Swenshuai.xi * application and function of each field. 260*53ee8cc1Swenshuai.xi */ 261*53ee8cc1Swenshuai.xi 262*53ee8cc1Swenshuai.xi struct hid_collection { 263*53ee8cc1Swenshuai.xi __u8 type; 264*53ee8cc1Swenshuai.xi __u8 usage; 265*53ee8cc1Swenshuai.xi }; 266*53ee8cc1Swenshuai.xi 267*53ee8cc1Swenshuai.xi 268*53ee8cc1Swenshuai.xi /* 269*53ee8cc1Swenshuai.xi * This is the local enviroment. It is resistent up the next main-item. 270*53ee8cc1Swenshuai.xi */ 271*53ee8cc1Swenshuai.xi 272*53ee8cc1Swenshuai.xi #define HID_MAX_DESCRIPTOR_SIZE 4096 273*53ee8cc1Swenshuai.xi #define HID_MAX_USAGES 16 274*53ee8cc1Swenshuai.xi #define HID_MAX_APPLICATIONS 16 275*53ee8cc1Swenshuai.xi 276*53ee8cc1Swenshuai.xi struct hid_local { 277*53ee8cc1Swenshuai.xi __u8 usage[HID_MAX_USAGES]; /* usage array */ 278*53ee8cc1Swenshuai.xi __u8 usage_index; 279*53ee8cc1Swenshuai.xi __u8 usage_minimum; 280*53ee8cc1Swenshuai.xi __u8 delimiter_depth; 281*53ee8cc1Swenshuai.xi __u8 delimiter_branch; 282*53ee8cc1Swenshuai.xi }; 283*53ee8cc1Swenshuai.xi 284*53ee8cc1Swenshuai.xi #define HID_GLOBAL_STACK_SIZE 4 285*53ee8cc1Swenshuai.xi #define HID_COLLECTION_STACK_SIZE 4 286*53ee8cc1Swenshuai.xi struct hid_parser { 287*53ee8cc1Swenshuai.xi struct hid_global global; 288*53ee8cc1Swenshuai.xi struct hid_global global_stack[HID_GLOBAL_STACK_SIZE]; 289*53ee8cc1Swenshuai.xi unsigned global_stack_ptr; 290*53ee8cc1Swenshuai.xi struct hid_local local; 291*53ee8cc1Swenshuai.xi struct hid_collection collection_stack[HID_COLLECTION_STACK_SIZE]; 292*53ee8cc1Swenshuai.xi unsigned collection_stack_ptr; 293*53ee8cc1Swenshuai.xi //struct hid_device *device; 294*53ee8cc1Swenshuai.xi }; 295*53ee8cc1Swenshuai.xi #define TYPE_NOEVENT 0 296*53ee8cc1Swenshuai.xi #define TYPE_AXIS_X 1 297*53ee8cc1Swenshuai.xi #define TYPE_AXIS_Y 2 298*53ee8cc1Swenshuai.xi #define TYPE_BUTTON 3 299*53ee8cc1Swenshuai.xi 300*53ee8cc1Swenshuai.xi struct axis_struct{ 301*53ee8cc1Swenshuai.xi __u8 size; 302*53ee8cc1Swenshuai.xi __u8 val; 303*53ee8cc1Swenshuai.xi __u16 startbit; 304*53ee8cc1Swenshuai.xi __u8 type; 305*53ee8cc1Swenshuai.xi }; 306*53ee8cc1Swenshuai.xi struct button_struct { //for all one bit button 307*53ee8cc1Swenshuai.xi __u8 count; 308*53ee8cc1Swenshuai.xi __u16 val; 309*53ee8cc1Swenshuai.xi __u16 startbit; 310*53ee8cc1Swenshuai.xi }; 311*53ee8cc1Swenshuai.xi 312*53ee8cc1Swenshuai.xi __u32 GetValue_Port2(__u8 *buf, __u16 offset,__u8 size); 313*53ee8cc1Swenshuai.xi 314