#pragma METAINFO("Gamepad 2 Mouse", 1, 07, "Scachi/J Koppe/G Law/B Ellis (SpecialEffect)")
// 29/7/2019
// Created for http://www.SpecialEffect.org.uk - PUBLIC DOMAINt3
// ConsoleTuner Forum Post: https://www.consoletuner.com/forum/viewtopic.php?f=26&t=13195
// Designed to convert a PS4/Xbox gamepad to Mouse use.
// N.B. Tick "Disable Joystick from Multi Interface HID output" in GTuner IV > Device Configuration > Device Options !!!!
// The controls are:
//**** MOUSE
// LEFT-STICK = MOUSE MOVEMENT , adjustable sensitivity with TOUCH/VIEW/BACK button
// RIGHT_STICK = MOUSE MOVEMENT , fixed sensitivity (index sensitivity_right_stick)
// CROSS/A = LEFT-CLICK
// CIRCLE/B = RIGHT-CLICK
// TRIANGLE/Y = DRAG ON/OFF
// SQUARE/X = AXIS LOCK (X-AXIS / Y-AXIS / FREE MOVEMENT)
// R2/RT = DOUBLE-LEFT-CLICK
//**** KEYBOARD
// DPAD = keyboard: cursor/arrow keys
// OPTION/START = Default: tap->keyboard: ALT+F4 (pulse), hold->keyboard: ESCAPE (hold)
// L2/LT = Default: tap->keyboard: RETURN (pulse), hold->keyboard: BACKSPACE (hold)
//**OTHER
// HOLD R1/RB + TAP HOME = CHANGE SLOT +1 (e.g. to Forced Xbox 360 Gamepad mode)
// HOLD L1/LB + TAP HOME = CHANGE SLOT -1
// HOLD (R1/RB + L1/LB) + TAP Home
LOAD "SLOT 0" (empty slot) |
// ADVANCED SLOT CONTROL : see section "Slot Control" in Interactive Configuration (default:off)
// Header file containing mouse related definitions
#include
// Header file containing keyboard related definitions
#include
// set some names for values the function TapOrHold returns
#define TAPORHOLD_TAP 1
#define TAPORHOLD_HOLD_ON 2
#define TAPORHOLD_HOLD_OFF 3
// THE INTERACTIVE CONFIGURATION DEFINITION IS LOCATED AT THE END OF THE SCRIPT
// Manual changes to the following CONFIGURATION SECTION in the code will have no effect
// Click the scripts slot "gear like" icon in "GTuner IV > Device Memory Slots" to access the Interactive Configuration
/**** CONFIGURATION SECTION START ****/
/**** LED ****/
// LED brightness
fix32 brightness=60f;
// known colors, use first letter: 'B'lue, 'R'ed, 'G'reen, 'P'urple, 'C'yan, 'Y'ellow, 'W'hite;
uint8 color_default = 'B'; // default color used
uint8 color_drag = 'R'; // color for active drag
//
// MOUSE SPEED VARIABLE(0.02 slowest speed)
fix32 sensitivities[] = {0.08,0.02, 0.00}; // always 3 values, set to 0.00 for not using one
// sensitivity_active uses first entry of sensitivities array as default, index 0 first value
uint8 sensitivity_active = 0;
// sensitivity index to use for right stick
fix32 sensitivity_right_stick;
/**** MOUSE ****/
// DEADZONE
fix32 deadzone = 20f;
//
// ALLOW USAGE OF DRAG
bool drag_allowed = TRUE;
//
// ALLOW LEFT_DOUBLE_CLICK
bool left_double_click_allowed = TRUE;
//
// ALLOW USAGE OF AXIS LOCKING
bool axis_lock_allowed = TRUE;
/**** KEYBOARD ****/
// ALLOW DPAP TO CURSOR
bool dpad_to_cursor_allowed = TRUE;
//
// TAP TIME LIMIT. In limit -> first action selected , longer hold -> second action as long as button is hold
uint16 btn2key_taplimit = 250;
//
// ALLOW USAGE OF keyboard KEY on OPTION/START
bool btn2key_OPTION_START_allowed = TRUE;
//
// ALLOW USAGE OF keyboard KEY on L2/LT
bool btn2key_L2_LT_allowed = TRUE;
//
// BUTTON 2 KEY : ASSIGNED KEYS AND MODIFIERS
uint8 btn2key_OPTION_START_key_pulse=KEY_F4; // OPTION/START: TAP KEY
uint8 btn2key_OPTION_START_key_pulse_mod=KEY_LEFTALT; // OPTION/START: TAP MODIFIER
uint8 btn2key_OPTION_START_key_hold=KEY_ESCAPE; // OPTION/START: HOLD KEY
uint8 btn2key_OPTION_START_key_hold_mod=0; // OPTION/START: HOLD MODIFIER
uint8 btn2key_L2_LT_key_pulse=KEY_RETURN; // L2/LT: TAP KEY
uint8 btn2key_L2_LT_key_hold=KEY_DELETEORBACKSPACE; // L2/LT: TAP MODIFIER
uint8 btn2key_L2_LT_key_pulse_mod=0; // L2/LT: HOLD KEY
uint8 btn2key_L2_LT_key_hold_mod=0; // L2/LT: HOLD MODIFIER
/**** Slot Control ****/
// BLOCK all use of SLOTCONTROL until NO ACTIVE INPUTS are found ONCE
// used to avoid switching mutliple slots on long hold of a button
bool slotcontrol_block=TRUE;
//
// TAP TIME LIMIT. In limit -> first action selected , longer hold -> second action selected
uint16 slotcontrol_taplimit = 250;
// ALLOW USAGE OF Slot Control on L1/LB
bool slotcontrol_L1_LB_allowed = FALSE;
// THE ACTION TO RUN ON TAP
uint8 slotcontrol_L1_LB_tap = 0;
// THE ACTION TO RUN ON HOLD
uint8 slotcontrol_L1_LB_hold = 0;
//
// ALLOW USAGE OF Slot Control on R1/RB
bool slotcontrol_R1_RB_allowed = FALSE;
// THE ACTION TO RUN ON TAP
uint8 slotcontrol_R1_RB_tap = 0;
// THE ACTION TO RUN ON HOLD
uint8 slotcontrol_R1_RB_hold = 0;
//
// ALLOW USAGE OF Slot Control on L3/LS
bool slotcontrol_L3_LS_allowed = FALSE;
// HOW MANY TIMES TO PRESS L3/LS
uint8 slotcontrol_L3_LS_times = 3;
// THE ACTION TO RUN
uint8 slotcontrol_L3_LS_selected = 0;
//
// ALLOW USAGE OF Slot Control on R3/RS
bool slotcontrol_R3_RS_allowed = FALSE;
// HOW MANY TIMES TO PRESS R3/RS
uint8 slotcontrol_R3_RS_times = 3;
// THE ACTION TO RUN
uint8 slotcontrol_R3_RS_selected = 0;
/**** CONFIGURATION SECTION END ****/
// Toggle variable for mouse left drag
bool drag_toggle;
// Toggle variable for axis lock. limit axis movement to: 0=x&y, 1=x, 2=y
uint8 axis_lock;
// Flag if at least one valid sensitivity value was found (no mouse movement when all are set to 0.0)
bool sensitivity_all_zero;
// Translate Interactive Configuration combobox selection key to T2 key ID
// the count of entries here and their position have to match the ones in the Interactive Configuration
uint8 comboboxbtn2key[] = {
0 , // none
KEY_A ,
KEY_B ,
KEY_C ,
KEY_D ,
KEY_E ,
KEY_F ,
KEY_G ,
KEY_H ,
KEY_I ,
KEY_J ,
KEY_K ,
KEY_L ,
KEY_M ,
KEY_N ,
KEY_O ,
KEY_P ,
KEY_Q ,
KEY_R ,
KEY_S ,
KEY_T ,
KEY_U ,
KEY_V ,
KEY_W ,
KEY_X ,
KEY_Y ,
KEY_Z ,
KEY_1 ,
KEY_2 ,
KEY_3 ,
KEY_4 ,
KEY_5 ,
KEY_6 ,
KEY_7 ,
KEY_8 ,
KEY_9 ,
KEY_0 ,
KEY_RETURNORENTER ,
KEY_ESCAPE ,
KEY_DELETEORBACKSPACE ,
KEY_TAB ,
KEY_SPACEBAR ,
KEY_HYPHEN ,
KEY_EQUALSIGN ,
KEY_OPENBRACKET ,
KEY_CLOSEBRACKET ,
KEY_BACKSLASH ,
KEY_NONUSPOUND ,
KEY_SEMICOLON ,
KEY_QUOTE ,
KEY_GRAVEACCENTANDTILDE ,
KEY_COMMA ,
KEY_PERIOD ,
KEY_SLASH ,
KEY_CAPSLOCK ,
KEY_F1 ,
KEY_F2 ,
KEY_F3 ,
KEY_F4 ,
KEY_F5 ,
KEY_F6 ,
KEY_F7 ,
KEY_F8 ,
KEY_F9 ,
KEY_F10 ,
KEY_F11 ,
KEY_F12 ,
KEY_PRINTSCREEN ,
KEY_SCROLLLOCK ,
KEY_PAUSE ,
KEY_INSERT ,
KEY_HOME ,
KEY_PAGEUP ,
KEY_DELETEFORWARD ,
KEY_END ,
KEY_PAGEDOWN ,
KEY_RIGHTARROW ,
KEY_LEFTARROW ,
KEY_DOWNARROW ,
KEY_UPARROW ,
KEY_PADNUMLOCK ,
KEY_PADSLASH ,
KEY_PADASTERISK ,
KEY_PADHYPHEN ,
KEY_PADPLUS ,
KEY_PADENTER ,
KEY_PAD1 ,
KEY_PAD2 ,
KEY_PAD3 ,
KEY_PAD4 ,
KEY_PAD5 ,
KEY_PAD6 ,
KEY_PAD7 ,
KEY_PAD8 ,
KEY_PAD9 ,
KEY_PAD0 ,
KEY_PADPERIOD ,
KEY_NONUSBACKSLASH ,
KEY_APPLICATION ,
KEY_POWER ,
KEY_PADEQUALSIGN ,
KEY_F13 ,
KEY_F14 ,
KEY_F15 ,
KEY_F16 ,
KEY_F17 ,
KEY_F18 ,
KEY_F19 ,
KEY_F20 ,
KEY_F21 ,
KEY_F22 ,
KEY_F23 ,
KEY_F24 ,
KEY_EXECUTE ,
KEY_HELP ,
KEY_MENU ,
KEY_SELECT ,
KEY_STOP ,
KEY_AGAIN ,
KEY_UNDO ,
KEY_CUT ,
KEY_COPY ,
KEY_PASTE ,
KEY_FIND ,
KEY_MUTE ,
KEY_VOLUMEUP ,
KEY_VOLUMEDOWN ,
KEY_LOCKINGCAPSLOCK ,
KEY_LOCKINGNUMLOCK ,
KEY_LOCKINGSCROLLLOCK ,
KEY_PADCOMMA ,
KEY_PADEQUALSIGNAS400 ,
KEY_INTERNATIONAL1 ,
KEY_INTERNATIONAL2 ,
KEY_INTERNATIONAL3 ,
KEY_INTERNATIONAL4 ,
KEY_INTERNATIONAL5 ,
KEY_INTERNATIONAL6 ,
KEY_INTERNATIONAL7 ,
KEY_INTERNATIONAL8 ,
KEY_INTERNATIONAL9 ,
KEY_LANG1 ,
KEY_LANG2 ,
KEY_LANG3 ,
KEY_LANG4 ,
KEY_LANG5 ,
KEY_LANG6 ,
KEY_LANG7 ,
KEY_LANG8 ,
KEY_LANG9 ,
KEY_ALTERNATEERASE ,
KEY_SYSREQORATTENTION ,
KEY_CANCEL ,
KEY_CLEAR ,
KEY_PRIOR ,
KEY_RETURN ,
KEY_SEPARATOR ,
KEY_OUT ,
KEY_OPER ,
KEY_CLEARORAGAIN ,
KEY_CRSELORPROPS ,
KEY_EXSEL ,
KEY_LEFTCONTROL ,
KEY_LEFTSHIFT ,
KEY_LEFTALT ,
KEY_LEFTGUI ,
KEY_RIGHTCONTROL ,
KEY_RIGHTSHIFT ,
KEY_RIGHTALT ,
KEY_RIGHTGUI
};
// Lookup modifiers to set matching Interactive Configuration combobox selection mod
bool comboboxbtn2mods[] = {
// keyid Control:224, Shift:225, Alt:226
0,0,0, // combobox val 0: NONE
0,1,0, // combobox val 1: SHIFT
1,0,0, // combobox val 2: CTRL
0,0,1, // combobox val 3: ALT
1,0,1, // combobox val 4: CTRL+ALT
1,1,0, // combobox val 5: SHIFT+CTRL
0,1,1, // combobox val 6: SHIFT+ALT
1,1,1, // combobox val 7: SHIFT+CTRL+ALT
};
init {
// FORCE HID (MOUSE) OUTPUT PROTOCOL.
// N.B. Tick "Disable Joystick from Multi Interface HID output" in GTuner IV > Device Configuration > Device Options !!!!
port_connect(PORT_USB_C, PROTOCOL_HID);
/**** INTERACTIVE CONFIGURATION HANDLING : VALUE LOADING !!! START !!! ****/
// load slots interactive configuration storage memory
pmem_load();
/**** LED ****/
pmem_read(0, &brightness);
// convert combox box value to char as the color function requires char:
// 'B'lue, 'R'ed, 'G'reen, 'P'urple, 'C'yan, 'Y'ellow, 'W'hite;
uint8 char_colors[] = { 'B', 'R', 'G', 'P', 'C', 'Y', 'W', };
pmem_read(4, &color_default);
color_default=char_colors[color_default]; // translate to char
pmem_read(5, &color_drag);
color_drag=char_colors[color_drag]; // translate to char
// set default led color and brightness
ColorLED(color_default, brightness);
/**** MOUSE ****/
// read mouse feature selection
drag_allowed = (pmem_read(6) >> 0) & 0b1;
left_double_click_allowed = (pmem_read(6) >> 1) & 0b1;
axis_lock_allowed = (pmem_read(6) >> 2) & 0b1;
pmem_read(16, &deadzone);
// read set sensitivities
pmem_read(20, &sensitivities[0]); // left stick 1. sensitivity
pmem_read(24, &sensitivities[1]); // left stick 2. sensitivity
pmem_read(28, &sensitivities[2]); // left stick 3. sensitivity
/* check if at least one sensitivity is set */
sensitivity_all_zero = TRUE;
uint8 i = 0;
for (i = 0; i < (sizeof(sensitivities) / 4); i++)
{
if (sensitivities[i] > 0.0) sensitivity_all_zero=FALSE; // a valid value found
}
pmem_read(46, &sensitivity_right_stick); // right stick sensitivity
/**** KEYBOARD ****/
// read keyboard feature selection
dpad_to_cursor_allowed = (pmem_read(50) >> 1) & 0b1;
pmem_read(51, &btn2key_taplimit);
btn2key_OPTION_START_allowed = (pmem_read(50) >> 2) & 0b1;
btn2key_L2_LT_allowed = (pmem_read(50) >> 3) & 0b1;
pmem_read(54, &btn2key_OPTION_START_key_pulse);
pmem_read(64, &btn2key_OPTION_START_key_pulse_mod);
pmem_read(55, &btn2key_OPTION_START_key_hold);
pmem_read(65, &btn2key_OPTION_START_key_hold_mod);
pmem_read(56, &btn2key_L2_LT_key_pulse);
pmem_read(66, &btn2key_L2_LT_key_pulse_mod);
pmem_read(57, &btn2key_L2_LT_key_hold);
pmem_read(67, &btn2key_L2_LT_key_hold_mod);
/**** Slot Control ****/
// read Slot Control feature selection
pmem_read(81, &slotcontrol_taplimit);
slotcontrol_L1_LB_allowed = (pmem_read(80) >> 0) & 0b1;
slotcontrol_R1_RB_allowed = (pmem_read(80) >> 1) & 0b1;
slotcontrol_L3_LS_allowed = (pmem_read(80) >> 2) & 0b1;
slotcontrol_R3_RS_allowed = (pmem_read(80) >> 3) & 0b1;
// L1/LB R1/RB
pmem_read(83,&slotcontrol_L1_LB_tap);
pmem_read(84,&slotcontrol_L1_LB_hold);
pmem_read(85,&slotcontrol_R1_RB_tap);
pmem_read(86,&slotcontrol_R1_RB_hold);
// L3/LS R3/RS
pmem_read(87,&slotcontrol_L3_LS_times);
pmem_read(88,&slotcontrol_L3_LS_selected);
pmem_read(89,&slotcontrol_R3_RS_times);
pmem_read(90,&slotcontrol_R3_RS_selected);
/**** INTERACTIVE CONFIGURATION HANDLING : VALUE LOADING !!! END !!! ****/
}
main {
/**** MOUSE ****/
// TOUCH/VIEW/BACK button = SPEED adjustment
if (!sensitivity_all_zero) // only when one or more valid sensitivities are set
{
if(event_active(BUTTON_2))
{
sensitivity_active = (sensitivity_active + 1) % (sizeof(sensitivities) / 4); // use next one
while (sensitivities[sensitivity_active] == 0.0) // on sensitivity 0.0 try the next one until finding a valid
{
sensitivity_active = (sensitivity_active + 1) % (sizeof(sensitivities) / 4);
}
}
}
// TRIANGLE/Y = DRAG ON/OFF
if (drag_allowed)
{
if(event_active(BUTTON_14))
{
drag_toggle = !drag_toggle;
if (drag_toggle) ColorLED(color_drag, brightness);
else ColorLED(color_default, brightness);
}
}
// R2/RT = DOUBLE-LEFT CLICK
if (left_double_click_allowed)
{
if (event_active(BUTTON_5)) combo_run(DoubleLeftClick);
}
// SQUARE/X = AXIS LOCK (X-AXIS/Y-AXIS/FREE MOVEMENT)
if (axis_lock_allowed)
{
if(event_active(BUTTON_17))
{
axis_lock = (axis_lock + 1) % 3;
}
}
// Run the combo that converts the gamepad input to mouse output. The combo
// works as flow control to not overflow the host with mouse data packets.
combo_run(Gamepad2Mouse);
/**** KEYBOARD ****/
// OPTIONS/START default:(TAP) = ALT+F4 (PULSE) or ESCAPE (HOLD)
if (btn2key_OPTION_START_allowed)
{
switch (TapOrHold(BUTTON_3,btn2key_taplimit))
{
case TAPORHOLD_TAP : combo_run(KeyPulseOPTIONSTART); break;
case TAPORHOLD_HOLD_ON : combo_run(KeyHoldOPTIONSTART); break;
case TAPORHOLD_HOLD_OFF : combo_restart(KeyHoldOPTIONSTART); break;
}
}
// L2/LT default:(TAP) = ENTER (PULSE) or BACKSPACE (HOLD)
if (btn2key_L2_LT_allowed)
{
switch (TapOrHold(BUTTON_8,btn2key_taplimit))
{
case TAPORHOLD_TAP : combo_run(KeyPulseL2LT); break;
case TAPORHOLD_HOLD_ON : combo_run(KeyHoldL2LT); break;
case TAPORHOLD_HOLD_OFF : combo_restart(KeyHoldL2LT); break;
}
}
// Run the combo that converts DPAD to Cursor Keys
if (dpad_to_cursor_allowed)
{
combo_run(DPad2Cursor);
}
/**** Slot Control ****/
if (slotcontrol_block) slotcontrol_unblock();
else {
// L1/LB, do slot change action according to Tap or Hold of button
if (slotcontrol_L1_LB_allowed)
{
switch (TapOrHold(BUTTON_7,slotcontrol_taplimit))
{
case TAPORHOLD_TAP : SlotChange(slotcontrol_L1_LB_tap); break;
case TAPORHOLD_HOLD_ON : SlotChange(slotcontrol_L1_LB_hold); break;
}
}
// R1/RB, do slot change action according to Tap or Hold of button
if (slotcontrol_R1_RB_allowed)
{
switch (TapOrHold(BUTTON_4,slotcontrol_taplimit))
{
case TAPORHOLD_TAP : SlotChange(slotcontrol_R1_RB_tap); break;
case TAPORHOLD_HOLD_ON : SlotChange(slotcontrol_R1_RB_hold); break;
}
}
// L3/LS, do slot change action when the button pressed the selected count
if (slotcontrol_L3_LS_allowed)
{
if (Tap(BUTTON_9,slotcontrol_L3_LS_times)) {
SlotChange(slotcontrol_L3_LS_selected);
}
}
// R3/RS
if (slotcontrol_R3_RS_allowed)
{
if (Tap(BUTTON_6,slotcontrol_R3_RS_times))
SlotChange(slotcontrol_R3_RS_selected);
}
}
}
// ^ end of: main{}
// FUNCTIONS AND COMBOS
/**** LED ****/
//
// set the LED to COLOR with BRIGHTNESS
void ColorLED(uint8 color, fix32 brightness) {
// remember last set values to not set the same more than once
static uint8 last_color = 255;
static fix32 last_brightness = 100f;
if (color == last_color && brightness == last_brightness) return; // skip all code on same value as last
last_color = color;
last_brightness = brightness;
uint8 c1,c2,c3,c4;
if (color == 'B') { c1 = 1; }
else if (color == 'R') { c2 = 1; }
else if (color == 'G') { c3 = 1; }
else if (color == 'P') { c4 = 1; }
else if (color == 'C') { c1 = 1; c3 = 1; }
else if (color == 'Y') { c2 = 1; c3 = 1; }
else if (color == 'W') { c1 = 1; c2 = 1, c3 = 1; c4 = 1; }
led_reset();
if (brightness == 0.0) brightness = 100f;
if (c1) led_set(LED_1, brightness, 0);
if (c2) led_set(LED_2, brightness, 0);
if (c3) led_set(LED_3, brightness, 0);
if (c4) led_set(LED_4, brightness, 0);
}
/**** MOUSE ****/
//
combo DoubleLeftClick {
mouse_set(MBUTTON_1, TRUE); wait(0); wait(6); // click
mouse_set(MBUTTON_1, FALSE); wait(0); wait(6); // release
mouse_set(MBUTTON_1, TRUE); wait(0); wait(6); // click
mouse_set(MBUTTON_1, FALSE); wait(0); // release
}
combo Gamepad2Mouse {
// use left stick and its active sensitivity by default
uint8 STICK_X = STICK_2_X;
uint8 STICK_Y = STICK_2_Y;
fix32 sensitivity_x = sensitivities[sensitivity_active];
fix32 sensitivity_y = sensitivities[sensitivity_active];
// per axis: when right stick is > deadzone use it and its sensitivity
if (sensitivity_right_stick > 0.0)
{
if (abs(get_actual(STICK_1_X)) > deadzone )
{
STICK_X = STICK_1_X;
sensitivity_x = sensitivity_right_stick;
}
if (abs(get_actual(STICK_1_Y)) > deadzone )
{
STICK_Y = STICK_1_Y;
sensitivity_y = sensitivity_right_stick;
}
}
// STICK X-AXIS TO MOUSE X-AXIS
if((axis_lock == 0 || axis_lock == 1) && abs(get_actual(STICK_X)) > deadzone)
{
mouse_set(MOUSE_X, (int16)(get_actual(STICK_X) * sensitivity_x));
} else {
mouse_set(MOUSE_X, 0);
}
// STICK Y-AXIS TO MOUSE Y-AXIS
if((axis_lock == 0 || axis_lock == 2) && abs(get_actual(STICK_Y)) > deadzone)
{
mouse_set(MOUSE_Y, (int16)(get_actual(STICK_Y) * sensitivity_y));
} else {
mouse_set(MOUSE_Y, 0);
}
// CROSS/A = LEFT-CLICK
// TRIANGLE/Y = DRAG ON/OFF
if (drag_allowed) {
mouse_set(MBUTTON_1, (drag_toggle || get_actual(BUTTON_16)) ? TRUE : FALSE);
} else {
mouse_set(MBUTTON_1, get_actual(BUTTON_16) ? TRUE : FALSE);
}
// CIRCLE/B = RIGHT-CLICK
mouse_set(MBUTTON_2, get_actual(BUTTON_15) ? TRUE : FALSE);
// Flow control timing
wait(0); wait(6);
}
/**** KEYBOARD ****/
//
// KEYBOARD HOLD (hold and release handling for modkey & key of button)
void KeyHold(uint8 button, uint8 cmbbox_mod_val, uint8 cmbbox_key_val) {
if (is_active(button)) // button active -> set key pressed
{
KeyMods(cmbbox_mod_val,TRUE); // modifiers
KeySet(cmbbox_key_val, TRUE); // key
}
if (!is_active(button)) { // button not active -> set key released
KeyMods(cmbbox_mod_val,FALSE); // modifiers
KeySet(cmbbox_key_val, FALSE); // key
}
}
// KEYBOARD KEY (set key to flag)
void KeySet(uint8 cmbbox_val, bool flag) {
if (!cmbbox_val) return; // do nothing if no key is selected
// only change when the key doesn't has already the flag/value
if (key_get(comboboxbtn2key[cmbbox_val]) != flag)
{
key_set(comboboxbtn2key[cmbbox_val], flag);
}
}
// KEYBOARD MODIFIERS (set CTRL,ALT,SHIFT to flag)
void KeyMods(uint8 cmbbox_val, bool flag) {
/* MOD keys COMBOBOX VALUE lookup by accessing the correct row in the comboboxbtn2mod array
Example:
combobox item 7 uses all modifiers at the same time
comboboxbtn2mod array row 7 has 1 for all columns/modifiers
so this code will set/unset all three midifier keys
*/
if (!cmbbox_val) return; // do nothing if no modifier is selected
uint8 row = cmbbox_val * 3; // 3 columns -> the row to lookup in the comboboxbtn2mod table/array
// for each modifier key:
// only check when the mod key is used by the selected combobox item
// only change when the key doesn't has already the flag/value
if (comboboxbtn2mods[row+0])
{
if (key_get(KEY_LEFTCONTROL) != flag) key_set(KEY_LEFTCONTROL, flag);
}
if (comboboxbtn2mods[row+1])
{
if (key_get(KEY_LEFTSHIFT) != flag) key_set(KEY_LEFTSHIFT, flag);
}
if (comboboxbtn2mods[row+2])
{
if (key_get(KEY_LEFTALT) != flag) key_set(KEY_LEFTALT, flag);
}
}
// OPTION/START TAP (PULSE: press AND release)
combo KeyPulseOPTIONSTART {
// press
KeyMods(btn2key_OPTION_START_key_pulse_mod,TRUE); // modifiers
KeySet(btn2key_OPTION_START_key_pulse, TRUE); // key
wait(0); wait(25);
// release
KeyMods(btn2key_OPTION_START_key_pulse_mod,FALSE); // modifiers
KeySet(btn2key_OPTION_START_key_pulse, FALSE); // key
wait(0);
}
// OPTION/START HOLD (press OR release)
combo KeyHoldOPTIONSTART {
KeyHold(BUTTON_3,btn2key_OPTION_START_key_hold_mod,btn2key_OPTION_START_key_hold);
// Flow control timing
wait(0);
wait(6);
}
// L2/LT TAP (PULSE: press AND release)
combo KeyPulseL2LT {
// press
KeyMods(btn2key_L2_LT_key_pulse_mod,TRUE); // modifiers
KeySet(btn2key_L2_LT_key_pulse, TRUE); // key
wait(0); wait(25);
// release
KeyMods(btn2key_L2_LT_key_pulse_mod,FALSE); // modifiers
KeySet(btn2key_L2_LT_key_pulse, FALSE); // key
wait(0);
}
// L2/LT HOLD (press OR release)
combo KeyHoldL2LT {
KeyHold(BUTTON_8,btn2key_L2_LT_key_hold_mod, btn2key_L2_LT_key_hold);
// Flow control timing
wait(0);
wait(6);
}
// DPAD INPUT TO CURSOR/ARROW KEYS
combo DPad2Cursor {
// UP : button IS active AND key not active -> set key pressed
if ( get_actual(BUTTON_10) && !key_get(KEY_UPARROW)) key_set(KEY_UPARROW, TRUE);
// UP : button NOT active AND key active -> set key released
if (!get_actual(BUTTON_10) && key_get(KEY_UPARROW)) key_set(KEY_UPARROW, FALSE);
// DOWN : button IS active AND key not active -> set key pressed
if ( get_actual(BUTTON_11) && !key_get(KEY_DOWNARROW)) key_set(KEY_DOWNARROW, TRUE);
// DOWN : button NOT active AND key active -> set key released
if (!get_actual(BUTTON_11) && key_get(KEY_DOWNARROW)) key_set(KEY_DOWNARROW, FALSE);
// LEFT : button IS active AND key not active -> set key pressed
if ( get_actual(BUTTON_12) && !key_get(KEY_LEFTARROW)) key_set(KEY_LEFTARROW, TRUE);
// DOWN : button NOT active AND key active -> set key released
if (!get_actual(BUTTON_12) && key_get(KEY_LEFTARROW)) key_set(KEY_LEFTARROW, FALSE);
// RIGHT : button IS active AND key not active -> set key pressed
if (get_actual(BUTTON_13) && !key_get(KEY_RIGHTARROW)) key_set(KEY_RIGHTARROW, TRUE);
// RIGHT : button NOT active AND key active -> set key released
if (!get_actual(BUTTON_13) && key_get(KEY_RIGHTARROW)) key_set(KEY_RIGHTARROW, FALSE);
// Flow control timing
wait(0);
wait(6);
}
/**** SLOT CONTROL ****/
//
// REMOVE BLOCK OF SLOTCONROL
void slotcontrol_unblock() {
uint8 input_id;
for (input_id=BUTTON_1;input_id <= BUTTON_21;input_id++) {
// active button found, stop further checks, do not reset slotcontrol_block
if (is_active(input_id)) return;
}
// no button is pressed -> reset slotcontrol_block
slotcontrol_block=FALSE;
}
// TAP COUNTER TIMELIMIT
combo cTap {
wait(slotcontrol_taplimit);
}
// TAP COUNTING
bool Tap(uint8 btn, uint8 cnt) {
static uint8 TapBtn = 200;
static uint8 TapCount = 0;
// single press detected
if (time_active(btn) <= slotcontrol_taplimit && event_release(btn) && btn==TapBtn && (cnt == TapCount == 1) ) { return TRUE; }
// skip further processing whem detected event is not event_active
if (!event_active(btn)) return FALSE;
// if timelimit has passed or last button used is not the current one then reset the press counter
if (!cTap || TapBtn != btn) { TapBtn = btn; TapCount = 1; combo_restart(cTap); return FALSE; }
// timelimit not reached yet
if (cTap)
{ // increase press counter
TapCount++;
// current press count matches the number to check for
if (TapCount == cnt) { combo_stop(cTap); TapCount = 0; return TRUE; }
// number of presses still not enough, restart the timer
else combo_restart(cTap);
}
return FALSE;
}
// run slot change action according to selected MODE
void SlotChange(uint8 mode) {
/* combobox values
item 0 = Do Nothing
item 1 = Slot 0
item 2 = Slot 1
item 3 = Slot 2
item 4 = Slot 3
item 5 = Slot 4 (SD-Card required)
item 6 = Slot 5 (SD-Card required)
item 7 = Slot 6 (SD-Card required)
item 8 = Slot 7 (SD-Card required)
item 9 = Slot 8 (SD-Card required)
item 10 = Slot 9 (SD-Card required)
item 11 = Previous Slot
item 12 = Next Slot
*/
uint8 check_slot;
// specific slot
if (mode >= 1 && mode <= 10) {
check_slot=mode-1;
if (mslot_check(check_slot) || check_slot==0) mslot_load(check_slot);
}
// previous slot
if (mode == 11) {
check_slot = mslot_get() - 1;
for(;;)
{
if(check_slot == mslot_get()) break; // no other avialable slot found
if(mslot_check(check_slot)) mslot_load(check_slot);
( check_slot-- ) % 10;
}
}
// next slot
if (mode == 12) {
check_slot = mslot_get() + 1;
for(;;)
{
if(check_slot == mslot_get()) break; // no other avialable slot found
if(mslot_check(check_slot)) mslot_load(check_slot);
( check_slot++ ) % 10;
}
}
}
/**** MULTI PURPOSE ****/
//
// returns registered type off input for button: TAPORHOLD_TAP, TAPORHOLD_HOLD_ON or TAPORHOLD_HOLD_OFF
// used by KEYBOARD and SLOTCONTROL
bool TapOrHold(uint8 button, uint16 taplimit) {
// on release of button return value for tap or hold
if (event_release(button))
{
if (time_active(button) < taplimit) {
return TAPORHOLD_TAP; // TAP
} else {
return TAPORHOLD_HOLD_OFF; // HOLD OFF
}
}
// on longer hold of button return value to run hold combo
if (check_active(button, taplimit))
{
return TAPORHOLD_HOLD_ON; // HOLD ON
}
return FALSE;
}
/* INTERACTIVE CONFIGURATION DEFINITION
[Gamepad 2 Mouse Information]
collapsible =1
shortdesc = <<Created for http://www.SpecialEffect.org.uk - PUBLIC DOMAINDesigned to convert a PS4/Xbox gamepad to Mouse use.
!!! Tick "Disable Joystick from Multi Interface HID output" in GTuner IV > Device Configuration > Device Options !!!
Control | Function |
LEFT-STICK | MOUSE: MOVEMENT , adjustable sensitivity with TOUCH/VIEW/BACK button |
RIGHT_STICK | MOUSE: MOVEMENT , fixed sensitivity (index sensitivity_right_stick) |
CROSS/A | MOUSE: LEFT-CLICK |
CIRCLE/B | MOUSE: RIGHT-CLICK |
TRIANGLE/Y | MOUSE: DRAG ON/OFF (Left Mouse Button Hold) |
SQUARE/X | MOUSE: AXIS LOCK (X-Axis / Y-Axis / Free Movement) |
R2/RT | MOUSE: DOUBLE-LEFT-CLICK |
DPAD | KEYBOARD: Cursor/Arrow keys |
OPTION/START | KEYBOARD: Tap->ALT+F4 (pulse), Hold->ESCAPE (hold) |
L2/LT | KEYBOARD: Tap->RETURN (pulse), Hold->BACKSPACE (hold) |
HOLD R1/RB + TAP HOME | SLOT: CHANGE +1 (e.g. to Forced Xbox 360 Gamepad mode) |
HOLD L1/LB + TAP HOME | SLOT: CHANGE -1 |
HOLD (R1/RB + L1/LB) + TAP Home | SLOT: LOAD "SLOT 0" (empty slot) |
ADVANCED SLOT CONTROL | SLOT: see section "Slot Control" (default:off) |
MULTILINE
control = info
[SPACE]
control = space
default = 15
[Configuration]
collapsible = 0
shortdesc = <<Click "SAVE and RUN" button after clicking one of the presets to activate the new settings.
When you click "OK" to close the Interactive Configuration you have to manually reload the active slot for the changes to apply.
MULTILINE
control = info
[Preconfigured Sets]
group = true
shortdesc =
control = config
item = Default (All Features enabled, except 'Slot Control'):00500000000107#10:001400000000147B0000051F00000000#2E:0000051F0E00FA#36:3A262527#40:03000000
item = Basic (Enabled 'Movement,LeftCLick,RightClick,Speed Selection'):00500000020100#10:001400000000147B0000051F00000000#2E:0000051F0000FA#36:3A262527#40:03000000#50:0000FA0000000003000300
[LED Settings]
collapsible = 2
shortdesc =
control = info
[LED Brightness]
group = true
shortdesc = <<Buttons
MULTILINE
control = info
[Mouse Drag]
group = true
shortdesc = <<Mouse Drag - Left Mouse Button Hold
Button TRIANGLE/Y will toggle Left Mouse Button Hold On/OFF when allowed.
MULTILINE
byteoffset = 6
bitsize = 1
bitoffset = 0
control = checkbox
default = 1
item = Allow Use of Mouse Drag
[Mouse Double Click]
group = true
shortdesc = <<Mouse Double-Left-Click - Left Mouse Button Double CLick
Button R2/RT will do a Double-Left-Click when allowed.
MULTILINE
byteoffset = 6
bitsize = 1
bitoffset = 1
control = checkbox
default = 1
item = Allow Use of Double-Left-Click
[Mouse Axis Lock]
group = true
shortdesc = <<Mouse Axis Lock - Toggle Lock of Mouse Movement Axis
Button SQUARE/X will cycle through Allowed : X-Axis , Y-Axis , Free
MULTILINE
byteoffset = 6
bitsize = 1
bitoffset = 2
control = checkbox
default = 1
item = Allow Use of Mouse Axis Lock
[Mouse Movement Features]
group = true
shortdesc = <<Movement
MULTILINE
control = info
[Stick Deadzone]
group = true
shortdesc = <<Stick Deadzone value for mouse movement.
The deadzone defines the minimum required movement of the sticks to start moving the mouse.
Higher value -> more stick movement required
MULTILINE
byteoffset = 16
bitsize = 32
control = spinboxf
default = 200
decimals = 1
step = 01
minimum = 050
maximum = 1000
[Left Stick Mouse Settings Information]
group = true
shortdesc = <<The Left Stick Mouse speeds can be cycled through with TOUCH/VIEW/BACK button.
Sensitivity values set to 0.00 will disable the setting.
Example: If you want to have use two different speed only set 3. to value 0.00
To disable the Left Sticks Mouse movement completely set all values to 0.00
MULTILINE
control = info
[LEFT STICK Mouse Sensitivity 1]
group = true
shortdesc = <<LEFT STICK 1. Sensitivity (higher value->faster movement) To disable set this to 0.00
MULTILINE
byteoffset = 20
bitsize = 32
control = spinboxf
default = 008
decimals = 2
step = 001
minimum = 000
maximum = 200
[LEFT STICK Mouse Sensitivity 2]
group = true
shortdesc = <<LEFT STICK 2. Sensitivity (higher->faster, lower->slower) To disable set this to 0.00
MULTILINE
byteoffset = 24
bitsize = 32
control = spinboxf
default = 002
decimals = 2
step = 001
minimum = 000
maximum = 200
[LEFT STICK Mouse Sensitivity 3]
group = true
shortdesc = <<LEFT STICK 3. Sensitivity (higher->faster, lower->slower) To disable set this to 0.00
MULTILINE
byteoffset = 28
bitsize = 32
control = spinboxf
default = 000
decimals = 2
step = 001
minimum = 000
maximum = 200
[Right Stick Mouse Settings Information]
group = true
shortdesc = <<The Right Stick Mouse speed has one speed only.
To disable the Right Sticks Mouse movement completely set the value to 0.00
MULTILINE
control = info
[RIGHT STICK Mouse Sensitivity]
group = true
shortdesc = <<RIGHT STICK Sensitivity (higher->faster, lower->slower) To disable set this to 0.00
MULTILINE
byteoffset = 46
bitsize = 32
control = spinboxf
default = 002
decimals = 2
step = 001
minimum = 000
maximum = 200
[Keyboard Settings]
collapsible = 2
shortdesc =
control = info
[DPAD CURSOR]
group = true
shortdesc = <<Keyboard Cursor/Arrow on DPAD
DPAD DIRECTION will press the corresponding Cursor/Arrow key
MULTILINE
byteoffset = 50
bitsize = 1
bitoffset = 1
control = checkbox
default = 1
item = Allow Use of DPAD to CURSOR keys
[Keyboard Tap / Hold Limit]
group = true
shortdesc = <<Single Button to multiple Keyboard Keys - Tap Time Limit in milliseconds
Button hold time < time set will send the first key selected
Button hold time > time set will send the second key selected
MULTILINE
byteoffset = 51
bitsize = 16
control = spinbox
default = 250
step = 1
minimum = 150
maximum = 1000
[Keyboard press on OPTION/START]
group = true
shortdesc = <<Keyboard press on OPTION/START
MULTILINE
byteoffset = 50
bitsize = 1
bitoffset = 2
control = checkbox
default = 1
item = Allow Use of OPTION/START for Keyboard Press
[Keyboard press on OPTION/START Tap]
group = true
shortdesc = <<short press will send:
MULTILINE
byteoffset = 54
bitsize = 8
bitoffset = 0
control = combobox
default = 58
item = NONE
item = KEY_A
item = KEY_B
item = KEY_C
item = KEY_D
item = KEY_E
item = KEY_F
item = KEY_G
item = KEY_H
item = KEY_I
item = KEY_J
item = KEY_K
item = KEY_L
item = KEY_M
item = KEY_N
item = KEY_O
item = KEY_P
item = KEY_Q
item = KEY_R
item = KEY_S
item = KEY_T
item = KEY_U
item = KEY_V
item = KEY_W
item = KEY_X
item = KEY_Y
item = KEY_Z
item = KEY_1
item = KEY_2
item = KEY_3
item = KEY_4
item = KEY_5
item = KEY_6
item = KEY_7
item = KEY_8
item = KEY_9
item = KEY_0
item = KEY_RETURN/ENTER
item = KEY_ESCAPE
item = KEY_DELETE/BACKSPACE
item = KEY_TAB
item = KEY_SPACEBAR
item = KEY_HYPHEN
item = KEY_EQUALSIGN
item = KEY_OPENBRACKET
item = KEY_CLOSEBRACKET
item = KEY_BACKSLASH
item = KEY_NONUSPOUND
item = KEY_SEMICOLON
item = KEY_QUOTE
item = KEY_GRAVEACCENT/TILDE
item = KEY_COMMA
item = KEY_PERIOD
item = KEY_SLASH
item = KEY_CAPSLOCK
item = KEY_F1
item = KEY_F2
item = KEY_F3
item = KEY_F4
item = KEY_F5
item = KEY_F6
item = KEY_F7
item = KEY_F8
item = KEY_F9
item = KEY_F10
item = KEY_F11
item = KEY_F12
item = KEY_PRINTSCREEN
item = KEY_SCROLLLOCK
item = KEY_PAUSE
item = KEY_INSERT
item = KEY_HOME
item = KEY_PAGEUP
item = KEY_DELETEFORWARD
item = KEY_END
item = KEY_PAGEDOWN
item = KEY_RIGHTARROW
item = KEY_LEFTARROW
item = KEY_DOWNARROW
item = KEY_UPARROW
item = KEY_PADNUMLOCK
item = KEY_PADSLASH
item = KEY_PADASTERISK
item = KEY_PADHYPHEN
item = KEY_PADPLUS
item = KEY_PADENTER
item = KEY_PAD1
item = KEY_PAD2
item = KEY_PAD3
item = KEY_PAD4
item = KEY_PAD5
item = KEY_PAD6
item = KEY_PAD7
item = KEY_PAD8
item = KEY_PAD9
item = KEY_PAD0
item = KEY_PADPERIOD
item = KEY_NONUSBACKSLASH
item = KEY_APPLICATION
item = KEY_POWER
item = KEY_PADEQUALSIGN
item = KEY_F13
item = KEY_F14
item = KEY_F15
item = KEY_F16
item = KEY_F17
item = KEY_F18
item = KEY_F19
item = KEY_F20
item = KEY_F21
item = KEY_F22
item = KEY_F23
item = KEY_F24
item = KEY_EXECUTE
item = KEY_HELP
item = KEY_MENU
item = KEY_SELECT
item = KEY_STOP
item = KEY_AGAIN
item = KEY_UNDO
item = KEY_CUT
item = KEY_COPY
item = KEY_PASTE
item = KEY_FIND
item = KEY_MUTE
item = KEY_VOLUMEUP
item = KEY_VOLUMEDOWN
item = KEY_LOCKINGCAPSLOCK
item = KEY_LOCKINGNUMLOCK
item = KEY_LOCKINGSCROLLLOCK
item = KEY_PADCOMMA
item = KEY_PADEQUALSIGNAS400
item = KEY_INTERNATIONAL1
item = KEY_INTERNATIONAL2
item = KEY_INTERNATIONAL3
item = KEY_INTERNATIONAL4
item = KEY_INTERNATIONAL5
item = KEY_INTERNATIONAL6
item = KEY_INTERNATIONAL7
item = KEY_INTERNATIONAL8
item = KEY_INTERNATIONAL9
item = KEY_LANG1
item = KEY_LANG2
item = KEY_LANG3
item = KEY_LANG4
item = KEY_LANG5
item = KEY_LANG6
item = KEY_LANG7
item = KEY_LANG8
item = KEY_LANG9
item = KEY_ALTERNATEERASE
item = KEY_SYSREQ/ATTENTION
item = KEY_CANCEL
item = KEY_CLEAR
item = KEY_PRIOR
item = KEY_RETURN
item = KEY_SEPARATOR
item = KEY_OUT
item = KEY_OPER
item = KEY_CLEAR/AGAIN
item = KEY_CRSEL/PROPS
item = KEY_EXSEL
item = KEY_LEFTCONTROL
item = KEY_LEFTSHIFT
item = KEY_LEFTALT
item = KEY_LEFTGUI
item = KEY_RIGHTCONTROL
item = KEY_RIGHTSHIFT
item = KEY_RIGHTALT
item = KEY_RIGHTGUI
[Keyboard press on OPTION/START Tap Mod]
group = true
shortdesc =
byteoffset = 64
bitsize = 8
bitoffset = 0
control = combobox
default = 3
item = Modifier: NONE
item = Modifier: SHIFT
item = Modifier: CTRL
item = Modifier: ALT
item = Modifier: CTRL & ALT
item = Modifier: SHIFT & CTRL
item = Modifier: SHIFT & ALT
item = Modifier: SHIFT & CTRL & ALT
[Keyboard press on OPTION/START - Longer Hold]
group = true
shortdesc = <<longer hold will send:
MULTILINE
byteoffset = 55
bitsize = 8
bitoffset = 0
control = combobox
default = 38
item = NONE
item = KEY_A
item = KEY_B
item = KEY_C
item = KEY_D
item = KEY_E
item = KEY_F
item = KEY_G
item = KEY_H
item = KEY_I
item = KEY_J
item = KEY_K
item = KEY_L
item = KEY_M
item = KEY_N
item = KEY_O
item = KEY_P
item = KEY_Q
item = KEY_R
item = KEY_S
item = KEY_T
item = KEY_U
item = KEY_V
item = KEY_W
item = KEY_X
item = KEY_Y
item = KEY_Z
item = KEY_1
item = KEY_2
item = KEY_3
item = KEY_4
item = KEY_5
item = KEY_6
item = KEY_7
item = KEY_8
item = KEY_9
item = KEY_0
item = KEY_RETURN/ENTER
item = KEY_ESCAPE
item = KEY_DELETE/BACKSPACE
item = KEY_TAB
item = KEY_SPACEBAR
item = KEY_HYPHEN
item = KEY_EQUALSIGN
item = KEY_OPENBRACKET
item = KEY_CLOSEBRACKET
item = KEY_BACKSLASH
item = KEY_NONUSPOUND
item = KEY_SEMICOLON
item = KEY_QUOTE
item = KEY_GRAVEACCENT/TILDE
item = KEY_COMMA
item = KEY_PERIOD
item = KEY_SLASH
item = KEY_CAPSLOCK
item = KEY_F1
item = KEY_F2
item = KEY_F3
item = KEY_F4
item = KEY_F5
item = KEY_F6
item = KEY_F7
item = KEY_F8
item = KEY_F9
item = KEY_F10
item = KEY_F11
item = KEY_F12
item = KEY_PRINTSCREEN
item = KEY_SCROLLLOCK
item = KEY_PAUSE
item = KEY_INSERT
item = KEY_HOME
item = KEY_PAGEUP
item = KEY_DELETEFORWARD
item = KEY_END
item = KEY_PAGEDOWN
item = KEY_RIGHTARROW
item = KEY_LEFTARROW
item = KEY_DOWNARROW
item = KEY_UPARROW
item = KEY_PADNUMLOCK
item = KEY_PADSLASH
item = KEY_PADASTERISK
item = KEY_PADHYPHEN
item = KEY_PADPLUS
item = KEY_PADENTER
item = KEY_PAD1
item = KEY_PAD2
item = KEY_PAD3
item = KEY_PAD4
item = KEY_PAD5
item = KEY_PAD6
item = KEY_PAD7
item = KEY_PAD8
item = KEY_PAD9
item = KEY_PAD0
item = KEY_PADPERIOD
item = KEY_NONUSBACKSLASH
item = KEY_APPLICATION
item = KEY_POWER
item = KEY_PADEQUALSIGN
item = KEY_F13
item = KEY_F14
item = KEY_F15
item = KEY_F16
item = KEY_F17
item = KEY_F18
item = KEY_F19
item = KEY_F20
item = KEY_F21
item = KEY_F22
item = KEY_F23
item = KEY_F24
item = KEY_EXECUTE
item = KEY_HELP
item = KEY_MENU
item = KEY_SELECT
item = KEY_STOP
item = KEY_AGAIN
item = KEY_UNDO
item = KEY_CUT
item = KEY_COPY
item = KEY_PASTE
item = KEY_FIND
item = KEY_MUTE
item = KEY_VOLUMEUP
item = KEY_VOLUMEDOWN
item = KEY_LOCKINGCAPSLOCK
item = KEY_LOCKINGNUMLOCK
item = KEY_LOCKINGSCROLLLOCK
item = KEY_PADCOMMA
item = KEY_PADEQUALSIGNAS400
item = KEY_INTERNATIONAL1
item = KEY_INTERNATIONAL2
item = KEY_INTERNATIONAL3
item = KEY_INTERNATIONAL4
item = KEY_INTERNATIONAL5
item = KEY_INTERNATIONAL6
item = KEY_INTERNATIONAL7
item = KEY_INTERNATIONAL8
item = KEY_INTERNATIONAL9
item = KEY_LANG1
item = KEY_LANG2
item = KEY_LANG3
item = KEY_LANG4
item = KEY_LANG5
item = KEY_LANG6
item = KEY_LANG7
item = KEY_LANG8
item = KEY_LANG9
item = KEY_ALTERNATEERASE
item = KEY_SYSREQ/ATTENTION
item = KEY_CANCEL
item = KEY_CLEAR
item = KEY_PRIOR
item = KEY_RETURN
item = KEY_SEPARATOR
item = KEY_OUT
item = KEY_OPER
item = KEY_CLEAR/AGAIN
item = KEY_CRSEL/PROPS
item = KEY_EXSEL
item = KEY_LEFTCONTROL
item = KEY_LEFTSHIFT
item = KEY_LEFTALT
item = KEY_LEFTGUI
item = KEY_RIGHTCONTROL
item = KEY_RIGHTSHIFT
item = KEY_RIGHTALT
item = KEY_RIGHTGUI
[Keyboard press on OPTION/START Hold Mod]
group = true
shortdesc =
byteoffset = 65
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Modifier: NONE
item = Modifier: SHIFT
item = Modifier: CTRL
item = Modifier: ALT
item = Modifier: CTRL & ALT
item = Modifier: SHIFT & CTRL
item = Modifier: SHIFT & ALT
item = Modifier: SHIFT & CTRL & ALT
[Keyboard press on L2/LT]
group = true
shortdesc = <<Keyboard press on L2/LT
MULTILINE
byteoffset = 50
bitsize = 1
bitoffset = 3
control = checkbox
default = 1
item = Allow Use of L2/LT for Keyboard Press
[Keyboard press on L2/LT Tap]
group = true
shortdesc = <<short press will send:
MULTILINE
byteoffset = 56
bitsize = 8
bitoffset = 0
control = combobox
default = 37
item = NONE
item = KEY_A
item = KEY_B
item = KEY_C
item = KEY_D
item = KEY_E
item = KEY_F
item = KEY_G
item = KEY_H
item = KEY_I
item = KEY_J
item = KEY_K
item = KEY_L
item = KEY_M
item = KEY_N
item = KEY_O
item = KEY_P
item = KEY_Q
item = KEY_R
item = KEY_S
item = KEY_T
item = KEY_U
item = KEY_V
item = KEY_W
item = KEY_X
item = KEY_Y
item = KEY_Z
item = KEY_1
item = KEY_2
item = KEY_3
item = KEY_4
item = KEY_5
item = KEY_6
item = KEY_7
item = KEY_8
item = KEY_9
item = KEY_0
item = KEY_RETURN/ENTER
item = KEY_ESCAPE
item = KEY_DELETE/BACKSPACE
item = KEY_TAB
item = KEY_SPACEBAR
item = KEY_HYPHEN
item = KEY_EQUALSIGN
item = KEY_OPENBRACKET
item = KEY_CLOSEBRACKET
item = KEY_BACKSLASH
item = KEY_NONUSPOUND
item = KEY_SEMICOLON
item = KEY_QUOTE
item = KEY_GRAVEACCENT/TILDE
item = KEY_COMMA
item = KEY_PERIOD
item = KEY_SLASH
item = KEY_CAPSLOCK
item = KEY_F1
item = KEY_F2
item = KEY_F3
item = KEY_F4
item = KEY_F5
item = KEY_F6
item = KEY_F7
item = KEY_F8
item = KEY_F9
item = KEY_F10
item = KEY_F11
item = KEY_F12
item = KEY_PRINTSCREEN
item = KEY_SCROLLLOCK
item = KEY_PAUSE
item = KEY_INSERT
item = KEY_HOME
item = KEY_PAGEUP
item = KEY_DELETEFORWARD
item = KEY_END
item = KEY_PAGEDOWN
item = KEY_RIGHTARROW
item = KEY_LEFTARROW
item = KEY_DOWNARROW
item = KEY_UPARROW
item = KEY_PADNUMLOCK
item = KEY_PADSLASH
item = KEY_PADASTERISK
item = KEY_PADHYPHEN
item = KEY_PADPLUS
item = KEY_PADENTER
item = KEY_PAD1
item = KEY_PAD2
item = KEY_PAD3
item = KEY_PAD4
item = KEY_PAD5
item = KEY_PAD6
item = KEY_PAD7
item = KEY_PAD8
item = KEY_PAD9
item = KEY_PAD0
item = KEY_PADPERIOD
item = KEY_NONUSBACKSLASH
item = KEY_APPLICATION
item = KEY_POWER
item = KEY_PADEQUALSIGN
item = KEY_F13
item = KEY_F14
item = KEY_F15
item = KEY_F16
item = KEY_F17
item = KEY_F18
item = KEY_F19
item = KEY_F20
item = KEY_F21
item = KEY_F22
item = KEY_F23
item = KEY_F24
item = KEY_EXECUTE
item = KEY_HELP
item = KEY_MENU
item = KEY_SELECT
item = KEY_STOP
item = KEY_AGAIN
item = KEY_UNDO
item = KEY_CUT
item = KEY_COPY
item = KEY_PASTE
item = KEY_FIND
item = KEY_MUTE
item = KEY_VOLUMEUP
item = KEY_VOLUMEDOWN
item = KEY_LOCKINGCAPSLOCK
item = KEY_LOCKINGNUMLOCK
item = KEY_LOCKINGSCROLLLOCK
item = KEY_PADCOMMA
item = KEY_PADEQUALSIGNAS400
item = KEY_INTERNATIONAL1
item = KEY_INTERNATIONAL2
item = KEY_INTERNATIONAL3
item = KEY_INTERNATIONAL4
item = KEY_INTERNATIONAL5
item = KEY_INTERNATIONAL6
item = KEY_INTERNATIONAL7
item = KEY_INTERNATIONAL8
item = KEY_INTERNATIONAL9
item = KEY_LANG1
item = KEY_LANG2
item = KEY_LANG3
item = KEY_LANG4
item = KEY_LANG5
item = KEY_LANG6
item = KEY_LANG7
item = KEY_LANG8
item = KEY_LANG9
item = KEY_ALTERNATEERASE
item = KEY_SYSREQ/ATTENTION
item = KEY_CANCEL
item = KEY_CLEAR
item = KEY_PRIOR
item = KEY_RETURN
item = KEY_SEPARATOR
item = KEY_OUT
item = KEY_OPER
item = KEY_CLEAR/AGAIN
item = KEY_CRSEL/PROPS
item = KEY_EXSEL
item = KEY_LEFTCONTROL
item = KEY_LEFTSHIFT
item = KEY_LEFTALT
item = KEY_LEFTGUI
item = KEY_RIGHTCONTROL
item = KEY_RIGHTSHIFT
item = KEY_RIGHTALT
item = KEY_RIGHTGUI
[Keyboard press on L2/LT Tap Mod]
group = true
shortdesc =
byteoffset = 66
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Modifier: NONE
item = Modifier: SHIFT
item = Modifier: CTRL
item = Modifier: ALT
item = Modifier: CTRL & ALT
item = Modifier: SHIFT & CTRL
item = Modifier: SHIFT & ALT
item = Modifier: SHIFT & CTRL & ALT
[Keyboard press on L2/LT Hold]
group = true
shortdesc = <<longer hold will send:
MULTILINE
byteoffset = 57
bitsize = 8
bitoffset = 0
control = combobox
default = 39
item = NONE
item = KEY_A
item = KEY_B
item = KEY_C
item = KEY_D
item = KEY_E
item = KEY_F
item = KEY_G
item = KEY_H
item = KEY_I
item = KEY_J
item = KEY_K
item = KEY_L
item = KEY_M
item = KEY_N
item = KEY_O
item = KEY_P
item = KEY_Q
item = KEY_R
item = KEY_S
item = KEY_T
item = KEY_U
item = KEY_V
item = KEY_W
item = KEY_X
item = KEY_Y
item = KEY_Z
item = KEY_1
item = KEY_2
item = KEY_3
item = KEY_4
item = KEY_5
item = KEY_6
item = KEY_7
item = KEY_8
item = KEY_9
item = KEY_0
item = KEY_RETURN/ENTER
item = KEY_ESCAPE
item = KEY_DELETE/BACKSPACE
item = KEY_TAB
item = KEY_SPACEBAR
item = KEY_HYPHEN
item = KEY_EQUALSIGN
item = KEY_OPENBRACKET
item = KEY_CLOSEBRACKET
item = KEY_BACKSLASH
item = KEY_NONUSPOUND
item = KEY_SEMICOLON
item = KEY_QUOTE
item = KEY_GRAVEACCENT/TILDE
item = KEY_COMMA
item = KEY_PERIOD
item = KEY_SLASH
item = KEY_CAPSLOCK
item = KEY_F1
item = KEY_F2
item = KEY_F3
item = KEY_F4
item = KEY_F5
item = KEY_F6
item = KEY_F7
item = KEY_F8
item = KEY_F9
item = KEY_F10
item = KEY_F11
item = KEY_F12
item = KEY_PRINTSCREEN
item = KEY_SCROLLLOCK
item = KEY_PAUSE
item = KEY_INSERT
item = KEY_HOME
item = KEY_PAGEUP
item = KEY_DELETEFORWARD
item = KEY_END
item = KEY_PAGEDOWN
item = KEY_RIGHTARROW
item = KEY_LEFTARROW
item = KEY_DOWNARROW
item = KEY_UPARROW
item = KEY_PADNUMLOCK
item = KEY_PADSLASH
item = KEY_PADASTERISK
item = KEY_PADHYPHEN
item = KEY_PADPLUS
item = KEY_PADENTER
item = KEY_PAD1
item = KEY_PAD2
item = KEY_PAD3
item = KEY_PAD4
item = KEY_PAD5
item = KEY_PAD6
item = KEY_PAD7
item = KEY_PAD8
item = KEY_PAD9
item = KEY_PAD0
item = KEY_PADPERIOD
item = KEY_NONUSBACKSLASH
item = KEY_APPLICATION
item = KEY_POWER
item = KEY_PADEQUALSIGN
item = KEY_F13
item = KEY_F14
item = KEY_F15
item = KEY_F16
item = KEY_F17
item = KEY_F18
item = KEY_F19
item = KEY_F20
item = KEY_F21
item = KEY_F22
item = KEY_F23
item = KEY_F24
item = KEY_EXECUTE
item = KEY_HELP
item = KEY_MENU
item = KEY_SELECT
item = KEY_STOP
item = KEY_AGAIN
item = KEY_UNDO
item = KEY_CUT
item = KEY_COPY
item = KEY_PASTE
item = KEY_FIND
item = KEY_MUTE
item = KEY_VOLUMEUP
item = KEY_VOLUMEDOWN
item = KEY_LOCKINGCAPSLOCK
item = KEY_LOCKINGNUMLOCK
item = KEY_LOCKINGSCROLLLOCK
item = KEY_PADCOMMA
item = KEY_PADEQUALSIGNAS400
item = KEY_INTERNATIONAL1
item = KEY_INTERNATIONAL2
item = KEY_INTERNATIONAL3
item = KEY_INTERNATIONAL4
item = KEY_INTERNATIONAL5
item = KEY_INTERNATIONAL6
item = KEY_INTERNATIONAL7
item = KEY_INTERNATIONAL8
item = KEY_INTERNATIONAL9
item = KEY_LANG1
item = KEY_LANG2
item = KEY_LANG3
item = KEY_LANG4
item = KEY_LANG5
item = KEY_LANG6
item = KEY_LANG7
item = KEY_LANG8
item = KEY_LANG9
item = KEY_ALTERNATEERASE
item = KEY_SYSREQ/ATTENTION
item = KEY_CANCEL
item = KEY_CLEAR
item = KEY_PRIOR
item = KEY_RETURN
item = KEY_SEPARATOR
item = KEY_OUT
item = KEY_OPER
item = KEY_CLEAR/AGAIN
item = KEY_CRSEL/PROPS
item = KEY_EXSEL
item = KEY_LEFTCONTROL
item = KEY_LEFTSHIFT
item = KEY_LEFTALT
item = KEY_LEFTGUI
item = KEY_RIGHTCONTROL
item = KEY_RIGHTSHIFT
item = KEY_RIGHTALT
item = KEY_RIGHTGUI
[Keyboard press on L2/LT Hold Mod]
group = true
shortdesc =
byteoffset = 67
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Modifier: NONE
item = Modifier: SHIFT
item = Modifier: CTRL
item = Modifier: ALT
item = Modifier: CTRL & ALT
item = Modifier: SHIFT & CTRL
item = Modifier: SHIFT & ALT
item = Modifier: SHIFT & CTRL & ALT
[Slot Control]
collapsible = 2
shortdesc = <<Important:
You can only switch to Slots that have a script/gamepack installed.
Switching Slots via custom buttons has to be supported by each script you are using.
If you switch to "Slot 0" or any Slot that has a script without this custom setting you can only change slots with the Default Button combinations:
HOLD R1/RB + TAP HOME = CHANGE SLOT +1
HOLD L1/LB + TAP HOME = CHANGE SLOT -1
HOLD R1/RB + L1/LB + TAP Home = LOAD "SLOT 0" (empty slot)
MULTILINE
control = info
[Slot Control Tap / Hold Limit]
group = true
shortdesc = <<Single Button to multiple Actions - Tap Time Limit in milliseconds
Button hold time < time set will do the first action selected
Button hold time > time set will do the second action selected
MULTILINE
byteoffset = 81
bitsize = 16
control = spinbox
default = 250
step = 1
minimum = 150
maximum = 1000
[Switch Slot on L1/LB]
group = true
shortdesc = <<Switch Slot on L1/LB
MULTILINE
byteoffset = 80
bitsize = 1
bitoffset = 0
control = checkbox
default = 0
item = Allow Use of L1/LB to switch T2 Slot
[Switch Slot on L1/LB Tap To]
group = true
shortdesc = <<A short press switches to:
MULTILINE
byteoffset = 83
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Do Nothing
item = Slot 0
item = Slot 1
item = Slot 2
item = Slot 3
item = Slot 4 (SD-Card required)
item = Slot 5 (SD-Card required)
item = Slot 6 (SD-Card required)
item = Slot 7 (SD-Card required)
item = Slot 8 (SD-Card required)
item = Slot 9 (SD-Card required)
item = Previous Slot
item = Next Slot
[Switch Slot on L1/LB Hold To]
group = true
shortdesc = <<A longer hold switches to:
MULTILINE
byteoffset = 84
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Do Nothing
item = Slot 0
item = Slot 1
item = Slot 2
item = Slot 3
item = Slot 4 (SD-Card required)
item = Slot 5 (SD-Card required)
item = Slot 6 (SD-Card required)
item = Slot 7 (SD-Card required)
item = Slot 8 (SD-Card required)
item = Slot 9 (SD-Card required)
item = Previous Slot
item = Next Slot
[Switch Slot on R1/RB]
group = true
shortdesc = <<Switch Slot on R1/RB
MULTILINE
byteoffset = 80
bitsize = 1
bitoffset = 1
control = checkbox
default = 0
item = Allow Use of R1/RB to switch T2 Slot
[Switch Slot on R1/RB Tap To]
group = true
shortdesc = <<A short press switches to:
MULTILINE
byteoffset = 85
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Do Nothing
item = Slot 0 (unload script)
item = Slot 1
item = Slot 2
item = Slot 3
item = Slot 4 (SD-Card required)
item = Slot 5 (SD-Card required)
item = Slot 6 (SD-Card required)
item = Slot 7 (SD-Card required)
item = Slot 8 (SD-Card required)
item = Slot 9 (SD-Card required)
item = Previous Slot
item = Next Slot
[Switch Slot on R1/RB Hold To]
group = true
shortdesc = <<A longer hold switches to:
MULTILINE
byteoffset = 86
bitsize = 8
bitoffset = 0
control = combobox
default = 0
item = Do Nothing
item = Slot 0 (unload script)
item = Slot 1
item = Slot 2
item = Slot 3
item = Slot 4 (SD-Card required)
item = Slot 5 (SD-Card required)
item = Slot 6 (SD-Card required)
item = Slot 7 (SD-Card required)
item = Slot 8 (SD-Card required)
item = Slot 9 (SD-Card required)
item = Previous Slot
item = Next Slot
[Switch Slot on L3/LS Tap]
group = true
shortdesc = <<Switch Slot on L3/LS
MULTILINE
byteoffset = 80
bitsize = 1
bitoffset = 2
control = checkbox
default = 0
item = Allow Use of L3/LS to switch T2 Slot
[Switch Slot on L3 Tap Count]
group = true
shortdesc = <<Switch Slot on R3/RS
MULTILINE
byteoffset = 80
bitsize = 1
bitoffset = 3
control = checkbox
default = 0
item = Allow Use of R3/RS to switch T2 Slot
[Switch Slot on R3 Tap Count]
group = true
shortdesc = <<
*/