From 9c52fb32fa476249c35279ef4fff1be59e3e7eac Mon Sep 17 00:00:00 2001 From: Jacob Alexander Date: Fri, 21 Aug 2015 19:43:45 -0700 Subject: [PATCH] Fixing default ErgoDox layout and adding FlashMode button - 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 cleanup --- Macro/PartialMap/macro.h | 9 ------- Output/pjrcUSB/arm/usb_dev.c | 11 +++++++- Output/pjrcUSB/capabilities.kll | 15 ++++++++--- Output/pjrcUSB/output_com.c | 13 ++++++++++ Output/pjrcUSB/output_com.h | 14 ---------- Output/uartOut/arm/uart_serial.c | 44 ++++++++++++++++++++++++++++++++ Output/uartOut/capabilities.kll | 13 ++++++++-- Output/uartOut/output_com.c | 13 ++++++++++ Output/usbMuxUart/output_com.c | 13 ++++++++++ Scan/MDErgo1/leftHand.kll | 32 +++++++++++------------ Scan/MDErgo1/rightHand.kll | 33 ++++++++++++------------ 11 files changed, 148 insertions(+), 62 deletions(-) diff --git a/Macro/PartialMap/macro.h b/Macro/PartialMap/macro.h index eae77dd..2df411e 100644 --- a/Macro/PartialMap/macro.h +++ b/Macro/PartialMap/macro.h @@ -23,15 +23,6 @@ -// ----- 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 ----- void Macro_analogState( uint8_t scanCode, uint8_t state ); diff --git a/Output/pjrcUSB/arm/usb_dev.c b/Output/pjrcUSB/arm/usb_dev.c index 9af914d..37541e4 100644 --- a/Output/pjrcUSB/arm/usb_dev.c +++ b/Output/pjrcUSB/arm/usb_dev.c @@ -34,6 +34,7 @@ // Project Includes #include #include +#include // Local Includes #include "usb_dev.h" @@ -872,6 +873,14 @@ void usb_tx( uint32_t endpoint, usb_packet_t *packet ) 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 #if defined(_mk20dx128vlf5_) @@ -882,7 +891,7 @@ void usb_device_reload() PORTA_PCR3 = PORT_PCR_PFE | PORT_PCR_MUX(1); // Internal pull-up // Check for jumper - if ( GPIOA_PDIR & (1<<3) ) + if ( GPIOA_PDIR & (1<<3) && flashModeEnabled_define != 0 ) { print( NL ); warn_print("Security jumper not present, cancelling firmware reload..."); diff --git a/Output/pjrcUSB/capabilities.kll b/Output/pjrcUSB/capabilities.kll index a9b1eb4..7646625 100644 --- a/Output/pjrcUSB/capabilities.kll +++ b/Output/pjrcUSB/capabilities.kll @@ -1,10 +1,10 @@ Name = pjrcUSBCapabilities; -Version = 0.5; +Version = 0.6; Author = "HaaTa (Jacob Alexander) 2014-2015"; -KLL = 0.3b; +KLL = 0.3c; # Modified Date -Date = 2015-07-12; +Date = 2015-08-21; # Output capabilities @@ -21,3 +21,12 @@ kbdProtocolNKRO => Output_kbdProtocolNKRO_capability(); keyboardLocale => KeyboardLocale_define; 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(); + diff --git a/Output/pjrcUSB/output_com.c b/Output/pjrcUSB/output_com.c index dc6bfcd..d594ac1 100644 --- a/Output/pjrcUSB/output_com.c +++ b/Output/pjrcUSB/output_com.c @@ -484,6 +484,19 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a } } +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 ----- diff --git a/Output/pjrcUSB/output_com.h b/Output/pjrcUSB/output_com.h index 0462c20..c82ed98 100644 --- a/Output/pjrcUSB/output_com.h +++ b/Output/pjrcUSB/output_com.h @@ -84,20 +84,6 @@ extern uint8_t Output_DebugMode; // 0 - Debug disabled, 1 - Debug enab -// ----- 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 ----- void Output_setup(); diff --git a/Output/uartOut/arm/uart_serial.c b/Output/uartOut/arm/uart_serial.c index db7a3aa..d06f2f5 100644 --- a/Output/uartOut/arm/uart_serial.c +++ b/Output/uartOut/arm/uart_serial.c @@ -27,6 +27,8 @@ // Project Includes #include #include +#include +#include // Local Includes #include "uart_serial.h" @@ -325,6 +327,48 @@ void uart_serial_flush_output() 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"); +#endif } diff --git a/Output/uartOut/capabilities.kll b/Output/uartOut/capabilities.kll index d45e181..663c034 100644 --- a/Output/uartOut/capabilities.kll +++ b/Output/uartOut/capabilities.kll @@ -1,12 +1,21 @@ Name = uartOutCapabilities; -Version = 0.1; +Version = 0.2; Author = "HaaTa (Jacob Alexander) 2014"; KLL = 0.3; # Modified Date -Date = 2014-09-27; +Date = 2014-08-21; # Capabilties available to the uartOut output module 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(); + diff --git a/Output/uartOut/output_com.c b/Output/uartOut/output_com.c index 8558fc1..a45193b 100644 --- a/Output/uartOut/output_com.c +++ b/Output/uartOut/output_com.c @@ -129,6 +129,19 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a } } +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 ----- diff --git a/Output/usbMuxUart/output_com.c b/Output/usbMuxUart/output_com.c index 3fa26c9..928f342 100644 --- a/Output/usbMuxUart/output_com.c +++ b/Output/usbMuxUart/output_com.c @@ -490,6 +490,19 @@ void Output_usbCodeSend_capability( uint8_t state, uint8_t stateType, uint8_t *a } } +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 ----- diff --git a/Scan/MDErgo1/leftHand.kll b/Scan/MDErgo1/leftHand.kll index c814c55..a2b3a36 100644 --- a/Scan/MDErgo1/leftHand.kll +++ b/Scan/MDErgo1/leftHand.kll @@ -1,4 +1,4 @@ -Name = MDErgo1 Right Hand; +Name = MDErgo1 Left Hand; Version = 0.1; Author = "HaaTa (Jacob Alexander) 2015"; KLL = 0.3c; @@ -8,22 +8,22 @@ Date = 2015-08-06; # Top Row -S0x02 : U"6"; +S0x02 : U"Esc"; S0x03 : U"5"; S0x04 : U"4"; S0x05 : U"3"; S0x06 : U"2"; S0x07 : U"1"; -S0x08 : U"Esc"; +S0x08 : U"Equals"; # Top-Middle Row -S0x0B : U"F4"; +S0x0B : U"Function1"; S0x0C : U"T"; S0x0D : U"R"; S0x0E : U"E"; S0x0F : U"W"; S0x10 : U"Q"; -S0x11 : U"Tab"; +S0x11 : U"Backslash"; # Middle Row S0x15 : U"G"; @@ -31,14 +31,14 @@ S0x16 : U"F"; S0x17 : U"D"; S0x18 : U"S"; S0x19 : U"A"; -S0x1A : U"Function1"; +S0x1A : U"Tab"; # Top Thumb Cluster -S0x1B : U"Home"; -S0x1C : U"End"; +S0x1B : U"LAlt"; +S0x1C : U"LCtrl"; # Bottom-Middle Row -S0x1D : U"F5"; +S0x1D : U"Function2"; S0x1E : U"B"; S0x1F : U"V"; S0x20 : U"C"; @@ -47,15 +47,15 @@ S0x22 : U"Z"; S0x23 : U"Left Shift"; # Bottom Thumb Cluster -S0x24 : U"Left Alt"; -S0x25 : U"Left Ctrl"; +S0x24 : U"Home"; +S0x25 : U"End"; S0x26 : U"Delete"; -S0x27 : U"Space"; +S0x27 : U"Backspace"; # Bottom Row 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"; diff --git a/Scan/MDErgo1/rightHand.kll b/Scan/MDErgo1/rightHand.kll index 840b696..d31000e 100644 --- a/Scan/MDErgo1/rightHand.kll +++ b/Scan/MDErgo1/rightHand.kll @@ -8,22 +8,22 @@ Date = 2015-08-06; # 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 -S0x0B : U"PageUp"; +S0x0B : U"Left Brace"; S0x0C : U"Y"; S0x0D : U"U"; S0x0E : U"I"; S0x0F : U"O"; S0x10 : U"P"; -S0x11 : U"BackSlash"; +S0x11 : U"Right Brace"; # Middle Row S0x15 : U"H"; @@ -34,11 +34,11 @@ S0x19 : U"Semicolon"; S0x1A : U"Quote"; # Top Thumb Cluster -S0x1B : U"PrintScreen"; -S0x1C : U"Insert"; +S0x1B : U"RAlt"; +S0x1C : U"RCtrl"; # Bottom-Middle Row -S0x1D : U"PageDown"; +S0x1D : U"Function7"; S0x1E : U"N"; S0x1F : U"M"; S0x20 : U"Comma"; @@ -47,16 +47,15 @@ S0x22 : U"Slash"; S0x23 : U"Right Shift"; # Bottom Thumb Cluster -S0x24 : U"Right Alt"; -S0x25 : U"Right Ctrl"; +S0x24 : U"PageUp"; +S0x25 : U"PageDown"; S0x26 : U"Enter"; -S0x27 : U"Function2"; +S0x27 : U"Space"; # Bottom Row S0x28 : U"Left"; S0x29 : U"Down"; S0x2A : U"Up"; S0x2B : U"Right"; -S0x2C : U"Function4"; - +S0x2C : U"RGui"; -- 2.39.2