mirror of
https://github.com/clockworkpi/PicoCalc.git
synced 2025-12-12 10:18:54 +01:00
2213 lines
124 KiB
C
2213 lines
124 KiB
C
/***************************************************************************************************************************
|
||
MMBasic
|
||
|
||
keyboard.c
|
||
|
||
Does all the hard work in getting data from the PS2 keyboard
|
||
|
||
Copyright 2011 - 2018 Geoff Graham. All Rights Reserved.
|
||
|
||
This file and modified versions of this file are supplied to specific individuals or organisations under the following
|
||
provisions:
|
||
|
||
- This file, or any files that comprise the MMBasic source (modified or not), may not be distributed or copied to any other
|
||
person or organisation without written permission.
|
||
|
||
- Object files (.o and .hex files) generated using this file (modified or not) may not be distributed or copied to any other
|
||
person or organisation without written permission.
|
||
|
||
- This file is provided 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.
|
||
|
||
****************************************************************************************************************************
|
||
|
||
This routine is based on a technique and code presented by Lucio Di Jasio in his excellent book
|
||
"Programming 32-bit Microcontrollers in C - Exploring the PIC32".
|
||
|
||
Thanks to Muller Fabrice (France), Alberto Leibovich (Argentina) and the other contributors who provided the code for
|
||
the non US keyboard layouts
|
||
|
||
****************************************************************************************************************************/
|
||
/**
|
||
* @file USBKeyboard.c
|
||
* @author Geoff Graham, Peter Mather
|
||
* @brief Source for the MMBasic gamepad and mouse commands
|
||
*/
|
||
/*
|
||
* @cond
|
||
* The following section will be excluded from the documentation.
|
||
*/
|
||
|
||
#include "MMBasic_Includes.h"
|
||
#include "Hardware_Includes.h"
|
||
#include "tusb.h"
|
||
#include "hardware/structs/usb.h"
|
||
extern volatile int ConsoleRxBufHead;
|
||
extern volatile int ConsoleRxBufTail;
|
||
extern volatile int keytimer;
|
||
int justset = 0;
|
||
// extern char ConsoleRxBuf[];
|
||
uint32_t repeattime;
|
||
void USR_KEYBRD_ProcessData(uint8_t data);
|
||
static void process_mouse_report(hid_mouse_report_t const * report, uint8_t n);
|
||
// key codes that must be tracked for up/down state
|
||
#define CTRL 0x14 // left and right generate the same code
|
||
#define L_SHFT 0x12
|
||
#define R_SHFT 0x59
|
||
#define CAPS 0x58
|
||
#define NUML 0x77
|
||
//static uint8_t ds4_dev_addr = 0;
|
||
//static uint8_t ds4_instance = 0;
|
||
extern const char *KBrdList[];
|
||
|
||
|
||
//--------------------------------------------------------------------+
|
||
// TinyUSB Callbacks
|
||
//--------------------------------------------------------------------+
|
||
/*
|
||
BIT 0 Button R/R1
|
||
BIT 1 Button start/options
|
||
BIT 2 Button home
|
||
BIT 3 Button select/share
|
||
BIT 4 Button L/L1
|
||
BIT 5 Button down cursor
|
||
BIT 6 Button right cursor
|
||
BIT 7 Button up cursor
|
||
BIT 8 Button left cursor
|
||
BIT 9 Right shoulder button 2/R2
|
||
BIT 10 Button x/triangle
|
||
BIT 11 Button a/circle
|
||
BIT 12 Button y/square
|
||
BIT 13 Button b/cross
|
||
BIT 14 Left should button 2/L2
|
||
BIT 15 Touchpad
|
||
*/
|
||
struct s_Buttons {
|
||
uint8_t index; // which report element relates to this bit set to 0xFF if bit not used
|
||
// code can be a bit number 0-7 for positive if pressed
|
||
// 128-135 for negative if pressed
|
||
// 64 for value less than 64 if pressed
|
||
// 192 for value greater than 192 if pressed
|
||
uint8_t code ;
|
||
};
|
||
struct s_Gamepad {
|
||
uint16_t vid;
|
||
uint16_t pid;
|
||
struct s_Buttons b_R;
|
||
struct s_Buttons b_START;
|
||
struct s_Buttons b_HOME;
|
||
struct s_Buttons b_SELECT;
|
||
struct s_Buttons b_L;
|
||
struct s_Buttons b_DOWN;
|
||
struct s_Buttons b_RIGHT;
|
||
struct s_Buttons b_UP;
|
||
struct s_Buttons b_LEFT;
|
||
struct s_Buttons b_R2;
|
||
struct s_Buttons b_X;
|
||
struct s_Buttons b_A;
|
||
struct s_Buttons b_Y;
|
||
struct s_Buttons b_B;
|
||
struct s_Buttons b_L2;
|
||
struct s_Buttons b_TOUCH;
|
||
};
|
||
|
||
const struct s_Gamepad Gamepads[]={
|
||
|
||
{
|
||
.vid=0x0810, .pid=0xE501,
|
||
.b_R={6,1},.b_START={6,5},.b_HOME={0xFF,0},.b_SELECT={6,4 },.b_L={6,0},
|
||
.b_DOWN={4,192},.b_RIGHT={3,192},.b_UP={4,64},.b_LEFT={3,64},
|
||
.b_R2={0xFF,0},.b_X={5,4},.b_A={5,5},.b_Y={5,7},.b_B={5,6},
|
||
.b_L2={0xFF,0},.b_TOUCH={0xFF,0}
|
||
},
|
||
{
|
||
.vid=0x79,.pid=0x11,
|
||
.b_R={6,1},.b_START={6,5},.b_HOME={255,0},.b_SELECT={6,4},.b_L={6,0},
|
||
.b_DOWN={4,192},.b_RIGHT={3,192},.b_UP={4,64},.b_LEFT={3,64},
|
||
.b_R2={255,0},.b_X={5,4},.b_A={5,5},.b_Y={5,7},.b_B={5,6},
|
||
.b_L2={255,0},.b_TOUCH={255,0}
|
||
},
|
||
{
|
||
.vid=0x081F, .pid=0xE401,
|
||
.b_R={6,1},.b_START={6,5},.b_HOME={0xFF,0},.b_SELECT={6,4 },.b_L={6,0},
|
||
.b_DOWN={1,192},.b_RIGHT={0,192},.b_UP={1,64},.b_LEFT={0,64},
|
||
.b_R2={0xFF,0},.b_X={5,4},.b_A={5,5},.b_Y={5,7},.b_B={5,6},
|
||
.b_L2={0xFF,0},.b_TOUCH={0xFF,0}
|
||
},
|
||
{
|
||
.vid=0x1C59,.pid=0x26,
|
||
.b_R={6,1},.b_START={6,3},.b_HOME={255,0},.b_SELECT={6,2},.b_L={6,0},
|
||
.b_DOWN={1,192},.b_RIGHT={0,192},.b_UP={1,64},.b_LEFT={0,64},
|
||
.b_R2={255,0},.b_X={5,7},.b_A={5,6},.b_Y={5,4},.b_B={5,5},
|
||
.b_L2={255,0},.b_TOUCH={255,0}
|
||
},
|
||
{
|
||
.vid=0x6A3,.pid=0x107,
|
||
.b_R={3,7},.b_START={3,5},.b_HOME={255,0},.b_SELECT={3,4},.b_L={3,6},
|
||
.b_DOWN={1,192},.b_RIGHT={0,192},.b_UP={1,64},.b_LEFT={0,64},
|
||
.b_R2={3,7},.b_X={3,1},.b_A={3,3},.b_Y={3,0},.b_B={3,2},
|
||
.b_L2={255,0},.b_TOUCH={255,0}
|
||
},
|
||
{
|
||
.vid=0x11FF,.pid=0x3331,
|
||
.b_R={6,3},.b_START={6,1},.b_HOME={6,6},.b_SELECT={6,0},.b_L={6,2},
|
||
.b_DOWN={1,192},.b_RIGHT={0,192},.b_UP={1,64},.b_LEFT={0,64},
|
||
.b_R2={6,5},.b_X={5,4},.b_A={5,6},.b_Y={5,5},.b_B={5,7},
|
||
.b_L2={6,4},.b_TOUCH={6,7}
|
||
},
|
||
{
|
||
.vid=0x0583, .pid=0x2060, .b_R={0x02,0x05}, .b_START={0x02,0x07}, .b_HOME={0xFF,0x00},
|
||
.b_SELECT={0x02,0x06}, .b_L={0x02,0x04}, .b_DOWN={0x01,0xC0}, .b_RIGHT={0x00,0xC0},
|
||
.b_UP={0x01,0x40}, .b_LEFT={0x00,0x40}, .b_R2={0x03,0x05}, .b_X={0x02,0x02},
|
||
.b_A={0x02,0x00}, .b_Y={0x02,0x03}, .b_B={0x02,0x01}, .b_L2={0x03,0x04},
|
||
.b_TOUCH={0xFF,0x00}
|
||
},
|
||
{
|
||
0,0,
|
||
{0,0}, {0,0}, {0,0}, {0,0}, {0,0},
|
||
{0,0}, {0,0}, {0,0}, {0,0},
|
||
{0,0}, {0,0}, {0,0}, {0,0}, {0,0},
|
||
{0,0}, {0,0}
|
||
},
|
||
};
|
||
|
||
struct s_Gamepad MyGamepad={0};
|
||
static bool monitor=false,nooutput=false;
|
||
void tuh_mount_cb(uint8_t dev_addr)
|
||
{
|
||
// application set-up
|
||
// sprintf(buff,"A device with address %d is mounted\r\n", dev_addr);
|
||
}
|
||
|
||
void tuh_umount_cb(uint8_t dev_addr)
|
||
{
|
||
// application tear-down
|
||
// sprintf(buff,"A device with address %d is unmounted \r\n", dev_addr);
|
||
}
|
||
//--------------------------------------------------------------------+
|
||
|
||
// If your host terminal support ansi escape code such as TeraTerm
|
||
// it can be use to simulate mouse cursor movement within terminal
|
||
#define USE_ANSI_ESCAPE 0
|
||
|
||
#define MAX_REPORT 4
|
||
typedef enum
|
||
{
|
||
USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APPLICATION = 0x65,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POWER = 0x66,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_SIZE = 0x67,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F13 = 0x68,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F14 = 0x69,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F15 = 0x6A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F16 = 0x6B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F17 = 0x6C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F18 = 0x6D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F19 = 0x6E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F20 = 0x6F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F21 = 0x70,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F22 = 0x71,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F23 = 0x72,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F24 = 0x73,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EXECUTE = 0x74,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HELP = 0x75,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MENU = 0x76,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SELECT = 0x77,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_STOP = 0x78,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_AGAIN = 0x79,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UNDO = 0x7A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CUT = 0x7B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COPY = 0x7C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PASTE = 0x7D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FIND = 0x7E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MUTE = 0x7F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_VOLUME_UP = 0x80,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_VOLUME_DOWN = 0x81,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LOCKING_CAPS_LOCK = 0x82,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LOCKING_NUM_LOCK = 0x83,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LOCKING_SCROLL_LOCK = 0x84,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_COMMA = 0x85,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_EQUAL_SIGN = 0x86,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL1 = 0x87,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL2 = 0x88,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL3 = 0x89,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL4 = 0x8A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL5 = 0x8B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL6 = 0x8C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL7 = 0x8D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL8 = 0x8E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INTERNATIONAL9 = 0x8F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG1 = 0x90,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG2 = 0x91,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG3 = 0x92,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG4 = 0x93,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG5 = 0x94,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG6 = 0x95,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG7 = 0x96,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG8 = 0x97,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LANG9 = 0x98,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ALTERNATE_ERASE = 0x99,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SYS_REQ_ATTENTION = 0x9A,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CANCEL = 0x9B,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLEAR = 0x9C,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRIOR = 0x9D,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN = 0x9E,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEPARATOR = 0x9F,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OUT = 0xA0,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPER = 0xA1,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLEAR_AGAIN = 0xA2,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CR_SEL_PROPS = 0xA3,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EX_SEL = 0xA4,
|
||
/* Reserved = 0xA5-0xAF */
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_00 = 0xB0,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_000 = 0xB1,
|
||
USB_HID_KEYBOARD_KEYPAD_THOUSANDS_SEPARATOR = 0xB2,
|
||
USB_HID_KEYBOARD_KEYPAD_DECIMAL_SEPARATOR = 0xB3,
|
||
USB_HID_KEYBOARD_KEYPAD_CURRENCY_UNIT = 0xB4,
|
||
USB_HID_KEYBOARD_KEYPAD_CURRENTY_SUB_UNIT = 0xB5,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_OPEN_PARENTHESIS = 0xB6,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_CLOSE_PARENTHESIS = 0xB7,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_OPEN_CURLY_BRACE = 0xB8,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_CLOSE_CURLY_BRACE = 0xB9,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_TAB = 0xBA,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACKSPACE = 0xBB,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_A = 0xBC,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_B = 0xBD,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_C = 0xBE,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_D = 0xBF,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_E = 0xC0,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_F = 0xC1,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_XOR = 0xC2,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_CARROT = 0xC3,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERCENT_SIGN = 0xC4,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_LESS_THAN = 0xC5,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_GREATER_THAN = 0xC6,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_AMPERSAND = 0xC7,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_DOUBLE_AMPERSAND = 0xC8,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_PIPE = 0xC9,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_DOUBLE_PIPE = 0xCA,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_COLON = 0xCB,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_HASH = 0xCC,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_SPACE = 0xCD,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_AT = 0xCE,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_EXCLAMATION_POINT = 0xCF,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_STORE = 0xD0,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_RECALL = 0xD1,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_CLEAR = 0xD2,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_ADD = 0xD3,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_SUBTRACT = 0xD4,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_MULTIPLY = 0xD5,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_MEMORY_DIVIDE = 0xD6,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS_MINUS = 0xD7,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_CLEAR = 0xD8,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_CLEAR_ENTRY = 0xD9,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_BINARY = 0xDA,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_OCTAL = 0xDB,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_DECIMAL = 0xDC,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYPAD_HEXADECIMAL = 0xDD,
|
||
/* Reserved = 0xDE-0xDF */
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_CONTROL = 0xE0,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_SHIFT = 0xE1,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ALT = 0xE2,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_GUI = 0xE3,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_CONTROL = 0xE4,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_SHIFT = 0xE5,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ALT = 0xE6,
|
||
USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_GUI = 0xE7
|
||
//0xE8-0xFFFF reserved
|
||
} USB_HID_KEYBOARD_KEYPAD;
|
||
const int UKkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,
|
||
49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E,
|
||
50,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, QUOTE UK!!!!
|
||
51,35,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20,
|
||
52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21,
|
||
53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
54,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
55,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
56,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
57,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
48,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,0x9f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D,
|
||
61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
91,123,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F,
|
||
93,125,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30,
|
||
92,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31,
|
||
35,126,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
59,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33,
|
||
39,64,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, @ UK///
|
||
96,126,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35,
|
||
44,60,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
46,62,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
47,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
};
|
||
|
||
const int USkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,
|
||
49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E,
|
||
50,64,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, QUOTE UK!!!!
|
||
51,35,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20,
|
||
52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21,
|
||
53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
54,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
55,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
56,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
57,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
48,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,0x9f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D,
|
||
61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
91,123,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F,
|
||
93,125,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30,
|
||
92,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31,
|
||
92,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
59,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33,
|
||
39,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, @ UK///
|
||
96,126,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35,
|
||
44,60,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
46,62,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
47,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
92,124 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
};
|
||
const int DEkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,
|
||
49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E,
|
||
50,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F,
|
||
51,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, DE: §=245
|
||
52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21,
|
||
53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
54,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
55,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
56,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
57,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
48,61,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,0x9f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
0,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D, DE: ß=225
|
||
0,96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E, DE: ´=239
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, DE: ü=129,Ü=154
|
||
43,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30,
|
||
35,39,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31,
|
||
35,39,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33, DE: ö=228,Ö=229
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, DE: ä=132,Ä=142
|
||
94,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, DE: °=167
|
||
44,59,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
46,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
60,62 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
};
|
||
const int FRkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04, FR Q
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
44,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10, FR ,?
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14, FR A
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A, FR Z
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D, FR W
|
||
38,49,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E, FR & 1
|
||
233,50,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, FR é 2 ~
|
||
34,51,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, FR " 3 #
|
||
39,52,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21, FR ' 4 {
|
||
40,53,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22, FR ( 5 [
|
||
45,54,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23, FR - 6
|
||
232,55,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24, FR è 7 `
|
||
95,56,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25, FR _ 8 '\'
|
||
135,57,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26, FR ç 9 ^
|
||
00,48,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27, FR à 0 @
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,0x9f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
41,00,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D, FR ) ]
|
||
61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
94,168,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, FR ^ ¨
|
||
36,163,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30, FR $ £
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31, -- not present --
|
||
42,181,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32, FR * µ
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33, FR M
|
||
249,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, FR ù %
|
||
178,00,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, FR ²
|
||
59,46,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36, FR ; .
|
||
58,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37, FR : /
|
||
33,167,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38, FR ! §
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
60,62 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64, FR < >
|
||
};
|
||
const int ESkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08, ALT GR -> €
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,·
|
||
49,33,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E, ALT GR -> |
|
||
50,34,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F, ALT GR -> @
|
||
51,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20, ALT GR -> #
|
||
52,36,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21, ALT GR -> ~
|
||
53,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
54,38,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
55,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
56,40,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
57,41,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
48,61,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,0x9f,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
39,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
0,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F, ALT GR -> [
|
||
43,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30, ALT GR -> ]
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31, ALT GR -> }
|
||
92,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34, ALT GR -> {
|
||
96,96,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35, ALT GR -> backslash (Tecla º)
|
||
44,59,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
46,58,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
60,62 // USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
};
|
||
const int BEkeyValue[202] = {
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_RESERVED_NO_EVENT_INDICATED = 0x00,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_ROLL_OVER = 0x01,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_POST_FAIL = 0x02,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ERROR_UNDEFINED = 0x03,
|
||
113,81,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A = 0x04,
|
||
98,66,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_B = 0x05,
|
||
99,67,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_C = 0x06,
|
||
100,68,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_D = 0x07,
|
||
101,69,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_E = 0x08,
|
||
102,70,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F = 0x09,
|
||
103,71,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_G = 0x0A,
|
||
104,72,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_H = 0x0B,
|
||
105,73,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_I = 0x0C,
|
||
106,74,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_J = 0x0D,
|
||
107,75,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_K = 0x0E,
|
||
108,76,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_L = 0x0F,
|
||
44,63,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_M = 0x10,
|
||
110,78,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_N = 0x11,
|
||
111,79,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_O = 0x12,
|
||
112,80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_P = 0x13,
|
||
97,65,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Q = 0x14,
|
||
114,82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_R = 0x15,
|
||
115,83,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_S = 0x16,
|
||
116,84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_T = 0x17,
|
||
117,85,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_U = 0x18,
|
||
118,86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_V = 0x19,
|
||
122,90,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_W = 0x1A,
|
||
120,88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_X = 0x1B,
|
||
121,89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Y = 0x1C,
|
||
119,87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z = 0x1D,
|
||
38,49,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_1_AND_EXCLAMATION_POINT = 0x1E,
|
||
64,50,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_2_AND_AT = 0x1F,
|
||
34,51,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_3_AND_HASH = 0x20,
|
||
39,52,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_4_AND_DOLLAR = 0x21,
|
||
40,53,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_5_AND_PERCENT = 0x22,
|
||
36,54,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_6_AND_CARROT = 0x23,
|
||
96,55,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_7_AND_AMPERSAND = 0x24,
|
||
33,56,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_8_AND_ASTERISK = 0x25,
|
||
123,57,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_9_AND_OPEN_PARENTHESIS = 0x26,
|
||
125,48,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_0_AND_CLOSE_PARENTHESIS = 0x27,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RETURN_ENTER = 0x28,
|
||
27,27,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_ESCAPE = 0x29,
|
||
8,8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE = 0x2A,
|
||
9,9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_TAB = 0x2B,
|
||
32,32,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SPACEBAR = 0x2C,
|
||
41,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_MINUS_AND_UNDERSCORE = 0x2D,
|
||
45,95,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_EQUAL_AND_PLUS = 0x2E,
|
||
91,94,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_OPEN_BRACKET_AND_OPEN_CURLY_BRACE = 0x2F,
|
||
36,42,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CLOSE_BRACKET_AND_CLOSE_CURLY_BRACE = 0x30,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_BACK_SLASH_AND_PIPE = 0x31,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_HASH_AND_TILDE = 0x32,
|
||
109,77,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SEMICOLON_AND_COLON = 0x33,
|
||
0,37,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_APOSTROPHE_AND_QUOTE = 0x34,
|
||
35,124,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_GRAVE_ACCENT_AND_TILDE = 0x35,
|
||
59,46,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_COMMA_AND_LESS_THAN = 0x36,
|
||
58,47,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PERIOD_AND_GREATER_THAN = 0x37,
|
||
61,43,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_FORWARD_SLASH_AND_QUESTION_MARK = 0x38,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK = 0x39,
|
||
0x91,0xB1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F1 = 0x3A,
|
||
0x92,0xB2,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F2 = 0x3B,
|
||
0x93,0xB3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F3 = 0x3C,
|
||
0x94,0xB4,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F4 = 0x3D,
|
||
0x95,0xB5,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F5 = 0x3E,
|
||
0x96,0xB6,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F6 = 0x3F,
|
||
0x97,0xB7,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F7 = 0x40,
|
||
0x98,0xB8,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F8 = 0x41,
|
||
0x99,0xB9,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F9 = 0x42,
|
||
0x9a,0xBa,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F10 = 0x43,
|
||
0x9b,0xBb,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F11 = 0x44,
|
||
0x9c,0xBc,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_F12 = 0x45,
|
||
0x9d,0xBd,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PRINT_SCREEN = 0x46,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK = 0x47,
|
||
0x9e,0x9e,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAUSE = 0x48,
|
||
0x84,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_INSERT = 0x49,
|
||
0x86,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_HOME = 0x4A,
|
||
0x88,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_UP = 0x4B,
|
||
0x7f,0xa0,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DELETE_FORWARD = 0x4C,
|
||
0x87,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_END = 0x4D,
|
||
0x89,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_PAGE_DOWN = 0x4E,
|
||
0x83,0xA3,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_RIGHT_ARROW = 0x4F,
|
||
0x82,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_LEFT_ARROW = 0x50,
|
||
0x81,0xA1,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_DOWN_ARROW = 0x51,
|
||
0x80,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYBOARD_UP_ARROW = 0x52,
|
||
0,0,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR = 0x53,
|
||
47,47,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH = 0x54,
|
||
42,42,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ASTERISK = 0x55,
|
||
45,45,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_MINUS = 0x56,
|
||
43,43,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_PLUS = 0x57,
|
||
10,10,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_ENTER = 0x58,
|
||
49,0x87,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_1_AND_END = 0x59,
|
||
50,0x81,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_2_AND_DOWN_ARROW = 0x5A,
|
||
51,0x89,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_3_AND_PAGE_DOWN = 0x5B,
|
||
52,0x82,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_4_AND_LEFT_ARROW = 0x5C,
|
||
53,53,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_5 = 0x5D,
|
||
54,0x83,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_6_AND_RIGHT_ARROW = 0x5E,
|
||
55,0x86,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_7_AND_HOME = 0x5F,
|
||
56,0x80,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_8_AND_UP_ARROW = 0x60,
|
||
57,0x88,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_9_AND_PAGE_UP = 0x61,
|
||
48,0x84,// USB_HID_KEYBOARD_KEYPAD_KEYPAD_0_AND_INSERT = 0x62,
|
||
46,0x7f, //USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE = 0x63,
|
||
60,62 //USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE = 0x64,
|
||
};
|
||
volatile struct s_HID HID[4]={0};
|
||
typedef struct TU_ATTR_PACKED
|
||
{
|
||
uint8_t x, y, z, rz; // joystick
|
||
|
||
struct {
|
||
uint8_t dpad : 4; // (hat format, 0x08 is released, 0=N, 1=NE, 2=E, 3=SE, 4=S, 5=SW, 6=W, 7=NW)
|
||
uint8_t square : 1; // west
|
||
uint8_t cross : 1; // south
|
||
uint8_t circle : 1; // east
|
||
uint8_t triangle : 1; // north
|
||
};
|
||
|
||
struct {
|
||
uint8_t l1 : 1;
|
||
uint8_t r1 : 1;
|
||
uint8_t l2 : 1;
|
||
uint8_t r2 : 1;
|
||
uint8_t share : 1;
|
||
uint8_t option : 1;
|
||
uint8_t l3 : 1;
|
||
uint8_t r3 : 1;
|
||
};
|
||
|
||
struct {
|
||
uint8_t ps : 1; // playstation button
|
||
uint8_t tpad : 1; // track pad click
|
||
uint8_t counter : 6; // +1 each report
|
||
};
|
||
|
||
uint8_t l2_trigger; // 0 released, 0xff fully pressed
|
||
uint8_t r2_trigger; // as above
|
||
|
||
uint16_t timestamp;
|
||
uint8_t battery;
|
||
//
|
||
int16_t gyro[3]; // x, y, z;
|
||
int16_t accel[3]; // x, y, z
|
||
|
||
// there is still lots more info
|
||
|
||
} sony_ds4_report_t;
|
||
|
||
typedef struct TU_ATTR_PACKED {
|
||
// First 16 bits set what data is pertinent in this structure (1 = set; 0 = not set)
|
||
uint8_t set_rumble : 1;
|
||
uint8_t set_led : 1;
|
||
uint8_t set_led_blink : 1;
|
||
uint8_t set_ext_write : 1;
|
||
uint8_t set_left_volume : 1;
|
||
uint8_t set_right_volume : 1;
|
||
uint8_t set_mic_volume : 1;
|
||
uint8_t set_speaker_volume : 1;
|
||
uint8_t set_flags2;
|
||
|
||
uint8_t reserved;
|
||
|
||
uint8_t motor_right;
|
||
uint8_t motor_left;
|
||
|
||
uint8_t lightbar_red;
|
||
uint8_t lightbar_green;
|
||
uint8_t lightbar_blue;
|
||
uint8_t lightbar_blink_on;
|
||
uint8_t lightbar_blink_off;
|
||
|
||
uint8_t ext_data[8];
|
||
|
||
uint8_t volume_left;
|
||
uint8_t volume_right;
|
||
uint8_t volume_mic;
|
||
uint8_t volume_speaker;
|
||
|
||
uint8_t other[9];
|
||
} sony_ds4_output_report_t;
|
||
#define PS4 128
|
||
#define PS3 129
|
||
#define SNES 130
|
||
#define XBOX 131
|
||
#define UNKNOWN 132
|
||
static inline bool is_xbox(uint8_t dev_addr)
|
||
{
|
||
uint16_t vid, pid;
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
return ( (vid == 0x11c0 && pid == 0x5500) // EasySMX Wireless, u, Android mode (u)
|
||
|| (vid == 0x11c1 && pid == 0x9101) // EasySMX Wireless, c, PC Mode, D-input, emulation
|
||
// || (vid == 0x057e && pid == 0x2009)
|
||
|| (vid == 0x2F24 && pid == 0x0048)
|
||
);
|
||
}
|
||
/*static inline bool is_specific(uint8_t dev_addr)
|
||
{
|
||
uint16_t vid, pid;
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
return ( (vid == 0x810 && pid == 0xE501) // EasySMX Wireless, u, Android mode (u)
|
||
);
|
||
}*/
|
||
static inline bool is_generic(uint8_t dev_addr)
|
||
{
|
||
if(monitor)return true;
|
||
uint16_t vid, pid,i=0;
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
if(MyGamepad.pid==pid && MyGamepad.vid==vid)return true; //user specified decode
|
||
while(Gamepads[i].pid){
|
||
if(Gamepads[i].pid==pid && Gamepads[i].vid==vid)return true;
|
||
i++;
|
||
}
|
||
return false;
|
||
}
|
||
void process_xbox(uint8_t const* report, uint16_t len, uint8_t n)
|
||
{
|
||
//PInt(len);
|
||
/*for (int i=0;i<len;i++) {
|
||
PInt(i);
|
||
PIntHC(report[i]);
|
||
}
|
||
PRet();*/
|
||
nunstruct[n].type=XBOX;
|
||
uint16_t b=0;
|
||
if(len == 9) {
|
||
if(report[0]&0x10)b|=0x0400; // Button y/triangle
|
||
if(report[0]&0x02)b|=0x0800; // Button b/circle
|
||
if(report[0]&0x08)b|=0x1000; // Button x/square
|
||
if(report[0]&0x01)b|=0x2000; // Button a/cross
|
||
if(report[1]&0x08)b|=0x0002; // Button start -> start?
|
||
if(report[1]&0x04)b|=0x0008; // Button home -> xbox/PS?
|
||
if(report[1]&0x10)b|=0x0004; // Button select -> back/share?
|
||
if(report[0]&0x80)b|=0x0001; // Button R/R1
|
||
if(report[0]&0x40)b|=0x0010; // Button L/L1
|
||
if(report[2] == 0x4)b|=0x20; // Button down cursor
|
||
if(report[2] == 0x2)b|=0x40; // Button right cursor
|
||
if(report[2] == 0x0)b|=0x80; // Button up cursor
|
||
if(report[2] == 0x6)b|=0x100; // Button left cursor
|
||
nunstruct[n].ax=report[3];
|
||
nunstruct[n].ay=report[4];
|
||
nunstruct[n].Z=report[5];
|
||
nunstruct[n].C=report[6];
|
||
nunstruct[n].L=report[8];
|
||
nunstruct[n].R=report[7];
|
||
}
|
||
else {
|
||
// TODO
|
||
}
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}
|
||
// Each HID instance can has multiple reports
|
||
/*static struct
|
||
{
|
||
uint8_t report_count;
|
||
tuh_hid_report_info_t report_info[MAX_REPORT];
|
||
} hid_info[CFG_TUH_HID];*/
|
||
|
||
static void process_kbd_report(hid_keyboard_report_t const *report, uint8_t n);
|
||
//static void process_mouse_report(hid_mouse_report_t const * report);
|
||
//static void process_generic_report(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len);
|
||
int caps_lock=0;
|
||
int num_lock=0;
|
||
int scroll_lock=0;
|
||
int KeyDown[7];
|
||
const int *keylayout;
|
||
uint8_t Current_USB_devices=0;
|
||
uint8_t Current_controllers=0;
|
||
|
||
void USB_bus_reset(void){
|
||
hw_set_bits(&usb_hw->phy_direct_override, USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_BITS | USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_BITS |
|
||
USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OE_OVERRIDE_EN_BITS | USB_USBPHY_DIRECT_OVERRIDE_TX_DP_OVERRIDE_EN_BITS) ;
|
||
hw_set_bits(&usb_hw->phy_direct, USB_USBPHY_DIRECT_TX_DM_OE_BITS | USB_USBPHY_DIRECT_TX_DP_OE_BITS);
|
||
uint32_t save=usb_hw->phy_direct;
|
||
hw_clear_bits(&usb_hw->phy_direct,USB_USBPHY_DIRECT_TX_DM_BITS |USB_USBPHY_DIRECT_TX_DP_BITS);
|
||
uSec(10000);
|
||
usb_hw->phy_direct=save;
|
||
hw_clear_bits(&usb_hw->phy_direct_override, USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OE_OVERRIDE_EN_BITS | USB_USBPHY_DIRECT_OVERRIDE_TX_DM_OVERRIDE_EN_BITS);
|
||
}
|
||
void clearrepeat(void){
|
||
keytimer=0;
|
||
repeattime=Option.RepeatStart;
|
||
memset(KeyDown,0,sizeof(KeyDown));
|
||
}
|
||
bool diff_than_2(uint8_t x, uint8_t y)
|
||
{
|
||
return (x - y > 4) || (y - x > 4);
|
||
}
|
||
static inline bool is_sony_ds4(uint8_t dev_addr)
|
||
{
|
||
uint16_t vid, pid;
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
return ( (vid == 0x054c && (pid == 0x09cc || pid == 0x05c4)) // Sony DualShock4
|
||
|| (vid == 0x0f0d && pid == 0x005e) // Hori FC4
|
||
|| (vid == 0x0f0d && pid == 0x00ee) // Hori PS4 Mini (PS4-099U)
|
||
|| (vid == 0x1f4f && pid == 0x1002) // ASW GG xrd controller
|
||
);
|
||
}
|
||
/*
|
||
LX returns the position of the analog left joystick x axis
|
||
LY returns the position of the analog left joystick y axis
|
||
RX returns the position of the analog right joystick x axis
|
||
RY returns the position of the analog right joystick y axis
|
||
L returns the position of the analog left button
|
||
R returns the position of the analog right button
|
||
B returns a bitmap of the state of all the buttons. A bit will be set to 1 if the
|
||
button is pressed.
|
||
T returns the ID code of the controller
|
||
Wii Classic = &HA4200101
|
||
Generic Gamepad = 130
|
||
PS4 = 128
|
||
PS3 = 129
|
||
The button bitmap is as follows:
|
||
BIT 0: Button R/R1
|
||
BIT 1: Button start
|
||
BIT 2: Button home
|
||
BIT 3: Button select
|
||
BIT 4: Button L/L1
|
||
BIT 5: Button down cursor
|
||
BIT 6: Button right cursor
|
||
BIT 7: Button up cursor
|
||
BIT 8: Button left cursor
|
||
BIT 9: Button ZR/R2
|
||
BIT 10: Button x/triangle
|
||
BIT 11: Button a/circle
|
||
BIT 12: Button y/square
|
||
BIT 13: Button b/cross
|
||
BIT 14: Button ZL/L2
|
||
BIT 15: TPAD - PS4 only*/
|
||
static inline bool is_sony_ds3(uint8_t dev_addr)
|
||
{
|
||
uint16_t vid, pid;
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
return ( (vid == 0x054c && (pid == 0x0268)) // Sony DualShock3
|
||
);
|
||
}
|
||
bool diff_report(sony_ds4_report_t const* rpt1, sony_ds4_report_t const* rpt2)
|
||
{
|
||
bool result;
|
||
|
||
// x, y, z, rz must different than 2 to be counted
|
||
result = diff_than_2(rpt1->x, rpt2->x) || diff_than_2(rpt1->y , rpt2->y ) ||
|
||
diff_than_2(rpt1->z, rpt2->z) || diff_than_2(rpt1->rz, rpt2->rz);
|
||
|
||
// check the rest with mem compare
|
||
result |= memcmp(&rpt1->rz + 1, &rpt2->rz + 1, sizeof(sony_ds4_report_t)-6);
|
||
|
||
return result;
|
||
}
|
||
/*
|
||
BIT 0 Button R/R1
|
||
BIT 1 Button start/options
|
||
BIT 2 Button home
|
||
BIT 3 Button select/share
|
||
BIT 4 Button L/L1
|
||
BIT 5 Button down cursor
|
||
BIT 6 Button right cursor
|
||
BIT 7 Button up cursor
|
||
BIT 8 Button left cursor
|
||
BIT 9 Right shoulder button 2/R2
|
||
BIT 10 Button x/triangle
|
||
BIT 11 Button a/circle
|
||
BIT 12 Button y/square
|
||
BIT 13 Button b/cross
|
||
BIT 14 Left should button 2/L2
|
||
BIT 15 Touchpad
|
||
*/
|
||
#define p_R 1
|
||
#define p_START (1<<1)
|
||
#define p_HOME (1<<2)
|
||
#define p_SELECT (1<<3)
|
||
#define p_L (1<<4)
|
||
#define p_DOWN (1<<5)
|
||
#define p_RIGHT (1<<6)
|
||
#define p_UP (1<<7)
|
||
#define p_LEFT (1<<8)
|
||
#define p_R2 (1<<9)
|
||
#define p_X (1<<10)
|
||
#define p_A (1<<11)
|
||
#define p_Y (1<<12)
|
||
#define p_B (1<<13)
|
||
#define p_L2 (1<<14)
|
||
#define p_TOUCH (1<<15)
|
||
/*void process_buffalo_gamepad(uint8_t const* report, uint16_t len, uint8_t n){
|
||
nunstruct[n].type=SNES;
|
||
uint16_t b=0;
|
||
if(report[1] < 0x40)b|=b_UP;
|
||
if(report[1] > 0xC0)b|=b_DOWN;
|
||
if(report[0] < 0x40)b|=b_LEFT;
|
||
if(report[0] > 0xC0)b|=b_RIGHT;
|
||
if(report[2] & 0x01)b|=b_A;
|
||
if(report[2] & 0x02)b|=b_B;
|
||
if(report[2] & 0x04)b|=b_X;
|
||
if(report[2] & 0x08)b|=b_Y;
|
||
if(report[2] & 0x10)b|=b_L;
|
||
if(report[2] & 0x20)b|=b_R;
|
||
// if(report[6] & 0x10)b|=b_SELECT;
|
||
// if(report[6] & 0x20)b|=b_START;
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}
|
||
void process_specific_gamepad(uint8_t const* report, uint16_t len, uint8_t n){
|
||
nunstruct[n].type=SNES;
|
||
uint16_t b=0;
|
||
if(report[4] < 0x40)b|=b_UP;
|
||
if(report[4] > 0xC0)b|=b_DOWN;
|
||
if(report[3] < 0x40)b|=b_LEFT;
|
||
if(report[3] > 0xC0)b|=b_RIGHT;
|
||
if(report[5] & 0x20)b|=b_A;
|
||
if(report[5] & 0x40)b|=b_B;
|
||
if(report[5] & 0x10)b|=b_X;
|
||
if(report[5] & 0x80)b|=b_Y;
|
||
if(report[6] & 0x01)b|=b_L;
|
||
if(report[6] & 0x02)b|=b_R;
|
||
if(report[6] & 0x10)b|=b_SELECT;
|
||
if(report[6] & 0x20)b|=b_START;
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}*/
|
||
void checkpush(uint8_t const* report, uint16_t len, struct s_Buttons button, uint16_t set, uint16_t *b){
|
||
if(button.index==0xFF)return;
|
||
if(button.code==192){
|
||
if(report[button.index]>192)*b |= set;
|
||
} else if(button.code==64){
|
||
if(report[button.index]<64)*b |= set;
|
||
} else if(button.code<8){
|
||
if(report[button.index]&(1<<button.code))*b |= set;
|
||
} else if(button.code>128 && button.code<136){
|
||
if((report[button.index]&(1<<button.code))==0)*b |= set;
|
||
} else error("Internal data error");
|
||
|
||
}
|
||
void PIntHN(unsigned long long int n, int l) {
|
||
char s[128];
|
||
for(int i=0;i<128;i++)s[i]='0';
|
||
IntToStr(&s[64], (int64_t)n, 16);
|
||
MMPrintString(&s[64-(l-strlen(&s[64]))]);
|
||
}
|
||
|
||
void process_generic_gamepad(uint8_t const* report, uint16_t len, uint8_t n){
|
||
if(monitor && !nooutput){
|
||
static uint8_t lastreport[64]={0};
|
||
if(memcmp(report, lastreport, len)){
|
||
PIntHN(HID[n-1].vid,4);putConsole(',',0);PIntHN(HID[n-1].pid,4);PRet();
|
||
PIntHN(lastreport[0],2);
|
||
for(int i=1;i<len;i++){putConsole(',',0);PIntHN(lastreport[i],2);}
|
||
PRet();
|
||
PIntHN(report[0],2);
|
||
for(int i=1;i<len;i++){putConsole(',',0);PIntHN(report[i],2);}
|
||
PRet();
|
||
}
|
||
memcpy(lastreport,report,len);
|
||
return;
|
||
}
|
||
if(monitor && nooutput)return;
|
||
uint16_t b=0;
|
||
int i=0;
|
||
struct s_Gamepad Gamepad;
|
||
if(MyGamepad.pid==HID[n-1].pid && MyGamepad.vid==HID[n-1].vid){
|
||
memcpy(&Gamepad, &MyGamepad,sizeof(struct s_Gamepad));
|
||
goto process; //user specified decode
|
||
}
|
||
while(Gamepads[i].pid){
|
||
if(Gamepads[i].pid==HID[n-1].pid && Gamepads[i].vid==HID[n-1].vid)break;
|
||
i++;
|
||
}
|
||
if(Gamepads[i].pid==0)return;
|
||
memcpy(&Gamepad, &Gamepads[i],sizeof(struct s_Gamepad));
|
||
process:;
|
||
nunstruct[n].type=SNES;
|
||
checkpush(report, len, Gamepad.b_A , p_A, &b);
|
||
checkpush(report, len, Gamepad.b_B, p_B, &b);
|
||
checkpush(report, len, Gamepad.b_DOWN , p_DOWN, &b);
|
||
checkpush(report, len, Gamepad.b_HOME , p_HOME, &b);
|
||
checkpush(report, len, Gamepad.b_L2 , p_L2, &b);
|
||
checkpush(report, len, Gamepad.b_L , p_L, &b);
|
||
checkpush(report, len, Gamepad.b_LEFT , p_LEFT, &b);
|
||
checkpush(report, len, Gamepad.b_R2 , p_R2, &b);
|
||
checkpush(report, len, Gamepad.b_R , p_R, &b);
|
||
checkpush(report, len, Gamepad.b_RIGHT , p_RIGHT, &b);
|
||
checkpush(report, len, Gamepad.b_SELECT , p_SELECT, &b);
|
||
checkpush(report, len, Gamepad.b_START , p_START, &b);
|
||
checkpush(report, len, Gamepad.b_TOUCH , p_TOUCH, &b);
|
||
checkpush(report, len, Gamepad.b_UP , p_UP, &b);
|
||
checkpush(report, len, Gamepad.b_X , p_X, &b);
|
||
checkpush(report, len, Gamepad.b_Y , p_Y, &b);
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}
|
||
void process_sony_ds3(uint8_t const* report, uint16_t len, uint8_t n)
|
||
{
|
||
nunstruct[n].type=PS3;
|
||
uint16_t b=0;
|
||
if(report[3]&0x08)b|=1;
|
||
if(report[2]&0x08)b|=1<<1;
|
||
if(report[4]&0x01)b|=1<<2;
|
||
if(report[2]&0x01)b|=1<<3;
|
||
if(report[3]&0x04)b|=1<<4;
|
||
if(report[2]&0x40)b|=1<<5;
|
||
if(report[2]&0x20)b|=1<<6;
|
||
if(report[2]&0x10)b|=1<<7;
|
||
if(report[2]&0x80)b|=1<<8;
|
||
if(report[3]&0x02)b|=1<<9;
|
||
if(report[3]&0x10)b|=1<<10;
|
||
if(report[3]&0x20)b|=1<<11;
|
||
if(report[3]&0x80)b|=1<<12;
|
||
if(report[3]&0x40)b|=1<<13;
|
||
if(report[3]&0x01)b|=1<<14;
|
||
nunstruct[n].ax=report[6];
|
||
nunstruct[n].ay=report[7];
|
||
nunstruct[n].Z=report[8];
|
||
nunstruct[n].C=report[9];
|
||
nunstruct[n].L=report[18];
|
||
nunstruct[n].R=report[19];
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}
|
||
void process_sony_ds4(uint8_t const* report, uint16_t len, uint8_t n)
|
||
{
|
||
//const char* dpad_str[] = { "N", "NE", "E", "SE", "S", "SW", "W", "NW", "none" };
|
||
|
||
// previous report used to compare for changes
|
||
|
||
uint8_t const report_id = report[0];
|
||
report++;
|
||
len--;
|
||
|
||
// all buttons state is stored in ID 1
|
||
if (report_id == 1)
|
||
{
|
||
sony_ds4_report_t ds4_report;
|
||
memcpy(&ds4_report, report, sizeof(ds4_report));
|
||
nunstruct[n].type=PS4;
|
||
uint16_t b=0;
|
||
if (ds4_report.r1 )b|=1;
|
||
if (ds4_report.option )b|=1<<1;
|
||
if (ds4_report.ps )b|=1<<2;
|
||
if (ds4_report.share )b|=1<<3;
|
||
if (ds4_report.l1 )b|=1<<4;
|
||
if( ds4_report.dpad==5 )b|=1<<5;
|
||
if( ds4_report.dpad==3 )b|=3<<5;
|
||
if( ds4_report.dpad==2 )b|=1<<6;
|
||
if( ds4_report.dpad==1 )b|=3<<6;
|
||
if( ds4_report.dpad==0 )b|=1<<7;
|
||
if( ds4_report.dpad==6 )b|=1<<8;
|
||
if( ds4_report.dpad==7 )b|=((1<<8) |(1<<5));
|
||
if (ds4_report.r2 )b|=1<<9;
|
||
if (ds4_report.triangle )b|=1<<10;
|
||
if (ds4_report.circle )b|=1<<11;
|
||
if (ds4_report.square )b|=1<<12;
|
||
if (ds4_report.cross )b|=1<<13;
|
||
if (ds4_report.l2 )b|=1<<14;
|
||
if (ds4_report.tpad )b|=1<<15;
|
||
if( ds4_report.dpad==4 )b|=1<<5;
|
||
nunstruct[n].ax=ds4_report.x;
|
||
nunstruct[n].ay=ds4_report.y;
|
||
nunstruct[n].Z=ds4_report.z;
|
||
nunstruct[n].C=ds4_report.rz;
|
||
nunstruct[n].L=ds4_report.l2_trigger;
|
||
nunstruct[n].R=ds4_report.r2_trigger;
|
||
memcpy((void *)nunstruct[n].gyro, ds4_report.gyro, 6*sizeof(uint16_t));
|
||
if((b ^ nunstruct[n].x0) & nunstruct[n].x1){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=b;
|
||
}
|
||
}
|
||
void hid_app_task(void)
|
||
{
|
||
static uint64_t timer;
|
||
uint64_t timenow=time_us_64();
|
||
if(!USBenabled)return;
|
||
if(KeyDown[0] && keytimer>repeattime){
|
||
uint8_t c = KeyDown[0];
|
||
if (!(c == 0 || c==PDOWN || c==PUP || c==CTRLKEY('P') || c==CTRLKEY('L') || c==25 || c==F5 || c==F4 || c==CTRLKEY('T')/* || (markmode && (c==DEL || c==CTRLKEY(']')))*/))
|
||
{
|
||
USR_KEYBRD_ProcessData(c);
|
||
}
|
||
// if(c==PDOWN || c==PUP || c==CTRLKEY('P') || c==CTRLKEY('L') || c==25 || c==F5 || c==F4 || c==CTRLKEY('T')/* || (markmode && (c==DEL || c==CTRLKEY(']')))*/)mmemset(&last_k_info,0,sizeof(HID_KEYBD_Info_TypeDef));
|
||
keytimer=0;
|
||
repeattime=Option.RepeatRate;
|
||
}
|
||
for(int i=0;i<4;i++){
|
||
if(HID[i].active==false || HID[i].report_requested)continue;
|
||
if(HID[i].report_timer>=HID[i].report_rate){
|
||
if(HID[i].Device_type==HID_ITF_PROTOCOL_KEYBOARD && HID[i].notfirsttime==0){
|
||
HID[i].notfirsttime=1;
|
||
tuh_hid_set_report(HID[i].Device_address, HID[i].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[i].sendlights,1);
|
||
|
||
}
|
||
HID[i].report_requested=true;
|
||
if ( !tuh_hid_receive_report(HID[i].Device_address, HID[i].Device_instance) )
|
||
{
|
||
MMPrintString("Warning USB failure on channel ");PInt(i+1);MMPrintString("\r\n> ");
|
||
HID[i].active=false;
|
||
}
|
||
|
||
}
|
||
if(HID[i].Device_type==PS4 && timenow-timer>50000){
|
||
timer=timenow;
|
||
sony_ds4_output_report_t output_report = {0};
|
||
output_report.set_rumble = 1;
|
||
output_report.motor_left = HID[i].motorleft;
|
||
output_report.motor_right = HID[i].motorright;
|
||
output_report.set_led = 1;
|
||
output_report.lightbar_red=HID[i].r;
|
||
output_report.lightbar_blue=HID[i].b;
|
||
output_report.lightbar_green=HID[i].g;
|
||
tuh_hid_send_report(HID[i].Device_address, HID[i].Device_instance, 5, &output_report, sizeof(output_report));
|
||
}
|
||
}
|
||
|
||
}
|
||
//--------------------------------------------------------------------+
|
||
// TinyUSB Callbacks
|
||
//--------------------------------------------------------------------+
|
||
|
||
// Invoked when device with hid interface is mounted
|
||
// Report descriptor is also available for use. tuh_hid_parse_report_descriptor()
|
||
// can be used to parse common/simple enough descriptor.
|
||
// Note: if report descriptor length > CFG_TUH_ENUMERATION_BUFSIZE, it will be skipped
|
||
// therefore report_desc = NULL, desc_len = 0
|
||
int FindFreeSlot(uint8_t itf_protocol){
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_KEYBOARD && !HID[0].active) return 0;
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_MOUSE && !HID[1].active) return 1;
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_NONE){
|
||
if(!HID[2].active) return 2;
|
||
if(!HID[3].active) return 3;
|
||
}
|
||
for(int i=3;i>=0;i--){
|
||
if(!HID[i].active)return i;
|
||
}
|
||
return -1;
|
||
}
|
||
//static struct
|
||
//{
|
||
// uint8_t report_count;
|
||
// tuh_hid_report_info_t report_info[MAX_REPORT];
|
||
//}hid_info[CFG_TUH_HID];
|
||
|
||
void tuh_hid_mount_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* desc_report, uint16_t desc_len)
|
||
{
|
||
__dsb();
|
||
uint16_t pid,vid;
|
||
uint8_t itf_protocol = tuh_hid_interface_protocol(dev_addr, instance);
|
||
// PInt(itf_protocol);
|
||
tuh_vid_pid_get(dev_addr, &vid, &pid);
|
||
int slot=FindFreeSlot(itf_protocol);
|
||
if(slot==-1)error("USB device limit reached");
|
||
HID[slot].vid=vid;
|
||
HID[slot].pid=pid;
|
||
// char buff[STRINGSIZE];
|
||
// PIntHC(vid);PIntHC(pid);PRet();
|
||
// sprintf(buff,"HID device address = %d, instance = %d is mounted\r\n", dev_addr, instance);
|
||
/* Start HID Interface */
|
||
if(Option.USBKeyboard==CONFIG_UK)keylayout=UKkeyValue;
|
||
else if(Option.USBKeyboard==CONFIG_US)keylayout=USkeyValue;
|
||
else if(Option.USBKeyboard==CONFIG_GR)keylayout=DEkeyValue;
|
||
else if(Option.USBKeyboard==CONFIG_FR)keylayout=FRkeyValue;
|
||
else if(Option.USBKeyboard==CONFIG_ES)keylayout=ESkeyValue;
|
||
else if(Option.USBKeyboard==CONFIG_BE)keylayout=BEkeyValue;
|
||
if(Current_USB_devices==4)error("USB device limit reached");
|
||
|
||
// Interface protocol (hid_interface_protocol_enum_t)
|
||
// const char* protocol_str[] = { "None", "Keyboard", "Mouse" };
|
||
|
||
// sprintf(buff,"HID Interface Protocol = %s\r\n", protocol_str[itf_protocol]);
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_KEYBOARD )
|
||
{
|
||
// char buff[128];
|
||
// hid_info[instance].report_count = tuh_hid_parse_report_descriptor(hid_info[instance].report_info, MAX_REPORT, desc_report, desc_len);
|
||
// sprintf(buff,"HID has %u reports \r\n", hid_info[instance].report_count);
|
||
// MMPrintString(buff);
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].Device_type=HID_ITF_PROTOCOL_KEYBOARD;
|
||
caps_lock=Option.capslock;
|
||
num_lock=Option.numlock;
|
||
if(num_lock) HID[slot].sendlights|=(uint8_t)1;
|
||
if(caps_lock) HID[slot].sendlights|=(uint8_t)2;
|
||
HID[slot].report_rate=20; //mSec between report
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
if(!CurrentLinePtr) {
|
||
MMPrintString((char *)KBrdList[(int)Option.USBKeyboard]);
|
||
MMPrintString(" USB Keyboard Connected on channel ");
|
||
PInt(slot+1);
|
||
MMPrintString("\r\n> ");
|
||
}
|
||
// tuh_hid_set_report(HID[slot].Device_address, HID[slot].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
Current_USB_devices++;
|
||
return;
|
||
}
|
||
// By default host stack will use activate boot protocol on supported interface.
|
||
// Therefore for this simple example, we only need to parse generic report descriptor (with built-in parser)
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_MOUSE )
|
||
{
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].Device_type=HID_ITF_PROTOCOL_MOUSE;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
if(!CurrentLinePtr) {MMPrintString("USB Mouse Connected on channel ");PInt(slot+1);MMPrintString("\r\n> ");}
|
||
// tuh_hid_send_report(HID[slot].Device_address, HID[slot].Device_instance,5,mode, sizeof(mode));
|
||
// tuh_hid_set_report(HID[slot].Device_address, HID[slot].Device_instance, 0, HID_REPORT_TYPE_INPUT, mode, sizeof(mode));
|
||
Current_USB_devices++;
|
||
return;
|
||
}
|
||
if ( itf_protocol == HID_ITF_PROTOCOL_NONE )
|
||
{
|
||
// hid_info[instance].report_count = tuh_hid_parse_report_descriptor(hid_info[instance].report_info, MAX_REPORT, desc_report, desc_len);
|
||
// Sony DualShock 4 [CUH-ZCT2x]
|
||
if ( is_sony_ds4(dev_addr) )
|
||
{
|
||
if(!CurrentLinePtr) {MMPrintString("PS4 Controller Connected on channel ");PInt(slot+1);MMPrintString("\r\n> ");}
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].Device_type=PS4;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
HID[slot].motorleft=0;
|
||
HID[slot].motorright=0;
|
||
}
|
||
else if ( is_sony_ds3(dev_addr) )
|
||
{
|
||
if(!CurrentLinePtr) {MMPrintString("PS3 Controller Connected on channel ");PInt(slot+1);MMPrintString("\r\n> ");}
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].Device_type=PS3;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
}
|
||
else if ( is_xbox(dev_addr) )
|
||
{
|
||
if(!CurrentLinePtr) {
|
||
MMPrintString("XBox Controller Connected on channel ");PInt(slot+1);
|
||
MMPrintString(" (pid=&H");PIntH(pid);
|
||
MMPrintString(", vid=&H");PIntH(vid);MMPrintString(")");
|
||
MMPrintString("\r\n> ");
|
||
}
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].Device_type=XBOX;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
} else if ( is_generic(dev_addr) ) {
|
||
if(!CurrentLinePtr || monitor) {MMPrintString("Generic Gamepad Connected on channel ");PInt(slot+1);}
|
||
if(!CurrentLinePtr)MMPrintString("\r\n> ");
|
||
else PRet();
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=false;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].Device_type=SNES;
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;
|
||
} else {
|
||
/* MMPrintString("Unknown Device Connected on channel ");PInt(slot+1);
|
||
MMPrintString(" (pid=&H");PIntH(pid);
|
||
MMPrintString(", vid=&H");PIntH(vid);MMPrintString(")");
|
||
MMPrintString("\r\n> ");
|
||
HID[slot].Device_address = dev_addr;
|
||
HID[slot].Device_instance = instance;
|
||
HID[slot].report_timer=-(10+(slot+2)*500);
|
||
HID[slot].active=false;
|
||
HID[slot].report_rate=20; //mSec between reports
|
||
HID[slot].Device_type=UNKNOWN;
|
||
HID[slot].active=true;
|
||
HID[slot].report_requested=false;*/
|
||
/* for(int i=0;i< desc_len;i+=2){
|
||
putConsole('0',0);
|
||
putConsole('x',0);
|
||
PIntH(desc_report[i]);
|
||
putConsole(' ',0);
|
||
putConsole('0',0);
|
||
putConsole('x',0);
|
||
PIntH(desc_report[i+1]);
|
||
PRet();
|
||
}*/
|
||
return;
|
||
}
|
||
}
|
||
Current_USB_devices++;
|
||
}
|
||
|
||
// Invoked when device with hid interface is un-mounted
|
||
void tuh_hid_umount_cb(uint8_t dev_addr, uint8_t instance)
|
||
{
|
||
__dsb();
|
||
int i;
|
||
for(i=0;i<4;i++){
|
||
// PInt(i);PIntHC(HID[i].Device_type);PRet();
|
||
if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==HID_ITF_PROTOCOL_KEYBOARD){
|
||
if(!CurrentLinePtr) MMPrintString("USB Keyboard Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==HID_ITF_PROTOCOL_MOUSE){
|
||
if(!CurrentLinePtr) MMPrintString("USB Mouse Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==PS4){
|
||
if(!CurrentLinePtr) MMPrintString("PS4 Controller Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==PS3){
|
||
if(!CurrentLinePtr) MMPrintString("PS3 Controller Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==XBOX){
|
||
if(!CurrentLinePtr) MMPrintString("XBox Controller Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==SNES){
|
||
if(!CurrentLinePtr) MMPrintString("Generic Gamepad Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
else if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address && HID[i].Device_type==UNKNOWN){
|
||
if(!CurrentLinePtr) MMPrintString("Unknown Device Disconnected\r\n> ");
|
||
break;
|
||
}
|
||
}
|
||
memset((void *)&HID[i],0,sizeof(struct s_HID));
|
||
HID[i].report_requested=true;
|
||
Current_USB_devices--;
|
||
// sprintf(buff,"HID device address = %d, instance = %d is unmounted\r\n", dev_addr, instance);
|
||
}
|
||
// Invoked when received report from device via interrupt endpoint
|
||
void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t const* report, uint16_t len)
|
||
{
|
||
__dsb();
|
||
uint8_t n=255;
|
||
uint8_t const itf_protocol = tuh_hid_interface_protocol(dev_addr, instance);
|
||
for(int i=0;i<4;i++)if(instance==HID[i].Device_instance && dev_addr==HID[i].Device_address){
|
||
n=i;
|
||
break;
|
||
}
|
||
memcpy((void *)&HID[n].report[1],report,(len > 64 ? 64: len));
|
||
HID[n].report[0]=(len > 64 ? 64: len);
|
||
switch (itf_protocol)
|
||
{
|
||
case HID_ITF_PROTOCOL_KEYBOARD:
|
||
// MMPrintString("HID receive boot keyboard report\r\n");
|
||
process_kbd_report( (hid_keyboard_report_t const*) report ,n);
|
||
break;
|
||
|
||
case HID_ITF_PROTOCOL_MOUSE:
|
||
// MMPrintString("HID receive boot mouse report\r\n");
|
||
// PInt(report[0]);
|
||
// for (int i=1;i<len;i++)PIntHC(report[i]);
|
||
// PRet();
|
||
process_mouse_report( (hid_mouse_report_t const*) report, n+1);
|
||
break;
|
||
|
||
default:
|
||
// MMPrintString("HID receive boot gamepad report\r\n");
|
||
if ( is_sony_ds4(dev_addr) ){
|
||
process_sony_ds4(report, len, n+1);
|
||
} else if ( is_sony_ds3(dev_addr) ){
|
||
process_sony_ds3(report, len, n+1);
|
||
} else if ( is_xbox(dev_addr) ){
|
||
process_xbox(report, len, n+1);
|
||
/* } else if ( is_specific(dev_addr) ){
|
||
process_specific_gamepad(report, len, n+1);*/
|
||
} else {
|
||
process_generic_gamepad(report, len, n+1);
|
||
}
|
||
}
|
||
HID[n].report_requested=false;
|
||
HID[n].report_timer=0;
|
||
}
|
||
|
||
//--------------------------------------------------------------------+
|
||
// Keyboard
|
||
//--------------------------------------------------------------------+
|
||
uint8_t APP_MapKeyToUsage(uint8_t *report, int keyno, int modifier)
|
||
{
|
||
uint8_t keyCode=report[keyno];
|
||
if(keyCode == USB_HID_KEYBOARD_KEYPAD_KEYBOARD_CAPS_LOCK
|
||
|| keyCode == USB_HID_KEYBOARD_KEYPAD_KEYBOARD_SCROLL_LOCK
|
||
|| keyCode == USB_HID_KEYBOARD_KEYPAD_KEYPAD_NUM_LOCK_AND_CLEAR) return 0;
|
||
|
||
if(keyCode >= USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A && keyCode <= USB_HID_KEYBOARD_KEYPAD_KEYBOARD_NON_US_FORWARD_SLASH_AND_PIPE)
|
||
{
|
||
if((modifier & KEYBOARD_MODIFIER_RIGHTALT) && Option.USBKeyboard==CONFIG_GR){
|
||
if(keyCode==0x24)return 0x7B;
|
||
else if(keyCode==0x25)return 0x5B;
|
||
else if(keyCode==0x26)return 0x5D;
|
||
else if(keyCode==0x27)return 0x7D;
|
||
else if(keyCode==0x2D)return 0x5C;
|
||
else if(keyCode==0x14)return 0x40;
|
||
else if(keyCode==0x64)return 124;
|
||
else if(keyCode==0x30)return 126; // 48 ~
|
||
}
|
||
if((modifier & KEYBOARD_MODIFIER_RIGHTALT) && Option.USBKeyboard==CONFIG_FR){
|
||
if(keyCode==0x1F) return 126;// ~
|
||
else if(keyCode==0x20)return 35; // #
|
||
else if(keyCode==0x21)return 123;// {
|
||
else if(keyCode==0x22)return 91; // [
|
||
else if(keyCode==0x23)return 124;// |
|
||
else if(keyCode==0x24)return 96 ;// `
|
||
else if(keyCode==0x25)return 92; // '\'
|
||
else if(keyCode==0x26)return 94; // ^
|
||
else if(keyCode==0x27)return 64; // @
|
||
else if(keyCode==0x2D)return 93; // ]
|
||
else if(keyCode==0x2E)return 125;// }
|
||
}
|
||
if((modifier & KEYBOARD_MODIFIER_RIGHTALT) && Option.USBKeyboard == CONFIG_ES){
|
||
if(keyCode==0x35) return 92; // backslash
|
||
else if(keyCode==0x1E)return 124; // |
|
||
else if(keyCode==0x08)return 0; // €
|
||
else if(keyCode==0x1F)return 64; // @
|
||
else if(keyCode==0x20)return 35; // #
|
||
else if(keyCode==0x21)return 0; // ~
|
||
else if(keyCode==0x2F)return 91; // [
|
||
else if(keyCode==0x30)return 93; // ]
|
||
else if(keyCode==0x31)return 125; // }
|
||
else if(keyCode==0x34)return 123; // {
|
||
}
|
||
if((modifier & KEYBOARD_MODIFIER_RIGHTALT) && Option.USBKeyboard == CONFIG_BE){
|
||
if(keyCode==0x64) return 92; // backslash
|
||
else if(keyCode==0x20)return 35; // |
|
||
else if(keyCode==0x2F)return 91; // €
|
||
else if(keyCode==0x30)return 93; // @
|
||
else if(keyCode==0x31)return 96; // #
|
||
else if(keyCode==0x34)return 39; // ~
|
||
else if(keyCode==0x38)return 126; // [
|
||
}
|
||
if(keyCode >= USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A && keyCode <= USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z && ((modifier & KEYBOARD_MODIFIER_LEFTCTRL) || (modifier & KEYBOARD_MODIFIER_RIGHTCTRL))) //Ctrl Key pressed for normal alpha key
|
||
{
|
||
return (keylayout[keyCode<<1]-96);
|
||
}
|
||
if(keyCode >=USB_HID_KEYBOARD_KEYPAD_KEYPAD_BACK_SLASH && keyCode<=USB_HID_KEYBOARD_KEYPAD_KEYPAD_PERIOD_AND_DELETE) //Key pressed on the numeric keypad
|
||
{
|
||
if(num_lock)return (keylayout[keyCode<<1]);
|
||
else return (keylayout[(keyCode<<1)+1]);
|
||
}
|
||
if(keyCode >=USB_HID_KEYBOARD_KEYPAD_KEYBOARD_A && keyCode<=USB_HID_KEYBOARD_KEYPAD_KEYBOARD_Z) //Alpha key pressed
|
||
{
|
||
int toggle=1;
|
||
if(caps_lock)toggle=!toggle;
|
||
if((modifier & KEYBOARD_MODIFIER_LEFTSHIFT) || (modifier & KEYBOARD_MODIFIER_RIGHTSHIFT))toggle=!toggle;
|
||
if(toggle)return (keylayout[keyCode<<1]);
|
||
else return (keylayout[(keyCode<<1)+1]);
|
||
} else { //remaining keys
|
||
if(!((modifier & KEYBOARD_MODIFIER_LEFTSHIFT) || (modifier & KEYBOARD_MODIFIER_RIGHTSHIFT)))return (keylayout[keyCode<<1]);
|
||
else return (keylayout[(keyCode<<1)+1]);
|
||
}
|
||
|
||
}
|
||
return 0;
|
||
}
|
||
void USR_KEYBRD_ProcessData(uint8_t data)
|
||
{
|
||
int sendCRLF=2;
|
||
if(data==0)return;
|
||
if (BreakKey && data == BreakKey)
|
||
{ // if the user wants to stop the progran
|
||
MMAbort = true; // set the flag for the interpreter to see
|
||
ConsoleRxBufHead = ConsoleRxBufTail; // empty the buffer
|
||
// break;
|
||
}
|
||
if(data=='\n'){
|
||
if(sendCRLF==3)USR_KEYBRD_ProcessData('\r');
|
||
if(sendCRLF==2)data='\r';
|
||
}
|
||
if(data==keyselect && KeyInterrupt!=NULL){
|
||
Keycomplete=1;
|
||
return;
|
||
}
|
||
ConsoleRxBuf[ConsoleRxBufHead] = data; // store the byte in the ring buffer
|
||
if(BreakKey && ConsoleRxBuf[ConsoleRxBufHead] == BreakKey) {// if the user wants to stop the progran
|
||
MMAbort = true; // set the flag for the interpreter to see
|
||
ConsoleRxBufHead = ConsoleRxBufTail; // empty the buffer
|
||
return;
|
||
}
|
||
ConsoleRxBufHead = (ConsoleRxBufHead + 1) % CONSOLE_RX_BUF_SIZE; // advance the head of the queue
|
||
if(ConsoleRxBufHead == ConsoleRxBufTail) { // if the buffer has overflowed
|
||
ConsoleRxBufTail = (ConsoleRxBufTail + 1) % CONSOLE_RX_BUF_SIZE; // throw away the oldest char
|
||
}
|
||
}
|
||
|
||
static void process_kbd_report(hid_keyboard_report_t const *report, uint8_t n)
|
||
{
|
||
static uint8_t prev_keys[6] = {0}; // previous report to check key released
|
||
int total=0;
|
||
static int lasttotal=0;
|
||
uint8_t current_keys[6]={0};
|
||
int modifier=report->modifier;
|
||
for(int i=0;i<6;i++){
|
||
if(report->keycode[i])total++;
|
||
}
|
||
if(total==0)lasttotal=0;
|
||
for(int i=0;i<total;i++)current_keys[i]=report->keycode[total-i-1];
|
||
//------------- example code ignore control (non-printable) key affects -------------//
|
||
if(((keytimer>Option.RepeatStart || current_keys[0]!=prev_keys[0]) && total>=lasttotal)){
|
||
keytimer=0;
|
||
// not existed in previous report means the current key is pressed
|
||
// bool const is_shift = report->modifier & (KEYBOARD_MODIFIER_LEFTSHIFT | KEYBOARD_MODIFIER_RIGHTSHIFT);
|
||
if(current_keys[0]==0x39){
|
||
if(caps_lock){
|
||
HID[n].sendlights&=~(uint8_t)2;
|
||
caps_lock=0;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
} else {
|
||
HID[n].sendlights|=0x02;
|
||
caps_lock=1;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
}
|
||
} else if(current_keys[0]==0x53){
|
||
if(num_lock){
|
||
HID[n].sendlights&=~(uint8_t)1;
|
||
num_lock=0;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
} else {
|
||
HID[n].sendlights|=0x01;
|
||
num_lock=1;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
}
|
||
} else if(current_keys[0]==0x47){
|
||
if(scroll_lock){
|
||
HID[n].sendlights&=~(uint8_t)4;
|
||
scroll_lock=0;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
} else {
|
||
HID[n].sendlights|=0x04;
|
||
scroll_lock=1;
|
||
tuh_hid_set_report(HID[n].Device_address, HID[n].Device_instance, 0, HID_REPORT_TYPE_OUTPUT, (void *)&HID[n].sendlights,1);
|
||
}
|
||
} else {
|
||
uint8_t c = APP_MapKeyToUsage(current_keys,0, modifier);
|
||
if (c != 0)
|
||
{
|
||
USR_KEYBRD_ProcessData(c);
|
||
repeattime=Option.RepeatStart;
|
||
}
|
||
}
|
||
memcpy(prev_keys ,current_keys, sizeof(prev_keys));
|
||
}
|
||
lasttotal=total;
|
||
for(int i=0;i<6;i++){
|
||
uint8_t c = APP_MapKeyToUsage(current_keys, i, modifier);
|
||
if (c != 0) KeyDown[i]=c;
|
||
else KeyDown[i]=0;
|
||
}
|
||
KeyDown[6]=(modifier & KEYBOARD_MODIFIER_LEFTALT ? 1: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_LEFTCTRL ? 2: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_LEFTGUI ? 4: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_LEFTSHIFT ? 8: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_RIGHTALT ? 16: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_RIGHTCTRL ? 32: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_RIGHTGUI ? 64: 0) |
|
||
(modifier & KEYBOARD_MODIFIER_RIGHTSHIFT ? 128: 0);
|
||
}
|
||
|
||
//--------------------------------------------------------------------+
|
||
// Mouse
|
||
//--------------------------------------------------------------------+
|
||
|
||
void cursor_movement(int8_t x, int8_t y, int8_t wheel)
|
||
{
|
||
#if USE_ANSI_ESCAPE
|
||
// Move X using ansi escape
|
||
if ( x < 0)
|
||
{
|
||
sprintf(buff,ANSI_CURSOR_BACKWARD(%d), (-x)); // move left
|
||
}else if ( x > 0)
|
||
{
|
||
sprintf(buff,ANSI_CURSOR_FORWARD(%d), x); // move right
|
||
}
|
||
|
||
// Move Y using ansi escape
|
||
if ( y < 0)
|
||
{
|
||
sprintf(buff,ANSI_CURSOR_UP(%d), (-y)); // move up
|
||
}else if ( y > 0)
|
||
{
|
||
sprintf(buff,ANSI_CURSOR_DOWN(%d), y); // move down
|
||
}
|
||
|
||
// Scroll using ansi escape
|
||
if (wheel < 0)
|
||
{
|
||
sprintf(buff,ANSI_SCROLL_UP(%d), (-wheel)); // scroll up
|
||
}else if (wheel > 0)
|
||
{
|
||
sprintf(buff,ANSI_SCROLL_DOWN(%d), wheel); // scroll down
|
||
}
|
||
|
||
sprintf(buff,"\r\n");
|
||
#else
|
||
char buff[STRINGSIZE];
|
||
sprintf(buff,"(%d %d %d)\r\n", x, y, wheel);
|
||
#endif
|
||
}
|
||
|
||
static void process_mouse_report(hid_mouse_report_t const * report, uint8_t n)
|
||
{
|
||
/* if(checkstring(argv[2], (unsigned char *)"X"))iret=nunstruct[n].ax;
|
||
else if(checkstring(argv[2], (unsigned char *)"Y"))iret=nunstruct[n].ay;
|
||
else if(checkstring(argv[2], (unsigned char *)"L"))iret=nunstruct[n].L;
|
||
else if(checkstring(argv[2], (unsigned char *)"R"))iret=nunstruct[n].R;
|
||
else if(checkstring(argv[2], (unsigned char *)"W"))iret=nunstruct[n].az;
|
||
else if(checkstring(argv[2], (unsigned char *)"D"))iret=nunstruct[n].Z;*/
|
||
|
||
//------------- button state -------------//
|
||
|
||
static uint64_t leftpress=0;
|
||
static uint8_t leftstate=0;
|
||
if(HID[n-1].pid==0x2814 && HID[n-1].vid==0x406){
|
||
uint8_t *p=(uint8_t *)report;
|
||
p++;
|
||
report=(hid_mouse_report_t *)p;
|
||
}
|
||
uint64_t timenow=time_us_64();
|
||
if(timenow-leftpress>500000){
|
||
leftstate=0;
|
||
nunstruct[n].Z=0;
|
||
}
|
||
if(leftstate==0 && (report->buttons & MOUSE_BUTTON_LEFT)){
|
||
leftpress=timenow;
|
||
leftstate=1;
|
||
}
|
||
if(leftstate==1 && !(report->buttons & MOUSE_BUTTON_LEFT)){ //
|
||
leftpress=timenow;
|
||
leftstate=2;
|
||
}
|
||
if(leftstate==2 && (report->buttons & MOUSE_BUTTON_LEFT)){ //second press within 500mSec
|
||
if(timenow-leftpress>100000){
|
||
leftpress=timenow;
|
||
leftstate=3;
|
||
nunstruct[n].Z=1;
|
||
nunfoundc[n]=1;
|
||
} else {
|
||
leftstate=0;
|
||
}
|
||
|
||
}
|
||
nunstruct[n].L=report->buttons & MOUSE_BUTTON_LEFT ? 1 : 0;
|
||
nunstruct[n].R=report->buttons & MOUSE_BUTTON_RIGHT ? 1 : 0;
|
||
nunstruct[n].C=report->buttons & MOUSE_BUTTON_MIDDLE ? 1 : 0;
|
||
nunstruct[n].ax+=report->x/2;
|
||
if(nunstruct[n].ax>=HRes)nunstruct[n].ax=HRes-1;
|
||
if(nunstruct[n].ax<0)nunstruct[n].ax=0;
|
||
nunstruct[n].ay+=report->y/2;
|
||
if(nunstruct[n].ay>=VRes)nunstruct[n].ay=VRes-1;
|
||
if(nunstruct[n].ay<0)nunstruct[n].ay=0;
|
||
nunstruct[n].az+=report->wheel;
|
||
if(nunstruct[n].x0!=(report->buttons & 0b111)){
|
||
nunfoundc[n]=1;
|
||
}
|
||
nunstruct[n].x0=report->buttons & 0b111;
|
||
nunstruct[n].x1=nunstruct[n].ax/(FontTable[gui_font >> 4][0] * (gui_font & 0b1111));
|
||
nunstruct[n].y1=nunstruct[n].ay/(FontTable[gui_font >> 4][1] * (gui_font & 0b1111));
|
||
}
|
||
|
||
//------------- cursor movement -------------//
|
||
// cursor_movement(report->x, report->y, report->wheel);
|
||
//}
|
||
/* @endcond */
|
||
|
||
void cmd_gamepad(void){
|
||
unsigned char *tp=NULL;
|
||
int n;
|
||
if((tp=checkstring(cmdline,(unsigned char *)"INTERRUPT ENABLE"))){
|
||
getargs(&tp,5,(unsigned char *)",");
|
||
if(!(argc==3 || argc==5))error("Syntax");
|
||
n=getint(argv[0],1,4);
|
||
nunInterruptc[n] = (char *)GetIntAddress(argv[2]); // get the interrupt location
|
||
InterruptUsed = true;
|
||
nunstruct[n].x1=0b1111111111111111;
|
||
if(argc==5)nunstruct[n].x1=getint(argv[4],0,0b1111111111111111);
|
||
return;
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"MONITOR SILENT"))){
|
||
monitor=true;
|
||
nooutput=true;
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"MONITOR"))){
|
||
monitor=true;
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"CONFIGURE"))){
|
||
getargs(&tp,67,(unsigned char *)",");
|
||
if(!(argc==67))error("Syntax");
|
||
MyGamepad.vid=getint(argv[0],0,0xFFFF);
|
||
MyGamepad.pid=getint(argv[2],0,0xFFFF);
|
||
MyGamepad.b_R.index=getint(argv[4],0,255);
|
||
MyGamepad.b_R.code=getint(argv[6],0,255);
|
||
MyGamepad.b_START.index=getint(argv[8],0,255);
|
||
MyGamepad.b_START.code=getint(argv[10],0,255);
|
||
MyGamepad.b_HOME.index=getint(argv[12],0,255);
|
||
MyGamepad.b_HOME.code=getint(argv[14],0,255);
|
||
MyGamepad.b_SELECT.index=getint(argv[16],0,255);
|
||
MyGamepad.b_SELECT.code=getint(argv[18],0,255);
|
||
MyGamepad.b_L.index=getint(argv[20],0,255);
|
||
MyGamepad.b_L.code=getint(argv[22],0,255);
|
||
MyGamepad.b_DOWN.index=getint(argv[24],0,255);
|
||
MyGamepad.b_DOWN.code=getint(argv[26],0,255);
|
||
MyGamepad.b_RIGHT.index=getint(argv[28],0,255);
|
||
MyGamepad.b_RIGHT.code=getint(argv[30],0,255);
|
||
MyGamepad.b_UP.index=getint(argv[32],0,255);
|
||
MyGamepad.b_UP.code=getint(argv[34],0,255);
|
||
MyGamepad.b_LEFT.index=getint(argv[36],0,255);
|
||
MyGamepad.b_LEFT.code=getint(argv[38],0,255);
|
||
MyGamepad.b_R2.index=getint(argv[40],0,255);
|
||
MyGamepad.b_R2.code=getint(argv[42],0,255);
|
||
MyGamepad.b_X.index=getint(argv[44],0,255);
|
||
MyGamepad.b_X.code=getint(argv[46],0,255);
|
||
MyGamepad.b_A.index=getint(argv[48],0,255);
|
||
MyGamepad.b_A.code=getint(argv[50],0,255);
|
||
MyGamepad.b_Y.index=getint(argv[52],0,255);
|
||
MyGamepad.b_Y.code=getint(argv[54],0,255);
|
||
MyGamepad.b_B.index=getint(argv[56],0,255);
|
||
MyGamepad.b_B.code=getint(argv[58],0,255);
|
||
MyGamepad.b_L2.index=getint(argv[60],0,255);
|
||
MyGamepad.b_L2.code=getint(argv[62],0,255);
|
||
MyGamepad.b_TOUCH.index=getint(argv[64],0,255);
|
||
MyGamepad.b_TOUCH.code=getint(argv[66],0,255);
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"HAPTIC"))){
|
||
getargs(&tp,5,(unsigned char *)",");
|
||
if(!(argc==5))error("Syntax");
|
||
n=getint(argv[0],1,4)-1;
|
||
if(HID[n].Device_type!=PS4)error("PS4 only");
|
||
HID[n].motorleft=getint(argv[2],0,255);
|
||
HID[n].motorright=getint(argv[4],0,255);
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"COLOUR"))){
|
||
getargs(&tp,3,(unsigned char *)",");
|
||
if(!(argc==3))error("Syntax");
|
||
n=getint(argv[0],1,4)-1;
|
||
if(HID[n].Device_type!=PS4)error("PS4 only");
|
||
int colour=getint(argv[2],0,0xFFFFFF);
|
||
HID[n].r=colour>>16;
|
||
HID[n].g=(colour>>8) & 0xff;
|
||
HID[n].b=colour & 0xff;
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"INTERRUPT DISABLE"))){
|
||
getargs(&tp,1,(unsigned char *)",");
|
||
n=getint(argv[0],1,4);
|
||
nunInterruptc[n]=NULL;
|
||
} else error("Syntax");
|
||
}
|
||
void cmd_mouse(void){
|
||
unsigned char *tp=NULL;
|
||
int n;
|
||
if((tp=checkstring(cmdline,(unsigned char *)"INTERRUPT ENABLE"))){
|
||
getargs(&tp,3,(unsigned char *)",");
|
||
if(!(argc==3))error("Syntax");
|
||
n=getint(argv[0],1,4);
|
||
nunInterruptc[n] = (char *)GetIntAddress(argv[2]); // get the interrupt location
|
||
InterruptUsed = true;
|
||
return;
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"SET"))){
|
||
getargs(&tp,7,(unsigned char *)",");
|
||
if(!(argc==7 || argc==5))error("Syntax");
|
||
n=getint(argv[0],2,2);
|
||
nunstruct[n].ax=getint(argv[2],0,HRes-1);
|
||
nunstruct[n].ay=getint(argv[4],0,VRes-1);
|
||
if(argc==5)nunstruct[n].az=getint(argv[6],-128,127);
|
||
} else if((tp = checkstring(cmdline, (unsigned char *)"INTERRUPT DISABLE"))){
|
||
getargs(&tp,1,(unsigned char *)",");
|
||
n=getint(argv[0],1,4);
|
||
nunInterruptc[n]=NULL;
|
||
} else error("Syntax");
|
||
|
||
}
|