mirror of https://github.com/JorjBauer/aiie.git
fix autorepeat problem for modifiers
This commit is contained in:
parent
d54ae6ca1c
commit
548be14913
|
@ -103,6 +103,61 @@ TeensyKeyboard::~TeensyKeyboard()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// apply modifiers to keycode and return result
|
||||||
|
uint8_t TeensyKeyboard::modifyKeycode(uint8_t key)
|
||||||
|
{
|
||||||
|
if (key == ' ' || key == PK_DEL || key == PK_ESC || key == PK_RET || key == PK_TAB) {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key >= 'a' &&
|
||||||
|
key <= 'z') {
|
||||||
|
if (ctrlPressed) {
|
||||||
|
return key - 'a' + 1;
|
||||||
|
}
|
||||||
|
if (leftShiftPressed || rightShiftPressed || capsLock) {
|
||||||
|
return key - 'a' + 'A';
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: can we control-shift?
|
||||||
|
if (key >= ',' && key <= ';') {
|
||||||
|
if (leftShiftPressed || rightShiftPressed) {
|
||||||
|
return shiftedNumber[key - ','];
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (leftShiftPressed || rightShiftPressed) {
|
||||||
|
uint8_t ret = 0;
|
||||||
|
switch (key) {
|
||||||
|
case '=':
|
||||||
|
ret = '+';
|
||||||
|
break;
|
||||||
|
case '[':
|
||||||
|
ret = '{';
|
||||||
|
break;
|
||||||
|
case ']':
|
||||||
|
ret = '}';
|
||||||
|
break;
|
||||||
|
case '\\':
|
||||||
|
ret = '|';
|
||||||
|
break;
|
||||||
|
case '\'':
|
||||||
|
ret = '"';
|
||||||
|
break;
|
||||||
|
case '`':
|
||||||
|
ret = '~';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ret) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
void TeensyKeyboard::pressedKey(uint8_t key)
|
void TeensyKeyboard::pressedKey(uint8_t key)
|
||||||
{
|
{
|
||||||
numPressed++;
|
numPressed++;
|
||||||
|
@ -133,65 +188,7 @@ void TeensyKeyboard::pressedKey(uint8_t key)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (key == ' ' || key == PK_DEL || key == PK_ESC || key == PK_RET || key == PK_TAB) {
|
addEvent(modifyKeycode(key), true);
|
||||||
addEvent(key, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key >= 'a' &&
|
|
||||||
key <= 'z') {
|
|
||||||
if (ctrlPressed) {
|
|
||||||
addEvent(key - 'a' + 1, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (leftShiftPressed || rightShiftPressed || capsLock) {
|
|
||||||
addEvent(key - 'a' + 'A', true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addEvent(key, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: can we control-shift?
|
|
||||||
if (key >= ',' && key <= ';') {
|
|
||||||
if (leftShiftPressed || rightShiftPressed) {
|
|
||||||
addEvent(shiftedNumber[key - ','], true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addEvent(key, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (leftShiftPressed || rightShiftPressed) {
|
|
||||||
uint8_t ret = 0;
|
|
||||||
switch (key) {
|
|
||||||
case '=':
|
|
||||||
ret = '+';
|
|
||||||
break;
|
|
||||||
case '[':
|
|
||||||
ret = '{';
|
|
||||||
break;
|
|
||||||
case ']':
|
|
||||||
ret = '}';
|
|
||||||
break;
|
|
||||||
case '\\':
|
|
||||||
ret = '|';
|
|
||||||
break;
|
|
||||||
case '\'':
|
|
||||||
ret = '"';
|
|
||||||
break;
|
|
||||||
case '`':
|
|
||||||
ret = '~';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ret) {
|
|
||||||
addEvent(ret, true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Everything else falls through.
|
|
||||||
addEvent(key, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TeensyKeyboard::releasedKey(uint8_t key)
|
void TeensyKeyboard::releasedKey(uint8_t key)
|
||||||
|
@ -218,7 +215,7 @@ void TeensyKeyboard::releasedKey(uint8_t key)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
addEvent(key, false);
|
addEvent(modifyKeycode(key), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TeensyKeyboard::kbhit()
|
bool TeensyKeyboard::kbhit()
|
||||||
|
|
|
@ -25,6 +25,8 @@ private:
|
||||||
bool addEvent(uint8_t kc, bool pressed);
|
bool addEvent(uint8_t kc, bool pressed);
|
||||||
bool popEvent(uint8_t *kc, bool *pressed);
|
bool popEvent(uint8_t *kc, bool *pressed);
|
||||||
|
|
||||||
|
uint8_t modifyKeycode(uint8_t key);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool leftShiftPressed;
|
bool leftShiftPressed;
|
||||||
bool rightShiftPressed;
|
bool rightShiftPressed;
|
||||||
|
|
Loading…
Reference in New Issue