Merge branch 'master' into action-cache
This commit is contained in:
@@ -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;
|
||||
@@ -286,7 +286,7 @@ bool processDelayAction(void)
|
||||
inDelay = false;
|
||||
}
|
||||
} else {
|
||||
Timer_SetCurrentTime(&delayStart);
|
||||
delayStart = CurrentTime;
|
||||
inDelay = true;
|
||||
}
|
||||
return inDelay;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -21,5 +21,8 @@ void UsbCommand_GetVariable(void)
|
||||
case UsbVariable_DebounceTimeRelease:
|
||||
SetUsbTxBufferUint8(1, DebounceTimeRelease);
|
||||
break;
|
||||
case UsbVariable_UsbReportSemaphore:
|
||||
SetUsbTxBufferUint8(1, UsbReportUpdateSemaphore);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,5 +24,8 @@ void UsbCommand_SetVariable(void)
|
||||
case UsbVariable_DebounceTimeRelease:
|
||||
DebounceTimeRelease = GetUsbRxBufferUint8(2);
|
||||
break;
|
||||
case UsbVariable_UsbReportSemaphore:
|
||||
UsbReportUpdateSemaphore = GetUsbRxBufferUint8(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,7 +42,8 @@
|
||||
UsbVariable_TestSwitches,
|
||||
UsbVariable_TestUsbStack,
|
||||
UsbVariable_DebounceTimePress,
|
||||
UsbVariable_DebounceTimeRelease
|
||||
UsbVariable_DebounceTimeRelease,
|
||||
UsbVariable_UsbReportSemaphore,
|
||||
} usb_variable_id_t;
|
||||
|
||||
typedef enum {
|
||||
|
||||
@@ -226,11 +226,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,7 +351,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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -361,13 +361,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;
|
||||
}
|
||||
|
||||
@@ -406,6 +406,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;
|
||||
@@ -434,14 +435,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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user