8 Commits

Author SHA1 Message Date
Eric Tang
aeaef7b788 Remove the semaphore 2018-08-16 13:54:20 -07:00
László Monda
b4c2204e50 Bump firmware version to 8.4.4, update changelog, package.json and versions.h 2018-08-14 00:07:21 +02:00
László Monda
4c0546de6c Merge branch 'master' of github.com:UltimateHackingKeyboard/firmware 2018-08-13 23:08:53 +02:00
László Monda
bea4c34a51 Merge pull request #154 from UltimateHackingKeyboard/secondary-role
Ensure that secondary roles are triggered consistently
2018-08-13 23:03:48 +02:00
László Monda
bdc6232780 Merge branch 'master' of github.com:UltimateHackingKeyboard/firmware 2018-08-13 22:38:41 +02:00
László Monda
1d2d1c5049 Merge pull request #153 from UltimateHackingKeyboard/wake
Don't wake the host if a key is held down through the beginning of sleep
2018-08-13 21:42:46 +02:00
Eric Tang
67f07abd0d Ensure that secondary roles are triggered consistently 2018-08-13 12:30:36 -07:00
Eric Tang
4bfcd6e02c Don't wake the host if a key is held down through the beginning of sleep 2018-08-13 12:07:08 -07:00
9 changed files with 22 additions and 53 deletions

View File

@@ -5,6 +5,13 @@ 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.4.4] - 2018-08-14
Device Protocol: 4.4.0 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0
- Don't wake the host if a key is held down through the beginning of sleep.
- Ensure that secondary roles are triggered consistently.
## [8.4.3] - 2018-08-12
Device Protocol: 4.4.0 | Module Protocol: 4.0.0 | User Config: 4.1.0 | Hardware Config: 1.0.0

View File

@@ -1,6 +1,5 @@
#include "led_display.h"
#include "usb_composite_device.h"
#include "usb_report_updater.h"
static usb_basic_keyboard_report_t usbBasicKeyboardReports[2];
uint32_t UsbBasicKeyboardActionCounter;
@@ -45,7 +44,6 @@ usb_status_t UsbBasicKeyboardCallback(class_handle_t handle, uint32_t event, voi
switch (event) {
// This event is received when the report has been sent
case kUSB_DeviceHidEventSendResponse:
UsbReportUpdateSemaphore &= ~(1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX);
if (UsbCompositeDevice.attach) {
error = kStatus_USB_Success;
}

View File

@@ -1,5 +1,4 @@
#include "usb_composite_device.h"
#include "usb_report_updater.h"
uint32_t UsbMediaKeyboardActionCounter;
static usb_media_keyboard_report_t usbMediaKeyboardReports[2];
@@ -43,7 +42,6 @@ usb_status_t UsbMediaKeyboardCallback(class_handle_t handle, uint32_t event, voi
switch (event) {
// This event is received when the report has been sent
case kUSB_DeviceHidEventSendResponse:
UsbReportUpdateSemaphore &= ~(1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX);
if (UsbCompositeDevice.attach) {
error = kStatus_USB_Success;
}

View File

@@ -1,5 +1,4 @@
#include "usb_composite_device.h"
#include "usb_report_updater.h"
uint32_t UsbMouseActionCounter;
static usb_mouse_report_t usbMouseReports[2];
@@ -43,7 +42,6 @@ usb_status_t UsbMouseCallback(class_handle_t handle, uint32_t event, void *param
switch (event) {
// This event is received when the report has been sent
case kUSB_DeviceHidEventSendResponse:
UsbReportUpdateSemaphore &= ~(1 << USB_MOUSE_INTERFACE_INDEX);
if (UsbCompositeDevice.attach) {
error = kStatus_USB_Success;
}

View File

@@ -1,5 +1,4 @@
#include "usb_composite_device.h"
#include "usb_report_updater.h"
uint32_t UsbSystemKeyboardActionCounter;
static usb_system_keyboard_report_t usbSystemKeyboardReports[2];
@@ -43,7 +42,6 @@ usb_status_t UsbSystemKeyboardCallback(class_handle_t handle, uint32_t event, vo
switch (event) {
// This event is received when the report has been sent
case kUSB_DeviceHidEventSendResponse:
UsbReportUpdateSemaphore &= ~(1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX);
if (UsbCompositeDevice.attach) {
error = kStatus_USB_Success;
}

View File

@@ -26,8 +26,6 @@ static uint16_t DoubleTapSwitchLayerReleaseTimeout = 200;
static bool activeMouseStates[ACTIVE_MOUSE_STATES_COUNT];
bool TestUsbStack = false;
volatile uint8_t UsbReportUpdateSemaphore = 0;
mouse_kinetic_state_t MouseMoveState = {
.isScroll = false,
.upState = SerializedMouseAction_MoveUp,
@@ -372,12 +370,19 @@ static void updateActiveUsbReports(void)
}
if (keyState->current) {
if (SleepModeActive && !keyState->previous) {
WakeUpHost();
}
key_action_t *baseAction = &CurrentKeymap[LayerId_Base][slotId][keyId];
if (layerGotReleased && !(baseAction->type == KeyActionType_Keystroke && baseAction->keystroke.scancode == 0 && baseAction->keystroke.modifiers)) {
keyState->suppressed = true;
}
if (action->type == KeyActionType_Keystroke && action->keystroke.secondaryRole) {
// Trigger secondary role.
if (!keyState->previous && secondaryRoleState == SecondaryRoleState_Pressed) {
secondaryRoleState = SecondaryRoleState_Triggered;
keyState->current = false;
} else if (action->type == KeyActionType_Keystroke && action->keystroke.secondaryRole) {
// Press released secondary role key.
if (!keyState->previous && secondaryRoleState == SecondaryRoleState_Released) {
secondaryRoleState = SecondaryRoleState_Pressed;
@@ -387,13 +392,7 @@ static void updateActiveUsbReports(void)
keyState->suppressed = true;
}
} else {
// Trigger secondary role.
if (!keyState->previous && secondaryRoleState == SecondaryRoleState_Pressed) {
secondaryRoleState = SecondaryRoleState_Triggered;
keyState->current = false;
} else {
applyKeyAction(keyState, action);
}
applyKeyAction(keyState, action);
}
} else {
if (keyState->suppressed) {
@@ -436,22 +435,6 @@ void UpdateUsbReports(void)
KeyStates[SlotId_RightKeyboardHalf][keyId].current = RightKeyMatrix.keyStates[keyId];
}
if (SleepModeActive) {
for (uint8_t slotId = 0; slotId < SLOT_COUNT; slotId++) {
for (uint8_t keyId = 0; keyId < MAX_KEY_COUNT_PER_MODULE; keyId++) {
if (KeyStates[slotId][keyId].current) {
WakeUpHost();
return;
}
}
}
return;
}
if (UsbReportUpdateSemaphore) {
return;
}
UsbReportUpdateCounter++;
ResetActiveUsbBasicKeyboardReport();
@@ -467,32 +450,20 @@ void UpdateUsbReports(void)
bool HasUsbMouseReportChanged = memcmp(ActiveUsbMouseReport, GetInactiveUsbMouseReport(), sizeof(usb_mouse_report_t)) != 0;
if (HasUsbBasicKeyboardReportChanged) {
usb_status_t status = UsbBasicKeyboardAction();
if (status == kStatus_USB_Success) {
UsbReportUpdateSemaphore |= 1 << USB_BASIC_KEYBOARD_INTERFACE_INDEX;
}
UsbBasicKeyboardAction();
}
if (HasUsbMediaKeyboardReportChanged) {
usb_status_t status = UsbMediaKeyboardAction();
if (status == kStatus_USB_Success) {
UsbReportUpdateSemaphore |= 1 << USB_MEDIA_KEYBOARD_INTERFACE_INDEX;
}
UsbMediaKeyboardAction();
}
if (HasUsbSystemKeyboardReportChanged) {
usb_status_t status = UsbSystemKeyboardAction();
if (status == kStatus_USB_Success) {
UsbReportUpdateSemaphore |= 1 << USB_SYSTEM_KEYBOARD_INTERFACE_INDEX;
}
UsbSystemKeyboardAction();
}
// Send out the mouse position and wheel values continuously if the report is not zeros, but only send the mouse button states when they change.
if (HasUsbMouseReportChanged || ActiveUsbMouseReport->x || ActiveUsbMouseReport->y ||
ActiveUsbMouseReport->wheelX || ActiveUsbMouseReport->wheelY) {
usb_status_t status = UsbMouseAction();
if (status == kStatus_USB_Success) {
UsbReportUpdateSemaphore |= 1 << USB_MOUSE_INTERFACE_INDEX;
}
UsbMouseAction();
}
}

View File

@@ -70,7 +70,6 @@
extern mouse_kinetic_state_t MouseMoveState;
extern mouse_kinetic_state_t MouseScrollState;
extern uint32_t UsbReportUpdateCounter;
extern volatile uint8_t UsbReportUpdateSemaphore;
extern bool TestUsbStack;
// Functions:

View File

@@ -15,7 +15,7 @@
"commander": "^2.11.0",
"shelljs": "^0.7.8"
},
"firmwareVersion": "8.4.3",
"firmwareVersion": "8.4.4",
"deviceProtocolVersion": "4.4.0",
"moduleProtocolVersion": "4.0.0",
"userConfigVersion": "4.1.0",

View File

@@ -20,7 +20,7 @@
#define FIRMWARE_MAJOR_VERSION 8
#define FIRMWARE_MINOR_VERSION 4
#define FIRMWARE_PATCH_VERSION 3
#define FIRMWARE_PATCH_VERSION 4
#define DEVICE_PROTOCOL_MAJOR_VERSION 4
#define DEVICE_PROTOCOL_MINOR_VERSION 4