#!/usr/bin/env bash
# This is a build script template
# These build scripts are just a convenience for configuring your keyboard (less daunting than CMake)
-# Jacob Alexander 2015
+# Jacob Alexander 2015-2016
## KLL Configuration ##
# Generally shouldn't be changed, this will affect every layer
-BaseMap="defaultMap leftHand slave1 rightHand"
+BaseMap="scancode_map leftHand slave1 rightHand"
# This is the default layer of the keyboard
# NOTE: To combine kll files into a single layout, separate them by spaces
#!/usr/bin/env bash
# This is a build script template
# These build scripts are just a convenience for configuring your keyboard (less daunting than CMake)
-# Jacob Alexander 2015
+# Jacob Alexander 2015-2016
## KLL Configuration ##
# Generally shouldn't be changed, this will affect every layer
-BaseMap="defaultMap"
+BaseMap="scancode_map"
# This is the default layer of the keyboard
# NOTE: To combine kll files into a single layout, separate them by spaces
--- /dev/null
+#!/usr/bin/env bash
+# This is a build script template
+# These build scripts are just a convenience for configuring your keyboard (less daunting than CMake)
+# Jacob Alexander 2016
+
+
+
+#################
+# Configuration #
+#################
+
+# Feel free to change the variables in this section to configure your keyboard
+
+BuildPath="IC60"
+
+## KLL Configuration ##
+
+# Generally shouldn't be changed, this will affect every layer
+BaseMap="scancode_map"
+
+# This is the default layer of the keyboard
+# NOTE: To combine kll files into a single layout, separate them by spaces
+# e.g. DefaultMap="mylayout mylayoutmod"
+DefaultMap="md1Overlay stdFuncMap"
+
+# This is where you set the additional layers
+# NOTE: Indexing starts at 1
+# NOTE: Each new layer is another array entry
+# e.g. PartialMaps[1]="layer1 layer1mod"
+# PartialMaps[2]="layer2"
+# PartialMaps[3]="layer3"
+PartialMaps[1]="hhkbpro2"
+
+
+
+##########################
+# Advanced Configuration #
+##########################
+
+# Don't change the variables in this section unless you know what you're doing
+# These are useful for completely custom keyboards
+# NOTE: Changing any of these variables will require a force build to compile correctly
+
+# Keyboard Module Configuration
+ScanModule="MD1.1"
+MacroModule="PartialMap"
+OutputModule="pjrcUSB"
+DebugModule="full"
+
+# Microcontroller
+Chip="mk20dx128vlf5"
+
+# Compiler Selection
+Compiler="gcc"
+
+
+
+########################
+# Bash Library Include #
+########################
+
+# Shouldn't need to touch this section
+
+# Check if the library can be found
+if [ ! -f cmake.bash ]; then
+ echo "ERROR: Cannot find 'cmake.bash'"
+ exit 1
+fi
+
+# Load the library
+source cmake.bash
+
#!/usr/bin/env bash
# This is a build script template
# These build scripts are just a convenience for configuring your keyboard (less daunting than CMake)
-# Jacob Alexander 2015
+# Jacob Alexander 2015-2016
## KLL Configuration ##
# Generally shouldn't be changed, this will affect every layer
-BaseMap="defaultMap"
+BaseMap="scancode_map"
# This is the default layer of the keyboard
# NOTE: To combine kll files into a single layout, separate them by spaces
#!/usr/bin/env bash
# This is a build script template
# These build scripts are just a convenience for configuring your keyboard (less daunting than CMake)
-# Jacob Alexander 2015
+# Jacob Alexander 2015-2016
## KLL Configuration ##
# Generally shouldn't be changed, this will affect every layer
-BaseMap="defaultMap"
+BaseMap="scancode_map"
# This is the default layer of the keyboard
# NOTE: To combine kll files into a single layout, separate them by spaces
string ( REPLACE " " ";" MAP_LIST ${BaseMap} ) # Change spaces to semicolons
foreach ( MAP ${MAP_LIST} )
- # Only check the Scan Module for BaseMap .kll files, default to defaultMap.kll
+ # Only check the Scan Module for BaseMap .kll files, default to scancode_map.kll or defaultMap.kll
if ( NOT EXISTS ${pathname}/${MAP}.kll )
- set ( BaseMap_Args ${BaseMap_Args} ${pathname}/defaultMap.kll )
- set ( KLL_DEPENDS ${KLL_DEPENDS} ${pathname}/defaultMap.kll )
+ if ( EXISTS ${pathname}/scancode_map.kll )
+ set ( BaseMap_Args ${BaseMap_Args} ${pathname}/scancode_map.kll )
+ set ( KLL_DEPENDS ${KLL_DEPENDS} ${pathname}/scancode_map.kll )
+ else ()
+ set ( BaseMap_Args ${BaseMap_Args} ${pathname}/defaultMap.kll )
+ set ( KLL_DEPENDS ${KLL_DEPENDS} ${pathname}/defaultMap.kll )
+ endif ()
elseif ( EXISTS "${pathname}/${MAP}.kll" )
set ( BaseMap_Args ${BaseMap_Args} ${pathname}/${MAP}.kll )
set ( KLL_DEPENDS ${KLL_DEPENDS} ${pathname}/${MAP}.kll )
extern index_uint_t macroTriggerMacroPendingListSize;
// Interconnect ScanCode Cache
-#if defined(ConnectEnabled_define)
+#if defined(ConnectEnabled_define) || defined(PressReleaseCache_define)
// TODO This can be shrunk by the size of the max node 0 ScanCode
TriggerGuide macroInterconnectCache[ MaxScanCode ];
uint8_t macroInterconnectCacheSize = 0;
// Add an interconnect ScanCode
// These are handled differently (less information is sent, hold/off states must be assumed)
-#if defined(ConnectEnabled_define)
-inline void Macro_interconnectAdd( void *trigger_ptr )
+#if defined(ConnectEnabled_define) || defined(PressReleaseCache_define)
+void Macro_pressReleaseAdd( void *trigger_ptr )
{
TriggerGuide *trigger = (TriggerGuide*)trigger_ptr;
if ( USBKeys_Sent != 0 )
return;
+#if defined(ConnectEnabled_define) || defined(PressReleaseCache_define)
#if defined(ConnectEnabled_define)
// Check if there are any ScanCodes in the interconnect cache to process
if ( Connect_master && macroInterconnectCacheSize > 0 )
+#endif
{
// Iterate over all the cache ScanCodes
uint8_t currentInterconnectCacheSize = macroInterconnectCacheSize;
void Macro_analogState( uint8_t scanCode, uint8_t state );
void Macro_keyState( uint8_t scanCode, uint8_t state );
void Macro_ledState( uint8_t ledCode, uint8_t state );
-void Macro_interconnectAdd( void *trigger ); // triggers is of type TriggerGuide, void* for circular dependencies
+void Macro_pressReleaseAdd( void *trigger ); // triggers is of type TriggerGuide, void* for circular dependencies
void Macro_process();
void Macro_setup();
-/* Copyright (C) 2012,2014 by Jacob Alexander
+/* Copyright (C) 2012,2014,2016 by Jacob Alexander
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
#include <Lib/ScanLib.h>
// Project Includes
+#include <kll.h>
+#include <kll_defs.h>
#include <led.h>
+#include <macro.h>
#include <print.h>
// Local Includes
+// ----- Enums -----
+
+// Keypress States
+typedef enum KeyPosition {
+ KeyState_Off = 0,
+ KeyState_Press = 1,
+ KeyState_Hold = 2,
+ KeyState_Release = 3,
+ KeyState_Invalid,
+} KeyPosition;
+
+
+
// ----- Variables -----
// Buffer used to inform the macro processing module which keys have been detected as pressed
// ----- Interrupt Functions -----
// USART Receive Buffer Full Interrupt
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
ISR(USART1_RX_vect)
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+void uart0_status_isr()
+#endif
{
cli(); // Disable Interrupts
uint8_t keyValue = 0x00;
uint8_t keyState = 0x00;
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
// Read the scancode packet from the USART (1st to 8th bits)
keyValue = UDR1;
// Read the release/press bit (9th bit) XXX Unnecessary, and wrong it seems, parity bit? or something else?
keyState = UCSR1B & 0x02;
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+ // UART0_S1 must be read for the interrupt to be cleared
+ if ( UART0_S1 & UART_S1_RDRF )
+ {
+ // Only doing single byte FIFO here
+ keyValue = UART0_D;
+ }
+#endif
// High bit of keyValue, also represents press/release
keyState = keyValue & 0x80 ? 0x00 : 0x02;
{
case 0x00: // Released
dPrintStrs( tmpStr, "R " ); // Debug
-
- // Remove key from press buffer
- removeKeyValue( keyValue & 0x7F );
break;
case 0x02: // Pressed
dPrintStrs( tmpStr, "P " ); // Debug
-
- // New key to process
- processKeyValue( keyValue & 0x7F );
break;
}
+ // Add key event to macro key buffer
+ TriggerGuide guide = {
+ .type = 0x00,
+ .state = keyState == 0x02 ? 0x01 : 0x03,
+ .scanCode = keyValue & 0x7F,
+ };
+ Macro_pressReleaseAdd( &guide );
+
sei(); // Re-enable Interrupts
}
// ----- Functions -----
// Setup
-inline void scan_setup()
+inline void Scan_setup()
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
{
// Setup the the USART interface for keyboard data input
// NOTE: The input data signal needs to be inverted for the Teensy USART to properly work
-
+
// Setup baud rate
// 16 MHz / ( 16 * Baud ) = UBRR
// Baud <- 0.823284 ms per bit, thus 1000 / 0.823284 = 1214.65004 -> 823.2824
// Reset the keyboard before scanning, we might be in a wierd state
scan_resetKeyboard();
}
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+{
+ // Setup the the UART interface for keyboard data input
+ SIM_SCGC4 |= SIM_SCGC4_UART0; // Disable clock gating
+
+ // Pin Setup for UART0
+ PORTB_PCR16 = PORT_PCR_PE | PORT_PCR_PS | PORT_PCR_PFE | PORT_PCR_MUX(3); // RX Pin
+ PORTB_PCR17 = PORT_PCR_DSE | PORT_PCR_SRE | PORT_PCR_MUX(3); // TX Pin
+
+ // Setup baud rate - 1205 Baud
+ // 48 MHz / ( 16 * Baud ) = BDH/L
+ // Baud: 1215 -> 48 MHz / ( 16 * 1215 ) = 2469.1358
+ // Thus baud setting = 2469
+ // NOTE: If finer baud adjustment is needed see UARTx_C4 -> BRFA in the datasheet
+ uint16_t baud = 2469; // Max setting of 8191
+ UART0_BDH = (uint8_t)(baud >> 8);
+ UART0_BDL = (uint8_t)baud;
+
+ // 8 bit, Even Parity, Idle Character bit after stop
+ // NOTE: For 8 bit with Parity you must enable 9 bit transmission (pg. 1065)
+ // You only need to use UART0_D for 8 bit reading/writing though
+ // UART_C1_M UART_C1_PE UART_C1_PT UART_C1_ILT
+ UART0_C1 = UART_C1_M | UART_C1_PE | UART_C1_ILT;
+
+ // Number of bytes in FIFO before TX Interrupt
+ UART0_TWFIFO = 1;
+
+ // Number of bytes in FIFO before RX Interrupt
+ UART0_RWFIFO = 1;
+
+ // TX FIFO Disabled, TX FIFO Size 1 (Max 8 datawords), RX FIFO Enabled, RX FIFO Size 1 (Max 8 datawords)
+ // TX/RX FIFO Size:
+ // 0x0 - 1 dataword
+ // 0x1 - 4 dataword
+ // 0x2 - 8 dataword
+ //UART0_PFIFO = UART_PFIFO_TXFE | /*TXFIFOSIZE*/ (0x0 << 4) | UART_PFIFO_RXFE | /*RXFIFOSIZE*/ (0x0);
+
+ // Reciever Inversion Disabled, LSBF
+ // UART_S2_RXINV UART_S2_MSBF
+ UART0_S2 |= 0x00;
+
+ // Transmit Inversion Disabled
+ // UART_C3_TXINV
+ UART0_C3 |= 0x00;
+
+ // TX Disabled, RX Enabled, RX Interrupt Enabled
+ // UART_C2_TE UART_C2_RE UART_C2_RIE
+ UART0_C2 = UART_C2_RE | UART_C2_RIE | UART_C2_TE;
+
+ // Add interrupt to the vector table
+ NVIC_ENABLE_IRQ( IRQ_UART0_STATUS );
+
+ // Reset the keyboard before scanning, we might be in a wierd state
+ Scan_resetKeyboard();
+}
+#endif
// Main Detection Loop
// Not needed for the BETKB, this is just a busy loop
-inline uint8_t scan_loop()
+inline uint8_t Scan_loop()
{
return 0;
}
-void processKeyValue( uint8_t keyValue )
-{
- // Interpret scan code
- switch ( keyValue )
- {
- case 0x00: // Break code from input?
- break;
- default:
- // Make sure the key isn't already in the buffer
- for ( uint8_t c = 0; c < KeyIndex_BufferUsed + 1; c++ )
- {
- // Key isn't in the buffer yet
- if ( c == KeyIndex_BufferUsed )
- {
- Macro_bufferAdd( keyValue );
-
- // Only send data if enabled
- if ( KeyIndex_Add_InputSignal )
- scan_sendData( KeyIndex_Add_InputSignal );
- break;
- }
-
- // Key already in the buffer
- if ( KeyIndex_Buffer[c] == keyValue )
- break;
- }
- break;
- }
-}
-
-void removeKeyValue( uint8_t keyValue )
-{
- // Check for the released key, and shift the other keys lower on the buffer
- uint8_t c;
- for ( c = 0; c < KeyIndex_BufferUsed; c++ )
- {
- // Key to release found
- if ( KeyIndex_Buffer[c] == keyValue )
- {
- // Shift keys from c position
- for ( uint8_t k = c; k < KeyIndex_BufferUsed - 1; k++ )
- KeyIndex_Buffer[k] = KeyIndex_Buffer[k + 1];
-
- // Decrement Buffer
- KeyIndex_BufferUsed--;
-
- break;
- }
- }
-
- // Error case (no key to release)
- if ( c == KeyIndex_BufferUsed + 1 )
- {
- errorLED( 1 );
- char tmpStr[6];
- hexToStr( keyValue, tmpStr );
- erro_dPrint( "Could not find key to release: ", tmpStr );
- }
-}
-
// Send data
uint8_t scan_sendData( uint8_t dataPayload )
{
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
// Enable the USART Transmitter
UCSR1B |= (1 << 3);
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+#endif
// Debug
char tmpStr[6];
hexToStr( dataPayload, tmpStr );
info_dPrint( "Sending - ", tmpStr );
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
UDR1 = dataPayload;
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+ UART0_D = dataPayload;
+#endif
// Wait for the payload
_delay_us( 800 );
+#if defined(_at90usb162_) || defined(_atmega32u4_) || defined(_at90usb646_) || defined(_at90usb1286_) // AVR
// Disable the USART Transmitter
UCSR1B &= ~(1 << 3);
+#elif defined(_mk20dx128_) || defined(_mk20dx256_) // ARM
+#endif
return 0;
}
// Signal KeyIndex_Buffer that it has been properly read
-void Scan_finishedWithBuffer( uint8_t sentKeys )
+void Scan_finishedWithMacro( uint8_t sentKeys )
{
}
// Signal that the keys have been properly sent over USB
-void Scan_finishedWithUSBBuffer( uint8_t sentKeys )
+void Scan_finishedWithOutput( uint8_t sentKeys )
{
}
// Reset/Hold keyboard
// NOTE: Does nothing with the BETKB
-void scan_lockKeyboard( void )
+void Scan_lockKeyboard()
{
}
// NOTE: Does nothing with the BETKB
-void scan_unlockKeyboard( void )
+void Scan_unlockKeyboard()
{
}
// Reset Keyboard
-void scan_resetKeyboard( void )
+void Scan_resetKeyboard()
{
// Not a calculated valued...
_delay_ms( 50 );
}
+// NOTE: Does nothing with the BETKB
+void Scan_currentChange( unsigned int current )
+{
+}
+
-/* Copyright (C) 2012,2014-2015 by Jacob Alexander
+/* Copyright (C) 2012,2014-2016 by Jacob Alexander
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
// ----- Functions -----
// Functions used by main.c
-void Scan_setup( void );
-uint8_t Scan_loop( void );
+void Scan_setup();
+uint8_t Scan_loop();
// Functions available to macro.c
uint8_t Scan_sendData( uint8_t dataPayload );
-void Scan_finishedWithBuffer( uint8_t sentKeys );
-void Scan_finishedWithUSBBuffer( uint8_t sentKeys );
-void Scan_lockKeyboard( void );
-void Scan_unlockKeyboard( void );
-void Scan_resetKeyboard( void );
+void Scan_finishedWithMacro( uint8_t sentKeys );
+void Scan_finishedWithOutput( uint8_t sentKeys );
+void Scan_lockKeyboard();
+void Scan_unlockKeyboard();
+void Scan_resetKeyboard();
+void Scan_currentChange( unsigned int current );
--- /dev/null
+Name = BETKB;
+Version = 0.1;
+Author = "HaaTa (Jacob Alexander) 2016";
+KLL = 0.3d;
+
+# Modified Date
+Date = 2016-07-06;
+
+# Options
+
+# Press/Release Cache
+PressReleaseCache => PressReleaseCache_define;
+PressReleaseCache = 1;
+
+# TODO - Not finished
+S0x08 : U"Backspace";
+S0x09 : U"Tab";
+
+S0x1B : U"Esc";
+
+S0x20 : U"Space";
+
+S0x27 : U"Quote";
+
+S0x2C : U"Comma";
+S0x2D : U"Minus";
+S0x2E : U"Period";
+S0x2F : U"Slash";
+S0x30 : U"0";
+S0x31 : U"1";
+S0x32 : U"2";
+S0x33 : U"3";
+S0x34 : U"4";
+S0x35 : U"5";
+S0x36 : U"6";
+S0x37 : U"7";
+S0x38 : U"8";
+S0x39 : U"9";
+S0x3B : U"Semicolon";
+S0x3D : U"Equal";
+S0x5B : U"LBracket";
+S0x5C : U"Backslash";
+S0x5D : U"RBracket";
+
+S0x60 : U"Backtick";
+S0x61 : U"A";
+S0x62 : U"B";
+S0x63 : U"C";
+S0x64 : U"D";
+S0x65 : U"E";
+S0x66 : U"F";
+S0x67 : U"G";
+S0x68 : U"H";
+S0x69 : U"I";
+S0x6A : U"J";
+S0x6B : U"K";
+S0x6C : U"L";
+S0x6D : U"M";
+S0x6E : U"N";
+S0x6F : U"O";
+S0x70 : U"P";
+S0x71 : U"Q";
+S0x72 : U"R";
+S0x73 : U"S";
+S0x74 : U"T";
+S0x75 : U"U";
+S0x76 : U"V";
+S0x77 : U"W";
+S0x78 : U"X";
+S0x79 : U"Y";
+S0x7A : U"Z";
+
+S0x7F : U"Delete";
+
+S0xB1 : U"P0";
+S0xB2 : U"P.";
+
+S0xC0 : U"P1";
+S0xC1 : U"P2";
+S0xC2 : U"P3";
+S0xC3 : U"PEnter";
+
+S0xD0 : U"P4";
+S0xD1 : U"P5";
+S0xD2 : U"P6";
+S0xD3 : U"P,";
+
+S0xE1 : U"P7";
+S0xE2 : U"P8";
+S0xE3 : U"P9";
+S0xE4 : U"P-";
+
+S0xF1 : U"Up";
+S0xF2 : U"Down";
+S0xF3 : U"Left";
+S0xF4 : U"Right";
+S0xF5 : U"LShift";
+S0xF6 : U"Ctrl";
+
###| CMake Kiibohd Controller Scan Module |###
#
-# Written by Jacob Alexander in 2011,2014 for the Kiibohd Controller
+# Written by Jacob Alexander in 2011,2014,2016 for the Kiibohd Controller
#
# Released into the Public Domain
#
# Module C files
#
-set( SCAN_SRCS
+set( Module_SRCS
scan_loop.c
)
###
# Compiler Family Compatibility
#
-set( ScanModuleCompatibility
+set( ModuleCompatibility
+ arm
avr
)
+++ /dev/null
-Name = MD1.1;
-Version = 0.3d;
-Author = "HaaTa (Jacob Alexander) 2014-2016";
-KLL = 0.3c;
-
-# Modified Date
-Date = 2016-02-06;
-
-
-S0x00 : U"Esc";
-S0x01 : U"1";
-S0x02 : U"2";
-S0x03 : U"3";
-S0x04 : U"4";
-S0x05 : U"5";
-S0x06 : U"6";
-S0x07 : U"7";
-S0x08 : U"8";
-S0x09 : U"9";
-S0x0A : U"0";
-S0x0B : U"Minus";
-S0x0C : U"Equal";
-S0x0D : U"Backslash";
-S0x0E : U"Backtick";
-S0x0F : U"Tab";
-S0x10 : U"Q";
-S0x11 : U"W";
-S0x12 : U"E";
-S0x13 : U"R";
-S0x14 : U"T";
-S0x15 : U"Y";
-S0x16 : U"U";
-S0x17 : U"I";
-S0x18 : U"O";
-S0x19 : U"P";
-S0x1A : U"LBrace";
-S0x1B : U"RBrace";
-S0x1C : U"Backspace";
-S0x1D : U"Ctrl";
-S0x1E : U"A";
-S0x1F : U"S";
-S0x20 : U"D";
-S0x21 : U"F";
-S0x22 : U"G";
-S0x23 : U"H";
-S0x24 : U"J";
-S0x25 : U"K";
-S0x26 : U"L";
-S0x27 : U"Semicolon";
-S0x28 : U"Quote";
-S0x29 : U"Enter";
-S0x2A : U"LShift";
-S0x2B : U"Z";
-S0x2C : U"X";
-S0x2D : U"C";
-S0x2E : U"V";
-S0x2F : U"B";
-S0x30 : U"N";
-S0x31 : U"M";
-S0x32 : U"Comma";
-S0x33 : U"Period";
-S0x34 : U"Slash";
-S0x35 : U"RShift";
-S0x36 : U"Function1"; # Fun key
-S0x37 : U"Function2"; # Left Blank Key
-S0x38 : U"LAlt";
-S0x39 : U"LGui";
-S0x3A : U"Space";
-S0x3B : U"RGui";
-S0x3C : U"RAlt";
-S0x3D : U"Function3"; # Right Blank Key 1
-S0x3E : U"Function4"; # Right Blank Key 2
-
-
-# Custom Action Examples
-
-# Example capability, prints to cli
-action1 => CustomAction_action1_capability(); # No arguments
-
-# Blocks given USB Code, must be used with blockLink
-# Simple example, supports only blocking a single key at a time
-# Keys must be specified using numbers see Macro/PartialMap/usb_hid.h
-blockHold => CustomAction_blockHold_capability( usbCode : 1 ); # Single 8-bit argument
-blockKey => CustomAction_blockKey_capability( usbCode : 1 );
-
-
-
-# Defines available to the MD1_1 Scan Module
-
-# LED Default Enable Mask Override
-#
-# Each LED is represented by a single bit
-# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
-ISSILedMask1 = "
- 0xFF, 0x00, /* C1-1 -> C1-16 */
- 0xFF, 0x00, /* C2-1 -> C2-16 */
- 0xFF, 0x00, /* C3-1 -> C3-16 */
- 0xFF, 0x00, /* C4-1 -> C4-16 */
- 0xFF, 0x00, /* C5-1 -> C5-16 */
- 0xFF, 0x00, /* C6-1 -> C6-16 */
- 0xFF, 0x00, /* C7-1 -> C7-16 */
- 0x7F, 0x00, /* C8-1 -> C8-16 */
- 0x00, 0x00, /* C9-1 -> C9-16 */
-";
-
-# LED Brightness Override
-#
-# Each LED channel supports 256 levels (8-bit control)
-# By default, LEDs are set to 0 brightness
-#ISSILedBrightness1 = "
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
-#";
-
-# Full brightness example
-ISSILedBrightness1 = "
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
-";
-
--- /dev/null
+Name = MD1.1;
+Version = 0.3d;
+Author = "HaaTa (Jacob Alexander) 2014-2016";
+KLL = 0.3c;
+
+# Modified Date
+Date = 2016-02-06;
+
+
+S0x00 : U"Esc";
+S0x01 : U"1";
+S0x02 : U"2";
+S0x03 : U"3";
+S0x04 : U"4";
+S0x05 : U"5";
+S0x06 : U"6";
+S0x07 : U"7";
+S0x08 : U"8";
+S0x09 : U"9";
+S0x0A : U"0";
+S0x0B : U"Minus";
+S0x0C : U"Equal";
+S0x0D : U"Backslash";
+S0x0E : U"Backtick";
+S0x0F : U"Tab";
+S0x10 : U"Q";
+S0x11 : U"W";
+S0x12 : U"E";
+S0x13 : U"R";
+S0x14 : U"T";
+S0x15 : U"Y";
+S0x16 : U"U";
+S0x17 : U"I";
+S0x18 : U"O";
+S0x19 : U"P";
+S0x1A : U"LBrace";
+S0x1B : U"RBrace";
+S0x1C : U"Backspace";
+S0x1D : U"Ctrl";
+S0x1E : U"A";
+S0x1F : U"S";
+S0x20 : U"D";
+S0x21 : U"F";
+S0x22 : U"G";
+S0x23 : U"H";
+S0x24 : U"J";
+S0x25 : U"K";
+S0x26 : U"L";
+S0x27 : U"Semicolon";
+S0x28 : U"Quote";
+S0x29 : U"Enter";
+S0x2A : U"LShift";
+S0x2B : U"Z";
+S0x2C : U"X";
+S0x2D : U"C";
+S0x2E : U"V";
+S0x2F : U"B";
+S0x30 : U"N";
+S0x31 : U"M";
+S0x32 : U"Comma";
+S0x33 : U"Period";
+S0x34 : U"Slash";
+S0x35 : U"RShift";
+S0x36 : U"Function1"; # Fun key
+S0x37 : U"Function2"; # Left Blank Key
+S0x38 : U"LAlt";
+S0x39 : U"LGui";
+S0x3A : U"Space";
+S0x3B : U"RGui";
+S0x3C : U"RAlt";
+S0x3D : U"Function3"; # Right Blank Key 1
+S0x3E : U"Function4"; # Right Blank Key 2
+
+
+# Custom Action Examples
+
+# Example capability, prints to cli
+action1 => CustomAction_action1_capability(); # No arguments
+
+# Blocks given USB Code, must be used with blockLink
+# Simple example, supports only blocking a single key at a time
+# Keys must be specified using numbers see Macro/PartialMap/usb_hid.h
+blockHold => CustomAction_blockHold_capability( usbCode : 1 ); # Single 8-bit argument
+blockKey => CustomAction_blockKey_capability( usbCode : 1 );
+
+
+
+# Defines available to the MD1_1 Scan Module
+
+# LED Default Enable Mask Override
+#
+# Each LED is represented by a single bit
+# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
+ISSILedMask1 = "
+ 0xFF, 0x00, /* C1-1 -> C1-16 */
+ 0xFF, 0x00, /* C2-1 -> C2-16 */
+ 0xFF, 0x00, /* C3-1 -> C3-16 */
+ 0xFF, 0x00, /* C4-1 -> C4-16 */
+ 0xFF, 0x00, /* C5-1 -> C5-16 */
+ 0xFF, 0x00, /* C6-1 -> C6-16 */
+ 0xFF, 0x00, /* C7-1 -> C7-16 */
+ 0x7F, 0x00, /* C8-1 -> C8-16 */
+ 0x00, 0x00, /* C9-1 -> C9-16 */
+";
+
+# LED Brightness Override
+#
+# Each LED channel supports 256 levels (8-bit control)
+# By default, LEDs are set to 0 brightness
+#ISSILedBrightness1 = "
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
+#";
+
+# Full brightness example
+ISSILedBrightness1 = "
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
+";
+
+++ /dev/null
-Name = MD1;
-Version = 0.3;
-Author = "HaaTa (Jacob Alexander) 2014-2015";
-KLL = 0.3c;
-
-# Modified Date
-Date = 2015-08-16;
-
-
-S0x00 : U"Esc";
-S0x01 : U"1";
-S0x02 : U"2";
-S0x03 : U"3";
-S0x04 : U"4";
-S0x05 : U"5";
-S0x06 : U"6";
-S0x07 : U"7";
-S0x08 : U"8";
-S0x09 : U"9";
-S0x0A : U"0";
-S0x0B : U"Minus";
-S0x0C : U"Equal";
-S0x0D : U"Backslash";
-S0x0E : U"Backtick";
-S0x0F : U"Tab";
-S0x10 : U"Q";
-S0x11 : U"W";
-S0x12 : U"E";
-S0x13 : U"R";
-S0x14 : U"T";
-S0x15 : U"Y";
-S0x16 : U"U";
-S0x17 : U"I";
-S0x18 : U"O";
-S0x19 : U"P";
-S0x1A : U"LBrace";
-S0x1B : U"RBrace";
-S0x1C : U"Backspace";
-S0x1D : U"Ctrl";
-S0x1E : U"A";
-S0x1F : U"S";
-S0x20 : U"D";
-S0x21 : U"F";
-S0x22 : U"G";
-S0x23 : U"H";
-S0x24 : U"J";
-S0x25 : U"K";
-S0x26 : U"L";
-S0x27 : U"Semicolon";
-S0x28 : U"Quote";
-S0x29 : U"Enter";
-S0x2A : U"LShift";
-S0x2B : U"Z";
-S0x2C : U"X";
-S0x2D : U"C";
-S0x2E : U"V";
-S0x2F : U"B";
-S0x30 : U"N";
-S0x31 : U"M";
-S0x32 : U"Comma";
-S0x33 : U"Period";
-S0x34 : U"Slash";
-S0x35 : U"RShift";
-S0x36 : U"Function1"; # Fun key
-S0x37 : U"Function2"; # Left Blank Key
-S0x38 : U"LAlt";
-S0x39 : U"LGui";
-S0x3A : U"Space";
-S0x3B : U"RGui";
-S0x3C : U"RAlt";
-S0x3D : U"Function3"; # Right Blank Key 1
-S0x3E : U"Function4"; # Right Blank Key 2
-
-
-# Custom Action Examples
-
-# Example capability, prints to cli
-action1 => CustomAction_action1_capability(); # No arguments
-
-# Blocks given USB Code, must be used with blockLink
-# Simple example, supports only blocking a single key at a time
-# Keys must be specified using numbers see Macro/PartialMap/usb_hid.h
-blockHold => CustomAction_blockHold_capability( usbCode : 1 ); # Single 8-bit argument
-blockKey => CustomAction_blockKey_capability( usbCode : 1 );
-
--- /dev/null
+Name = MD1;
+Version = 0.3;
+Author = "HaaTa (Jacob Alexander) 2014-2015";
+KLL = 0.3c;
+
+# Modified Date
+Date = 2015-08-16;
+
+
+S0x00 : U"Esc";
+S0x01 : U"1";
+S0x02 : U"2";
+S0x03 : U"3";
+S0x04 : U"4";
+S0x05 : U"5";
+S0x06 : U"6";
+S0x07 : U"7";
+S0x08 : U"8";
+S0x09 : U"9";
+S0x0A : U"0";
+S0x0B : U"Minus";
+S0x0C : U"Equal";
+S0x0D : U"Backslash";
+S0x0E : U"Backtick";
+S0x0F : U"Tab";
+S0x10 : U"Q";
+S0x11 : U"W";
+S0x12 : U"E";
+S0x13 : U"R";
+S0x14 : U"T";
+S0x15 : U"Y";
+S0x16 : U"U";
+S0x17 : U"I";
+S0x18 : U"O";
+S0x19 : U"P";
+S0x1A : U"LBrace";
+S0x1B : U"RBrace";
+S0x1C : U"Backspace";
+S0x1D : U"Ctrl";
+S0x1E : U"A";
+S0x1F : U"S";
+S0x20 : U"D";
+S0x21 : U"F";
+S0x22 : U"G";
+S0x23 : U"H";
+S0x24 : U"J";
+S0x25 : U"K";
+S0x26 : U"L";
+S0x27 : U"Semicolon";
+S0x28 : U"Quote";
+S0x29 : U"Enter";
+S0x2A : U"LShift";
+S0x2B : U"Z";
+S0x2C : U"X";
+S0x2D : U"C";
+S0x2E : U"V";
+S0x2F : U"B";
+S0x30 : U"N";
+S0x31 : U"M";
+S0x32 : U"Comma";
+S0x33 : U"Period";
+S0x34 : U"Slash";
+S0x35 : U"RShift";
+S0x36 : U"Function1"; # Fun key
+S0x37 : U"Function2"; # Left Blank Key
+S0x38 : U"LAlt";
+S0x39 : U"LGui";
+S0x3A : U"Space";
+S0x3B : U"RGui";
+S0x3C : U"RAlt";
+S0x3D : U"Function3"; # Right Blank Key 1
+S0x3E : U"Function4"; # Right Blank Key 2
+
+
+# Custom Action Examples
+
+# Example capability, prints to cli
+action1 => CustomAction_action1_capability(); # No arguments
+
+# Blocks given USB Code, must be used with blockLink
+# Simple example, supports only blocking a single key at a time
+# Keys must be specified using numbers see Macro/PartialMap/usb_hid.h
+blockHold => CustomAction_blockHold_capability( usbCode : 1 ); # Single 8-bit argument
+blockKey => CustomAction_blockKey_capability( usbCode : 1 );
+
+++ /dev/null
-Name = MDErgo1;
-Version = 0.2;
-Author = "HaaTa (Jacob Alexander) 2014-2015";
-KLL = 0.3c;
-
-# Modified Date
-Date = 2015-08-15;
-
-########
-# NOTE #
-########
-
-# Default ScanCode mappings are in rightHand.kll and leftHand.kll
-# To change which node you are refering to, set the ConnectId variable
-# i.e.
-# ConnectId = 0;
-# S0x02 : U"A"; # Sets scan code 0x02 on keyboard connected to USB
-# ConnectId = 1;
-# S0x02 : U"B"; # Sets scan code 0x02 on the first slave node
-#
-# ConnectId may be set in the previously parsed kll file
-# In general you shouldn't have to worry about setting ConnectId unless you want a single configuration file
-
-
-#
-# Defines available to the MDErgo1 Scan Module
-#
-
-# LED Default Enable Mask Override
-#
-# Each LED is represented by a single bit
-# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
-ISSILedMask1 = "
- 0xFF, 0x00, /* C1-1 -> C1-16 */
- 0xFF, 0x00, /* C2-1 -> C2-16 */
- 0xFF, 0x00, /* C3-1 -> C3-16 */
- 0xFF, 0x00, /* C4-1 -> C4-16 */
- 0x3F, 0x00, /* C5-1 -> C5-16 */
- 0x00, 0x00, /* C6-1 -> C6-16 */
- 0x00, 0x00, /* C7-1 -> C7-16 */
- 0x00, 0x00, /* C8-1 -> C8-16 */
- 0x00, 0x00, /* C9-1 -> C9-16 */
-";
-
-# LED Brightness Override
-#
-# Each LED channel supports 256 levels (8-bit control)
-ISSILedBrightness1 = "
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
-";
-
-# LCD Backlight Channel Brightness Override
-# There are 3 channels, RGB
-# In order to get other colors you must mix the 3 colors
-# Each channel is a 16-bit register (65536 levels)
-# Technically, this means, the backlight is a 48-bit RGB pixel
-# In practice, it may be difficult to get color consistency at times if too bright or too dim
-#
-# Defaults to 6% brightness, white
-STLcdBacklightRed = 0x0FFF;
-STLcdBacklightGreen = 0x0FFF;
-STLcdBacklightBlue = 0x0FFF;
-
-# LCD Image Override
-#
-# The easiest way to generate this data is using the bitmap2Struct.py script in the STLcd folder
-# It will output the necessary uint8_t array to set here
-#
-STLcdDefaultImage = "
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-";
-
--- /dev/null
+Name = MDErgo1;
+Version = 0.2;
+Author = "HaaTa (Jacob Alexander) 2014-2015";
+KLL = 0.3c;
+
+# Modified Date
+Date = 2015-08-15;
+
+########
+# NOTE #
+########
+
+# Default ScanCode mappings are in rightHand.kll and leftHand.kll
+# To change which node you are refering to, set the ConnectId variable
+# i.e.
+# ConnectId = 0;
+# S0x02 : U"A"; # Sets scan code 0x02 on keyboard connected to USB
+# ConnectId = 1;
+# S0x02 : U"B"; # Sets scan code 0x02 on the first slave node
+#
+# ConnectId may be set in the previously parsed kll file
+# In general you shouldn't have to worry about setting ConnectId unless you want a single configuration file
+
+
+#
+# Defines available to the MDErgo1 Scan Module
+#
+
+# LED Default Enable Mask Override
+#
+# Each LED is represented by a single bit
+# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
+ISSILedMask1 = "
+ 0xFF, 0x00, /* C1-1 -> C1-16 */
+ 0xFF, 0x00, /* C2-1 -> C2-16 */
+ 0xFF, 0x00, /* C3-1 -> C3-16 */
+ 0xFF, 0x00, /* C4-1 -> C4-16 */
+ 0x3F, 0x00, /* C5-1 -> C5-16 */
+ 0x00, 0x00, /* C6-1 -> C6-16 */
+ 0x00, 0x00, /* C7-1 -> C7-16 */
+ 0x00, 0x00, /* C8-1 -> C8-16 */
+ 0x00, 0x00, /* C9-1 -> C9-16 */
+";
+
+# LED Brightness Override
+#
+# Each LED channel supports 256 levels (8-bit control)
+ISSILedBrightness1 = "
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
+";
+
+# LCD Backlight Channel Brightness Override
+# There are 3 channels, RGB
+# In order to get other colors you must mix the 3 colors
+# Each channel is a 16-bit register (65536 levels)
+# Technically, this means, the backlight is a 48-bit RGB pixel
+# In practice, it may be difficult to get color consistency at times if too bright or too dim
+#
+# Defaults to 6% brightness, white
+STLcdBacklightRed = 0x0FFF;
+STLcdBacklightGreen = 0x0FFF;
+STLcdBacklightBlue = 0x0FFF;
+
+# LCD Image Override
+#
+# The easiest way to generate this data is using the bitmap2Struct.py script in the STLcd folder
+# It will output the necessary uint8_t array to set here
+#
+STLcdDefaultImage = "
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+";
+
}
// Send ScanCode to macro module
- Macro_interconnectAdd( &Connect_receive_ScanCodeBuffer );
+ Macro_pressReleaseAdd( &Connect_receive_ScanCodeBuffer );
}
break;
+++ /dev/null
-Name = WhiteFox;
-Version = 0.2;
-Author = "HaaTa (Jacob Alexander) 2015";
-KLL = 0.3c;
-
-# Modified Date
-Date = 2015-08-16;
-
-
-S0x00 : U"Esc";
-S0x01 : U"1";
-S0x02 : U"2";
-S0x03 : U"3";
-S0x04 : U"4";
-S0x05 : U"5";
-S0x06 : U"6";
-S0x07 : U"7";
-S0x08 : U"8";
-S0x09 : U"9";
-S0x0A : U"0";
-S0x0B : U"Minus";
-S0x0C : U"Equal";
-S0x0D : U"Hash";
-S0x0E : U"Backspace";
-S0x0F : U"BackTick";
-S0x10 : U"Tab";
-S0x11 : U"Q";
-S0x12 : U"W";
-S0x13 : U"E";
-S0x14 : U"R";
-S0x15 : U"T";
-S0x16 : U"Y";
-S0x17 : U"U";
-S0x18 : U"I";
-S0x19 : U"O";
-S0x1A : U"P";
-S0x1B : U"LBrace";
-S0x1C : U"RBrace";
-S0x1D : U"Backslash";
-S0x1E : U"Delete";
-S0x1F : U"CapsLock";
-S0x20 : U"A";
-S0x21 : U"S";
-S0x22 : U"D";
-S0x23 : U"F";
-S0x24 : U"G";
-S0x25 : U"H";
-S0x26 : U"J";
-S0x27 : U"K";
-S0x28 : U"L";
-S0x29 : U"Semicolon";
-S0x2A : U"Quote";
-S0x2B : U"App";
-S0x2C : U"Enter";
-S0x2D : U"PageUp";
-S0x2E : U"LShift";
-S0x2F : U"ISO/";
-S0x30 : U"Z";
-S0x31 : U"X";
-S0x32 : U"C";
-S0x33 : U"V";
-S0x34 : U"B";
-S0x35 : U"N";
-S0x36 : U"M";
-S0x37 : U"Comma";
-S0x38 : U"Period";
-S0x39 : U"Slash";
-S0x3A : U"RShift";
-S0x3B : U"Up";
-S0x3C : U"PageDown";
-S0x3D : U"Ctrl";
-S0x3E : U"Function1";
-S0x3F : U"LAlt";
-S0x40 : U"Space";
-S0x41 : U"RAlt";
-S0x42 : U"Gui";
-S0x43 : U"Menu";
-S0x44 : U"Left";
-S0x45 : U"Down";
-S0x46 : U"Right";
-
-
-# Defines available to the WhiteFox Scan Module
-
-# LED Default Enable Mask Override
-#
-# Each LED is represented by a single bit
-# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
-ISSILedMask1 = "
- 0xFF, 0x00, /* C1-1 -> C1-16 */
- 0xFF, 0x00, /* C2-1 -> C2-16 */
- 0xFF, 0x00, /* C3-1 -> C3-16 */
- 0xFF, 0x00, /* C4-1 -> C4-16 */
- 0xFF, 0x00, /* C5-1 -> C5-16 */
- 0xFF, 0x00, /* C6-1 -> C6-16 */
- 0xFF, 0x00, /* C7-1 -> C7-16 */
- 0xFF, 0x00, /* C8-1 -> C8-16 */
- 0xFF, 0x00, /* C9-1 -> C9-16 */
-";
-
-# LED Brightness Override
-#
-# Each LED channel supports 256 levels (8-bit control)
-# By default, LEDs are set to 0 brightness
-#ISSILedBrightness1 = "
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
-#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
-#";
-
-# Full brightness example
-ISSILedBrightness1 = "
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
-0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
-";
-
--- /dev/null
+Name = WhiteFox;
+Version = 0.2;
+Author = "HaaTa (Jacob Alexander) 2015";
+KLL = 0.3c;
+
+# Modified Date
+Date = 2015-08-16;
+
+
+S0x00 : U"Esc";
+S0x01 : U"1";
+S0x02 : U"2";
+S0x03 : U"3";
+S0x04 : U"4";
+S0x05 : U"5";
+S0x06 : U"6";
+S0x07 : U"7";
+S0x08 : U"8";
+S0x09 : U"9";
+S0x0A : U"0";
+S0x0B : U"Minus";
+S0x0C : U"Equal";
+S0x0D : U"Hash";
+S0x0E : U"Backspace";
+S0x0F : U"BackTick";
+S0x10 : U"Tab";
+S0x11 : U"Q";
+S0x12 : U"W";
+S0x13 : U"E";
+S0x14 : U"R";
+S0x15 : U"T";
+S0x16 : U"Y";
+S0x17 : U"U";
+S0x18 : U"I";
+S0x19 : U"O";
+S0x1A : U"P";
+S0x1B : U"LBrace";
+S0x1C : U"RBrace";
+S0x1D : U"Backslash";
+S0x1E : U"Delete";
+S0x1F : U"CapsLock";
+S0x20 : U"A";
+S0x21 : U"S";
+S0x22 : U"D";
+S0x23 : U"F";
+S0x24 : U"G";
+S0x25 : U"H";
+S0x26 : U"J";
+S0x27 : U"K";
+S0x28 : U"L";
+S0x29 : U"Semicolon";
+S0x2A : U"Quote";
+S0x2B : U"App";
+S0x2C : U"Enter";
+S0x2D : U"PageUp";
+S0x2E : U"LShift";
+S0x2F : U"ISO/";
+S0x30 : U"Z";
+S0x31 : U"X";
+S0x32 : U"C";
+S0x33 : U"V";
+S0x34 : U"B";
+S0x35 : U"N";
+S0x36 : U"M";
+S0x37 : U"Comma";
+S0x38 : U"Period";
+S0x39 : U"Slash";
+S0x3A : U"RShift";
+S0x3B : U"Up";
+S0x3C : U"PageDown";
+S0x3D : U"Ctrl";
+S0x3E : U"Function1";
+S0x3F : U"LAlt";
+S0x40 : U"Space";
+S0x41 : U"RAlt";
+S0x42 : U"Gui";
+S0x43 : U"Menu";
+S0x44 : U"Left";
+S0x45 : U"Down";
+S0x46 : U"Right";
+
+
+# Defines available to the WhiteFox Scan Module
+
+# LED Default Enable Mask Override
+#
+# Each LED is represented by a single bit
+# See (http://www.issi.com/WW/pdf/31FL3731C.pdf) for details
+ISSILedMask1 = "
+ 0xFF, 0x00, /* C1-1 -> C1-16 */
+ 0xFF, 0x00, /* C2-1 -> C2-16 */
+ 0xFF, 0x00, /* C3-1 -> C3-16 */
+ 0xFF, 0x00, /* C4-1 -> C4-16 */
+ 0xFF, 0x00, /* C5-1 -> C5-16 */
+ 0xFF, 0x00, /* C6-1 -> C6-16 */
+ 0xFF, 0x00, /* C7-1 -> C7-16 */
+ 0xFF, 0x00, /* C8-1 -> C8-16 */
+ 0xFF, 0x00, /* C9-1 -> C9-16 */
+";
+
+# LED Brightness Override
+#
+# Each LED channel supports 256 levels (8-bit control)
+# By default, LEDs are set to 0 brightness
+#ISSILedBrightness1 = "
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
+#0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
+#";
+
+# Full brightness example
+ISSILedBrightness1 = "
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C1-1 -> C1-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C2-1 -> C2-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C3-1 -> C3-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C4-1 -> C4-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C5-1 -> C5-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C6-1 -> C6-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C7-1 -> C7-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C8-1 -> C8-16 */
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* C9-1 -> C9-16 */
+";
+