- 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
@@ -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 ); |
@@ -34,6 +34,7 @@ | |||
// Project Includes | |||
#include <Lib/OutputLib.h> | |||
#include <print.h> | |||
#include <kll_defs.h> | |||
// 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..."); |
@@ -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(); | |||
@@ -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 ----- |
@@ -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(); |
@@ -27,6 +27,8 @@ | |||
// Project Includes | |||
#include <Lib/OutputLib.h> | |||
#include <Lib/Interrupts.h> | |||
#include <print.h> | |||
#include <kll_defs.h> | |||
// 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 | |||
} | |||
@@ -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(); | |||
@@ -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 ----- |
@@ -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 ----- |
@@ -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"; | |||
@@ -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"; | |||