From 9d0f41bf5e9e2e9a3570e7ec47d068a794a28cd4 Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Sun, 2 Sep 2018 00:02:40 -0500 Subject: [PATCH 01/12] Send primary role modifiers consistently --- right/src/usb_report_updater.c | 1 + 1 file changed, 1 insertion(+) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index 4452199..c16baad 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -411,6 +411,7 @@ static void updateActiveUsbReports(void) if (keyState->previous && secondaryRoleSlotId == slotId && secondaryRoleKeyId == keyId) { // Trigger primary role. if (secondaryRoleState == SecondaryRoleState_Pressed) { + keyState->previous = false; applyKeyAction(keyState, action); } secondaryRoleState = SecondaryRoleState_Released; From 58f81206114515145a86bf65aae9547e988b1c2c Mon Sep 17 00:00:00 2001 From: Eric Tang Date: Tue, 18 Sep 2018 23:10:08 -0500 Subject: [PATCH 02/12] Use the correct scancode so that commas are outputted --- right/src/macros.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/macros.c b/right/src/macros.c index 97df053..7dd7979 100644 --- a/right/src/macros.c +++ b/right/src/macros.c @@ -70,7 +70,7 @@ uint8_t characterToScancode(char character) return HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN; case ',': case '<': - return HID_KEYBOARD_SC_KEYPAD_LESS_THAN_SIGN; + return HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN; case '/': case '\?': return HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK; From e9309aab162cc23d01ba5810749fd9f4271941b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Tue, 25 Sep 2018 23:52:09 +0200 Subject: [PATCH 03/12] Add issue template regarding Karabiner Elements --- .github/ISSUE_TEMPLATE/custom.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/custom.md diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md new file mode 100644 index 0000000..99bb9a0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/custom.md @@ -0,0 +1,7 @@ +--- +name: Custom issue template +about: Describe this issue template's purpose here. + +--- + + From bc4f35e5781fb280d97a8634db7608383429a8a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Tue, 25 Sep 2018 23:55:26 +0200 Subject: [PATCH 04/12] Delete issue template. --- .github/ISSUE_TEMPLATE/custom.md | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/custom.md diff --git a/.github/ISSUE_TEMPLATE/custom.md b/.github/ISSUE_TEMPLATE/custom.md deleted file mode 100644 index 99bb9a0..0000000 --- a/.github/ISSUE_TEMPLATE/custom.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Custom issue template -about: Describe this issue template's purpose here. - ---- - - From 3f5f83a19bb936149fc91a7a170a0636bd81560d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Tue, 25 Sep 2018 23:55:56 +0200 Subject: [PATCH 05/12] Add issue template. --- ISSUE_TEMPLATE | 1 + 1 file changed, 1 insertion(+) create mode 100644 ISSUE_TEMPLATE diff --git a/ISSUE_TEMPLATE b/ISSUE_TEMPLATE new file mode 100644 index 0000000..9eac894 --- /dev/null +++ b/ISSUE_TEMPLATE @@ -0,0 +1 @@ +test issue template \ No newline at end of file From 44799995b9efabdfff77fb72dbbca38e2ec43c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 26 Sep 2018 00:03:20 +0200 Subject: [PATCH 06/12] Update default issue text to include Karabiner Elements. --- ISSUE_TEMPLATE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE b/ISSUE_TEMPLATE index 9eac894..3e3240f 100644 --- a/ISSUE_TEMPLATE +++ b/ISSUE_TEMPLATE @@ -1 +1 @@ -test issue template \ No newline at end of file +If you're using Karabiner Elements on your Mac, then stop here! Make sure to close Karabiner Elements, then try to reproduce the issue again, even if you think that Karabiner Elements shouldn't be the cause. Karabiner Elements is the source of numerous problems, and we don't want to receive any more reports it causes. \ No newline at end of file From af31ae210a16c95272317b3f7ab0b0e7bebe11e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Wed, 26 Sep 2018 16:34:01 +0200 Subject: [PATCH 07/12] Move the pointer not by 1 but by 5 pixels when testing the USB stack to make the pointer easier to see. --- right/src/usb_report_updater.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index c16baad..c3d2b35 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -354,7 +354,7 @@ static void updateActiveUsbReports(void) isEvenMedia = !isEvenMedia; ActiveUsbMediaKeyboardReport->scancodes[mediaScancodeIndex++] = isEvenMedia ? MEDIA_VOLUME_DOWN : MEDIA_VOLUME_UP; } - MouseMoveState.xOut = isEven ? -1 : 1; + MouseMoveState.xOut = isEven ? -5 : 5; } } From c5cf738fd011bc67a31682302d0ce963eb0ba969 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 4 Oct 2018 19:23:38 +0200 Subject: [PATCH 08/12] Expose UsbReportUpdateSemaphore via UsbCommand_{Get,Set}Variable() --- right/src/usb_commands/usb_command_get_variable.c | 3 +++ right/src/usb_commands/usb_command_set_variable.c | 3 +++ right/src/usb_protocol_handler.h | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/right/src/usb_commands/usb_command_get_variable.c b/right/src/usb_commands/usb_command_get_variable.c index 68df5b8..17d15bf 100644 --- a/right/src/usb_commands/usb_command_get_variable.c +++ b/right/src/usb_commands/usb_command_get_variable.c @@ -21,5 +21,8 @@ void UsbCommand_GetVariable(void) case UsbVariable_DebounceTimeRelease: SetUsbTxBufferUint8(1, DebounceTimeRelease); break; + case UsbVariable_UsbReportSemaphore: + SetUsbTxBufferUint8(1, UsbReportUpdateSemaphore); + break; } } diff --git a/right/src/usb_commands/usb_command_set_variable.c b/right/src/usb_commands/usb_command_set_variable.c index ab31554..8910f41 100644 --- a/right/src/usb_commands/usb_command_set_variable.c +++ b/right/src/usb_commands/usb_command_set_variable.c @@ -24,5 +24,8 @@ void UsbCommand_SetVariable(void) case UsbVariable_DebounceTimeRelease: DebounceTimeRelease = GetUsbRxBufferUint8(2); break; + case UsbVariable_UsbReportSemaphore: + UsbReportUpdateSemaphore = GetUsbRxBufferUint8(2); + break; } } diff --git a/right/src/usb_protocol_handler.h b/right/src/usb_protocol_handler.h index 48cc983..17aa380 100644 --- a/right/src/usb_protocol_handler.h +++ b/right/src/usb_protocol_handler.h @@ -42,7 +42,8 @@ UsbVariable_TestSwitches, UsbVariable_TestUsbStack, UsbVariable_DebounceTimePress, - UsbVariable_DebounceTimeRelease + UsbVariable_DebounceTimeRelease, + UsbVariable_UsbReportSemaphore, } usb_variable_id_t; typedef enum { From 98f7d512de42615829cfd6e5abbb31328d41b1bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 4 Oct 2018 20:38:36 +0200 Subject: [PATCH 09/12] Extract CurrentTime and remove Timer_{Get,Set}CurrentTime() --- right/src/macros.c | 2 +- right/src/timer.c | 24 ++++++------------- right/src/timer.h | 6 +++-- .../usb_command_get_debug_buffer.c | 2 +- .../usb_command_get_device_property.c | 2 +- right/src/usb_report_updater.c | 8 +++---- 6 files changed, 18 insertions(+), 26 deletions(-) diff --git a/right/src/macros.c b/right/src/macros.c index 7dd7979..b30bad8 100644 --- a/right/src/macros.c +++ b/right/src/macros.c @@ -286,7 +286,7 @@ bool processDelayAction(void) inDelay = false; } } else { - Timer_SetCurrentTime(&delayStart); + delayStart = CurrentTime; inDelay = true; } return inDelay; diff --git a/right/src/timer.c b/right/src/timer.c index 3ddf4b9..5256401 100644 --- a/right/src/timer.c +++ b/right/src/timer.c @@ -2,12 +2,13 @@ #include "timer.h" #include "peripherals/test_led.h" +volatile uint32_t CurrentTime; static uint32_t timerClockFrequency; -static volatile uint32_t currentTime, delayLength; +static volatile uint32_t delayLength; void PIT_TIMER_HANDLER(void) { - currentTime++; + CurrentTime++; if (delayLength) { --delayLength; } @@ -28,15 +29,11 @@ void Timer_Init(void) PIT_StartTimer(PIT, PIT_TIMER_CHANNEL); } -uint32_t Timer_GetCurrentTime() { - return currentTime; -} - uint32_t Timer_GetCurrentTimeMicros() { uint32_t primask, count, ms; primask = DisableGlobalIRQ(); // Make sure the read is atomic count = PIT_GetCurrentTimerCount(PIT, PIT_TIMER_CHANNEL); // Read the current timer count - ms = currentTime; // Read the overflow counter + ms = CurrentTime; // Read the overflow counter EnableGlobalIRQ(primask); // Enable interrupts again if they where enabled before - this should make it interrupt safe // Calculate the counter value in microseconds - note that the PIT timer is counting downward, so we need to subtract the count from the period value @@ -44,11 +41,6 @@ uint32_t Timer_GetCurrentTimeMicros() { return ms * 1000U * TIMER_INTERVAL_MSEC + us; } -void Timer_SetCurrentTime(uint32_t *time) -{ - *time = Timer_GetCurrentTime(); -} - void Timer_SetCurrentTimeMicros(uint32_t *time) { *time = Timer_GetCurrentTimeMicros(); @@ -56,20 +48,18 @@ void Timer_SetCurrentTimeMicros(uint32_t *time) uint32_t Timer_GetElapsedTime(uint32_t *time) { - uint32_t elapsedTime = Timer_GetCurrentTime() - *time; - return elapsedTime; + return CurrentTime - *time; } uint32_t Timer_GetElapsedTimeMicros(uint32_t *time) { - uint32_t elapsedTime = Timer_GetCurrentTimeMicros() - *time; - return elapsedTime; + return Timer_GetCurrentTimeMicros() - *time; } uint32_t Timer_GetElapsedTimeAndSetCurrent(uint32_t *time) { uint32_t elapsedTime = Timer_GetElapsedTime(time); - *time = Timer_GetCurrentTime(); + *time = CurrentTime; return elapsedTime; } diff --git a/right/src/timer.h b/right/src/timer.h index 810bfc1..9d177d1 100644 --- a/right/src/timer.h +++ b/right/src/timer.h @@ -9,12 +9,14 @@ #define TIMER_INTERVAL_MSEC 1 +// Variables: + + extern volatile uint32_t CurrentTime; + // Functions: void Timer_Init(void); - uint32_t Timer_GetCurrentTime(); uint32_t Timer_GetCurrentTimeMicros(); - void Timer_SetCurrentTime(uint32_t *time); void Timer_SetCurrentTimeMicros(uint32_t *time); uint32_t Timer_GetElapsedTime(uint32_t *time); uint32_t Timer_GetElapsedTimeMicros(uint32_t *time); diff --git a/right/src/usb_commands/usb_command_get_debug_buffer.c b/right/src/usb_commands/usb_command_get_debug_buffer.c index 2347594..416cf47 100644 --- a/right/src/usb_commands/usb_command_get_debug_buffer.c +++ b/right/src/usb_commands/usb_command_get_debug_buffer.c @@ -22,7 +22,7 @@ void UsbCommand_GetDebugBuffer(void) SetDebugBufferUint32(13, I2cWatchdog_RecoveryCounter); SetDebugBufferUint32(17, MatrixScanCounter); SetDebugBufferUint32(21, UsbReportUpdateCounter); - SetDebugBufferUint32(25, Timer_GetCurrentTime()); + SetDebugBufferUint32(25, CurrentTime); SetDebugBufferUint32(29, UsbGenericHidActionCounter); SetDebugBufferUint32(33, UsbBasicKeyboardActionCounter); SetDebugBufferUint32(37, UsbMediaKeyboardActionCounter); diff --git a/right/src/usb_commands/usb_command_get_device_property.c b/right/src/usb_commands/usb_command_get_device_property.c index 50d67c6..62c1e5a 100644 --- a/right/src/usb_commands/usb_command_get_device_property.c +++ b/right/src/usb_commands/usb_command_get_device_property.c @@ -69,7 +69,7 @@ void UsbCommand_GetDeviceProperty(void) SetUsbTxBufferUint32(6, I2cMainBusActualBaudRateBps); break; case DevicePropertyId_Uptime: - SetUsbTxBufferUint32(1, Timer_GetCurrentTime()); + SetUsbTxBufferUint32(1, CurrentTime); break; default: SetUsbTxBufferUint8(0, UsbStatusCode_GetDeviceProperty_InvalidProperty); diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index c3d2b35..ef3b229 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -227,11 +227,11 @@ static void handleSwitchLayerAction(key_state_t *keyState, key_action_t *action) if (doubleTapSwitchLayerKey && Timer_GetElapsedTimeAndSetCurrent(&doubleTapSwitchLayerStartTime) < DoubleTapSwitchLayerTimeout) { ToggledLayer = action->switchLayer.layer; isLayerDoubleTapToggled = true; - doubleTapSwitchLayerTriggerTime = Timer_GetCurrentTime(); + doubleTapSwitchLayerTriggerTime = CurrentTime; } else { doubleTapSwitchLayerKey = keyState; } - doubleTapSwitchLayerStartTime = Timer_GetCurrentTime(); + doubleTapSwitchLayerStartTime = CurrentTime; } } @@ -364,13 +364,13 @@ static void updateActiveUsbReports(void) key_action_t *action; if (keyState->debouncing) { - if ((uint8_t)(Timer_GetCurrentTime() - keyState->timestamp) > (keyState->previous ? DebounceTimePress : DebounceTimeRelease)) { + if ((uint8_t)(CurrentTime - keyState->timestamp) > (keyState->previous ? DebounceTimePress : DebounceTimeRelease)) { keyState->debouncing = false; } else { keyState->current = keyState->previous; } } else if (keyState->previous != keyState->current) { - keyState->timestamp = Timer_GetCurrentTime(); + keyState->timestamp = CurrentTime; keyState->debouncing = true; } From 6f2b45c27c7109ea4c1b212714dc04988207bb01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 4 Oct 2018 22:46:01 +0200 Subject: [PATCH 10/12] Update changelog, package.json, versions.h and Agent reference. --- CHANGELOG.md | 12 ++++++++++++ lib/agent | 2 +- scripts/package.json | 4 ++-- shared/versions.h | 6 +++--- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71fcd31..4dc7836 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file. The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [UHK Versioning](VERSIONING.md) conventions. +## [8.5.0] - 2018-10-04 + +Device Protocol: 4.**5.0** | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 + +- Send primary role modifiers consistently. +- Only allow layer switcher keys to deactivate toggled layers. +- Deactivate secondary roles when switching keymaps. +- Use the correct scancode so that commas are outputted for macros. +- Move the pointer not by 1 but by 5 pixels when testing the USB stack to make the pointer easier to see. +- Expose UsbReportUpdateSemaphore via UsbCommand_{Get,Set}Variable() `DEVICEPROTOCOL:MINOR` +- Extract CurrentTime and remove Timer_{Get,Set}CurrentTime() + ## [8.4.5] - 2018-08-21 Device Protocol: 4.4.0 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 diff --git a/lib/agent b/lib/agent index b41f141..6e2b1fb 160000 --- a/lib/agent +++ b/lib/agent @@ -1 +1 @@ -Subproject commit b41f14192a2666cf7f6b18034338bcf4254c943e +Subproject commit 6e2b1fb18d783d63dfb53fb717218562711ef580 diff --git a/scripts/package.json b/scripts/package.json index 4ad6e2d..ae44f4e 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -15,8 +15,8 @@ "commander": "^2.11.0", "shelljs": "^0.7.8" }, - "firmwareVersion": "8.4.5", - "deviceProtocolVersion": "4.4.0", + "firmwareVersion": "8.5.0", + "deviceProtocolVersion": "4.5.0", "moduleProtocolVersion": "4.0.0", "userConfigVersion": "4.1.0", "hardwareConfigVersion": "1.0.0", diff --git a/shared/versions.h b/shared/versions.h index adc48e6..f9315c7 100644 --- a/shared/versions.h +++ b/shared/versions.h @@ -19,11 +19,11 @@ // Variables: #define FIRMWARE_MAJOR_VERSION 8 - #define FIRMWARE_MINOR_VERSION 4 - #define FIRMWARE_PATCH_VERSION 5 + #define FIRMWARE_MINOR_VERSION 5 + #define FIRMWARE_PATCH_VERSION 0 #define DEVICE_PROTOCOL_MAJOR_VERSION 4 - #define DEVICE_PROTOCOL_MINOR_VERSION 4 + #define DEVICE_PROTOCOL_MINOR_VERSION 5 #define DEVICE_PROTOCOL_PATCH_VERSION 0 #define MODULE_PROTOCOL_MAJOR_VERSION 4 From 8b69a25ddae09522fe6f1b4030f83714e66a1366 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 4 Oct 2018 23:04:13 +0200 Subject: [PATCH 11/12] Reset UsbReportUpdateSemaphore if it gets stuck for 100ms. This should fix occasional freezes. --- right/src/usb_report_updater.c | 9 ++++++++- right/src/usb_report_updater.h | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/right/src/usb_report_updater.c b/right/src/usb_report_updater.c index ef3b229..f2a9424 100644 --- a/right/src/usb_report_updater.c +++ b/right/src/usb_report_updater.c @@ -440,14 +440,21 @@ uint32_t UsbReportUpdateCounter; void UpdateUsbReports(void) { + static uint32_t lastUpdateTime; + for (uint8_t keyId = 0; keyId < RIGHT_KEY_MATRIX_KEY_COUNT; keyId++) { KeyStates[SlotId_RightKeyboardHalf][keyId].current = RightKeyMatrix.keyStates[keyId]; } if (UsbReportUpdateSemaphore && !SleepModeActive) { - return; + if (Timer_GetElapsedTime(&lastUpdateTime) < USB_SEMAPHORE_TIMEOUT) { + return; + } else { + UsbReportUpdateSemaphore = 0; + } } + lastUpdateTime = CurrentTime; UsbReportUpdateCounter++; ResetActiveUsbBasicKeyboardReport(); diff --git a/right/src/usb_report_updater.h b/right/src/usb_report_updater.h index d3df70b..02ed725 100644 --- a/right/src/usb_report_updater.h +++ b/right/src/usb_report_updater.h @@ -14,6 +14,8 @@ #define SECONDARY_ROLE_MODIFIER_TO_HID_MODIFIER(secondaryRoleModifier) (1 << ((secondaryRoleModifier) - 1)) #define SECONDARY_ROLE_LAYER_TO_LAYER_ID(secondaryRoleLayer) ((secondaryRoleLayer) - SecondaryRole_RightSuper) + #define USB_SEMAPHORE_TIMEOUT 100 // ms + // Typedefs: typedef enum { From a22dfdd917bdbb8796608375f75b35c335731d40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A1szl=C3=B3=20Monda?= Date: Thu, 4 Oct 2018 23:10:58 +0200 Subject: [PATCH 12/12] Update version to 8.5.1, changelog, package.json and versions.h --- CHANGELOG.md | 6 ++++++ scripts/package.json | 2 +- shared/versions.h | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4dc7836..8702b16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to the [UHK Versioning](VERSIONING.md) conventions. +## [8.5.1] - 2018-10-04 + +Device Protocol: 4.5.0 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 + +- Reset UsbReportUpdateSemaphore if it gets stuck for 100ms. This should fix occasional freezes. + ## [8.5.0] - 2018-10-04 Device Protocol: 4.**5.0** | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0 diff --git a/scripts/package.json b/scripts/package.json index ae44f4e..cbdd55a 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -15,7 +15,7 @@ "commander": "^2.11.0", "shelljs": "^0.7.8" }, - "firmwareVersion": "8.5.0", + "firmwareVersion": "8.5.1", "deviceProtocolVersion": "4.5.0", "moduleProtocolVersion": "4.0.0", "userConfigVersion": "4.1.0", diff --git a/shared/versions.h b/shared/versions.h index f9315c7..0cf455c 100644 --- a/shared/versions.h +++ b/shared/versions.h @@ -20,7 +20,7 @@ #define FIRMWARE_MAJOR_VERSION 8 #define FIRMWARE_MINOR_VERSION 5 - #define FIRMWARE_PATCH_VERSION 0 + #define FIRMWARE_PATCH_VERSION 1 #define DEVICE_PROTOCOL_MAJOR_VERSION 4 #define DEVICE_PROTOCOL_MINOR_VERSION 5