- Adds proper flashMode support for all keyboards and microcontrollers (usb and serial) - flashModeEnabled must be set to 1 otherwise it will only show an error * This is on purpose (somewhat dangerous feature as it allows remote flashing) - Capability cleanupcapsense
// ----- Capabilities ----- | |||||
void Macro_layerState_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Macro_layerLatch_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Macro_layerLock_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Macro_layerShift_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
// ----- Functions ----- | // ----- Functions ----- | ||||
void Macro_analogState( uint8_t scanCode, uint8_t state ); | void Macro_analogState( uint8_t scanCode, uint8_t state ); |
// Project Includes | // Project Includes | ||||
#include <Lib/OutputLib.h> | #include <Lib/OutputLib.h> | ||||
#include <print.h> | #include <print.h> | ||||
#include <kll_defs.h> | |||||
// Local Includes | // Local Includes | ||||
#include "usb_dev.h" | #include "usb_dev.h" | ||||
void usb_device_reload() | void usb_device_reload() | ||||
{ | { | ||||
if ( flashModeEnabled_define == 0 ) | |||||
{ | |||||
print( NL ); | |||||
warn_print("flashModeEnabled not set, cancelling firmware reload..."); | |||||
info_msg("Set flashModeEnabled to 1 in your kll configuration."); | |||||
return; | |||||
} | |||||
// MCHCK | // MCHCK | ||||
#if defined(_mk20dx128vlf5_) | #if defined(_mk20dx128vlf5_) | ||||
PORTA_PCR3 = PORT_PCR_PFE | PORT_PCR_MUX(1); // Internal pull-up | PORTA_PCR3 = PORT_PCR_PFE | PORT_PCR_MUX(1); // Internal pull-up | ||||
// Check for jumper | // Check for jumper | ||||
if ( GPIOA_PDIR & (1<<3) ) | |||||
if ( GPIOA_PDIR & (1<<3) && flashModeEnabled_define != 0 ) | |||||
{ | { | ||||
print( NL ); | print( NL ); | ||||
warn_print("Security jumper not present, cancelling firmware reload..."); | warn_print("Security jumper not present, cancelling firmware reload..."); |
Name = pjrcUSBCapabilities; | Name = pjrcUSBCapabilities; | ||||
Version = 0.5; | |||||
Version = 0.6; | |||||
Author = "HaaTa (Jacob Alexander) 2014-2015"; | Author = "HaaTa (Jacob Alexander) 2014-2015"; | ||||
KLL = 0.3b; | |||||
KLL = 0.3c; | |||||
# Modified Date | # Modified Date | ||||
Date = 2015-07-12; | |||||
Date = 2015-08-21; | |||||
# Output capabilities | # Output capabilities | ||||
keyboardLocale => KeyboardLocale_define; | keyboardLocale => KeyboardLocale_define; | ||||
keyboardLocale = 0; | keyboardLocale = 0; | ||||
# Bootloader Mode capability | |||||
# XXX | |||||
# By default this is disabled on purpose | |||||
# It is a large security hazard | |||||
flashModeEnabled => flashModeEnabled_define; | |||||
flashModeEnabled = 0; | |||||
flashMode => Output_flashMode_capability(); | |||||
} | } | ||||
} | } | ||||
void Output_flashMode_capability( uint8_t state, uint8_t stateType, uint8_t *args ) | |||||
{ | |||||
// Display capability name | |||||
if ( stateType == 0xFF && state == 0xFF ) | |||||
{ | |||||
print("Output_flashMode(usbCode)"); | |||||
return; | |||||
} | |||||
// Start flash mode | |||||
Output_firmwareReload(); | |||||
} | |||||
// ----- Functions ----- | // ----- Functions ----- |
// ----- Capabilities ----- | |||||
// Output capabilities | |||||
void Output_consCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Output_noneSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Output_sysCtrlSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
// Configuration capabilities | |||||
void Output_kbdProtocolBoot_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
void Output_kbdProtocolNKRO_capability( uint8_t state, uint8_t stateType, uint8_t *args ); | |||||
// ----- Functions ----- | // ----- Functions ----- | ||||
void Output_setup(); | void Output_setup(); |
// Project Includes | // Project Includes | ||||
#include <Lib/OutputLib.h> | #include <Lib/OutputLib.h> | ||||
#include <Lib/Interrupts.h> | #include <Lib/Interrupts.h> | ||||
#include <print.h> | |||||
#include <kll_defs.h> | |||||
// Local Includes | // Local Includes | ||||
#include "uart_serial.h" | #include "uart_serial.h" | ||||
void uart_device_reload() | void uart_device_reload() | ||||
{ | { | ||||
if ( flashModeEnabled_define == 0 ) | |||||
{ | |||||
print( NL ); | |||||
warn_print("flashModeEnabled not set, cancelling firmware reload..."); | |||||
info_msg("Set flashModeEnabled to 1 in your kll configuration."); | |||||
return; | |||||
} | |||||
// MCHCK | |||||
#if defined(_mk20dx128vlf5_) | |||||
// MCHCK Kiibohd Variant | |||||
// Check to see if PTA3 (has a pull-up) is connected to GND (usually via jumper) | |||||
// Only allow reload if the jumper is present (security) | |||||
GPIOA_PDDR &= ~(1<<3); // Input | |||||
PORTA_PCR3 = PORT_PCR_PFE | PORT_PCR_MUX(1); // Internal pull-up | |||||
// Check for jumper | |||||
if ( GPIOA_PDIR & (1<<3) && flashModeEnabled_define != 0 ) | |||||
{ | |||||
print( NL ); | |||||
warn_print("Security jumper not present, cancelling firmware reload..."); | |||||
info_msg("Replace jumper on middle 2 pins, or manually press the firmware reload button."); | |||||
} | |||||
else | |||||
{ | |||||
// Copies variable into the VBAT register, must be identical to the variable in the bootloader to jump to the bootloader flash mode | |||||
for ( int pos = 0; pos < sizeof(sys_reset_to_loader_magic); pos++ ) | |||||
(&VBAT)[ pos ] = sys_reset_to_loader_magic[ pos ]; | |||||
SOFTWARE_RESET(); | |||||
} | |||||
// Kiibohd mk20dx256vlh7 | |||||
#elif defined(_mk20dx256vlh7_) | |||||
// Copies variable into the VBAT register, must be identical to the variable in the bootloader to jump to the bootloader flash mode | |||||
for ( int pos = 0; pos < sizeof(sys_reset_to_loader_magic); pos++ ) | |||||
(&VBAT)[ pos ] = sys_reset_to_loader_magic[ pos ]; | |||||
SOFTWARE_RESET(); | |||||
// Teensy 3.0 and 3.1 | |||||
#else | |||||
asm volatile("bkpt"); | asm volatile("bkpt"); | ||||
#endif | |||||
} | } | ||||
Name = uartOutCapabilities; | Name = uartOutCapabilities; | ||||
Version = 0.1; | |||||
Version = 0.2; | |||||
Author = "HaaTa (Jacob Alexander) 2014"; | Author = "HaaTa (Jacob Alexander) 2014"; | ||||
KLL = 0.3; | KLL = 0.3; | ||||
# Modified Date | # Modified Date | ||||
Date = 2014-09-27; | |||||
Date = 2014-08-21; | |||||
# Capabilties available to the uartOut output module | # Capabilties available to the uartOut output module | ||||
usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 ); | usbKeyOut => Output_usbCodeSend_capability( usbCode : 1 ); | ||||
# Bootloader Mode capability | |||||
# XXX | |||||
# By default this is disabled on purpose | |||||
# It is a large security hazard | |||||
flashModeEnabled => flashModeEnabled_define; | |||||
flashModeEnabled = 0; | |||||
flashMode => Output_flashMode_capability(); | |||||
} | } | ||||
} | } | ||||
void Output_flashMode_capability( uint8_t state, uint8_t stateType, uint8_t *args ) | |||||
{ | |||||
// Display capability name | |||||
if ( stateType == 0xFF && state == 0xFF ) | |||||
{ | |||||
print("Output_flashMode(usbCode)"); | |||||
return; | |||||
} | |||||
// Start flash mode | |||||
Output_firmwareReload(); | |||||
} | |||||
// ----- Functions ----- | // ----- Functions ----- |
} | } | ||||
} | } | ||||
void Output_flashMode_capability( uint8_t state, uint8_t stateType, uint8_t *args ) | |||||
{ | |||||
// Display capability name | |||||
if ( stateType == 0xFF && state == 0xFF ) | |||||
{ | |||||
print("Output_flashMode(usbCode)"); | |||||
return; | |||||
} | |||||
// Start flash mode | |||||
Output_firmwareReload(); | |||||
} | |||||
// ----- Functions ----- | // ----- Functions ----- |
Name = MDErgo1 Right Hand; | |||||
Name = MDErgo1 Left Hand; | |||||
Version = 0.1; | Version = 0.1; | ||||
Author = "HaaTa (Jacob Alexander) 2015"; | Author = "HaaTa (Jacob Alexander) 2015"; | ||||
KLL = 0.3c; | KLL = 0.3c; | ||||
# Top Row | # Top Row | ||||
S0x02 : U"6"; | |||||
S0x02 : U"Esc"; | |||||
S0x03 : U"5"; | S0x03 : U"5"; | ||||
S0x04 : U"4"; | S0x04 : U"4"; | ||||
S0x05 : U"3"; | S0x05 : U"3"; | ||||
S0x06 : U"2"; | S0x06 : U"2"; | ||||
S0x07 : U"1"; | S0x07 : U"1"; | ||||
S0x08 : U"Esc"; | |||||
S0x08 : U"Equals"; | |||||
# Top-Middle Row | # Top-Middle Row | ||||
S0x0B : U"F4"; | |||||
S0x0B : U"Function1"; | |||||
S0x0C : U"T"; | S0x0C : U"T"; | ||||
S0x0D : U"R"; | S0x0D : U"R"; | ||||
S0x0E : U"E"; | S0x0E : U"E"; | ||||
S0x0F : U"W"; | S0x0F : U"W"; | ||||
S0x10 : U"Q"; | S0x10 : U"Q"; | ||||
S0x11 : U"Tab"; | |||||
S0x11 : U"Backslash"; | |||||
# Middle Row | # Middle Row | ||||
S0x15 : U"G"; | S0x15 : U"G"; | ||||
S0x17 : U"D"; | S0x17 : U"D"; | ||||
S0x18 : U"S"; | S0x18 : U"S"; | ||||
S0x19 : U"A"; | S0x19 : U"A"; | ||||
S0x1A : U"Function1"; | |||||
S0x1A : U"Tab"; | |||||
# Top Thumb Cluster | # Top Thumb Cluster | ||||
S0x1B : U"Home"; | |||||
S0x1C : U"End"; | |||||
S0x1B : U"LAlt"; | |||||
S0x1C : U"LCtrl"; | |||||
# Bottom-Middle Row | # Bottom-Middle Row | ||||
S0x1D : U"F5"; | |||||
S0x1D : U"Function2"; | |||||
S0x1E : U"B"; | S0x1E : U"B"; | ||||
S0x1F : U"V"; | S0x1F : U"V"; | ||||
S0x20 : U"C"; | S0x20 : U"C"; | ||||
S0x23 : U"Left Shift"; | S0x23 : U"Left Shift"; | ||||
# Bottom Thumb Cluster | # Bottom Thumb Cluster | ||||
S0x24 : U"Left Alt"; | |||||
S0x25 : U"Left Ctrl"; | |||||
S0x24 : U"Home"; | |||||
S0x25 : U"End"; | |||||
S0x26 : U"Delete"; | S0x26 : U"Delete"; | ||||
S0x27 : U"Space"; | |||||
S0x27 : U"Backspace"; | |||||
# Bottom Row | # Bottom Row | ||||
S0x28 : U"Function5"; | S0x28 : U"Function5"; | ||||
S0x29 : U"Backtick"; | |||||
S0x2A : U"Right Brace"; | |||||
S0x2B : U"Left Brace"; | |||||
S0x2C : U"Function3"; | |||||
S0x29 : U"Function4"; | |||||
S0x2A : U"Function3"; | |||||
S0x2B : U"Backtick"; | |||||
S0x2C : U"LGui"; | |||||
# Top Row | # Top Row | ||||
S0x02 : U"7"; | |||||
S0x03 : U"8"; | |||||
S0x04 : U"9"; | |||||
S0x05 : U"0"; | |||||
S0x06 : U"Minus"; | |||||
S0x07 : U"Equal"; | |||||
S0x08 : U"Backspace"; | |||||
S0x02 : U"Function6"; | |||||
S0x03 : U"6"; | |||||
S0x04 : U"7"; | |||||
S0x05 : U"8"; | |||||
S0x06 : U"9"; | |||||
S0x07 : U"0"; | |||||
S0x08 : U"Minus"; | |||||
# Top-Middle Row | # Top-Middle Row | ||||
S0x0B : U"PageUp"; | |||||
S0x0B : U"Left Brace"; | |||||
S0x0C : U"Y"; | S0x0C : U"Y"; | ||||
S0x0D : U"U"; | S0x0D : U"U"; | ||||
S0x0E : U"I"; | S0x0E : U"I"; | ||||
S0x0F : U"O"; | S0x0F : U"O"; | ||||
S0x10 : U"P"; | S0x10 : U"P"; | ||||
S0x11 : U"BackSlash"; | |||||
S0x11 : U"Right Brace"; | |||||
# Middle Row | # Middle Row | ||||
S0x15 : U"H"; | S0x15 : U"H"; | ||||
S0x1A : U"Quote"; | S0x1A : U"Quote"; | ||||
# Top Thumb Cluster | # Top Thumb Cluster | ||||
S0x1B : U"PrintScreen"; | |||||
S0x1C : U"Insert"; | |||||
S0x1B : U"RAlt"; | |||||
S0x1C : U"RCtrl"; | |||||
# Bottom-Middle Row | # Bottom-Middle Row | ||||
S0x1D : U"PageDown"; | |||||
S0x1D : U"Function7"; | |||||
S0x1E : U"N"; | S0x1E : U"N"; | ||||
S0x1F : U"M"; | S0x1F : U"M"; | ||||
S0x20 : U"Comma"; | S0x20 : U"Comma"; | ||||
S0x23 : U"Right Shift"; | S0x23 : U"Right Shift"; | ||||
# Bottom Thumb Cluster | # Bottom Thumb Cluster | ||||
S0x24 : U"Right Alt"; | |||||
S0x25 : U"Right Ctrl"; | |||||
S0x24 : U"PageUp"; | |||||
S0x25 : U"PageDown"; | |||||
S0x26 : U"Enter"; | S0x26 : U"Enter"; | ||||
S0x27 : U"Function2"; | |||||
S0x27 : U"Space"; | |||||
# Bottom Row | # Bottom Row | ||||
S0x28 : U"Left"; | S0x28 : U"Left"; | ||||
S0x29 : U"Down"; | S0x29 : U"Down"; | ||||
S0x2A : U"Up"; | S0x2A : U"Up"; | ||||
S0x2B : U"Right"; | S0x2B : U"Right"; | ||||
S0x2C : U"Function4"; | |||||
S0x2C : U"RGui"; | |||||