Fixed key-rollover issues, refactoring

This commit is contained in:
Nicholas Gadjali
2021-02-17 12:22:30 -08:00
parent 7b8a1dbe38
commit 3f3fc8f935
11 changed files with 16109 additions and 16080 deletions
@@ -1455,7 +1455,7 @@
}
],
"type" : "INTERNAL",
"value" : " C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs"
"value" : " C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs"
},
{
"name" : "PICO_DOXYGEN_PATHS",
@@ -35,7 +35,7 @@
}
},
{
"jsonFile" : "cache-v2-9d60562d12edec43b85c.json",
"jsonFile" : "cache-v2-552b600023f1646865bd.json",
"kind" : "cache",
"version" :
{
@@ -64,7 +64,7 @@
"responses" :
[
{
"jsonFile" : "cache-v2-9d60562d12edec43b85c.json",
"jsonFile" : "cache-v2-552b600023f1646865bd.json",
"kind" : "cache",
"version" :
{
+1 -1
View File
@@ -475,7 +475,7 @@ PICO_BOOT_STAGE2_DIR:INTERNAL=C:/Users/ngadj/Documents/pico-sdk/src/rp2_common/b
PICO_CMAKE_PRELOAD_PLATFORM_DIR:INTERNAL=C:/Users/ngadj/Documents/pico-sdk/cmake/preload/platforms
PICO_CMAKE_PRELOAD_PLATFORM_FILE:INTERNAL=C:/Users/ngadj/Documents/pico-sdk/cmake/preload/platforms/rp2040.cmake
PICO_COMPILER_ASM:INTERNAL=C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2020-q4-major/bin/arm-none-eabi-gcc.exe
PICO_DOXYGEN_EXCLUDE_PATHS:INTERNAL= C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs
PICO_DOXYGEN_EXCLUDE_PATHS:INTERNAL= C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs C:/Users/ngadj/Documents/pico-sdk/src/rp2040/hardware_regs
PICO_DOXYGEN_PATHS:INTERNAL= C:/Users/ngadj/Documents/pico-sdk/src/common C:/Users/ngadj/Documents/pico-sdk/src/rp2_common C:/Users/ngadj/Documents/pico-sdk/src/rp2040
PICO_NO_HARDWARE:INTERNAL=0
PICO_ON_DEVICE:INTERNAL=1
Binary file not shown.
Binary file not shown.
+12802 -12784
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+1012 -1013
View File
File diff suppressed because it is too large Load Diff
+2263 -2260
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
+28 -19
View File
@@ -15,15 +15,15 @@
#include "usb_descriptors.h"
const uint8_t ENC_SENS = 10; // Encoder sensitivity multiplier
const uint8_t L_ENC_GPIO[] = {0, 1};
const uint8_t R_ENC_GPIO[] = {2, 3};
const uint8_t SW_KEYCODE[] = {HID_KEY_RETURN, HID_KEY_A, HID_KEY_S, HID_KEY_D, HID_KEY_F, HID_KEY_Z, HID_KEY_X}; // MODIFY KEYBINDS HERE
const uint8_t SW_GPIO[] = {4, 5, 6, 7, 8, 9, 10}; // MAKE SURE SW_KEYCODE and SW_GPIO LENGTHS MATCH
const uint8_t LED_GPIO[] = {28, 27, 26, 22, 21, 20, 19}; // MAKE SURE SW_GPIO and LED_GPIO LENGTHS MATCH
const uint8_t L_ENC_GPIO[] = {0, 1};
const uint8_t R_ENC_GPIO[] = {2, 3};
const uint8_t ENC_SENS = 10; // Encoder sensitivity multiplier
const size_t ENC_GPIO_SIZE = sizeof(L_ENC_GPIO)/ sizeof(L_ENC_GPIO[0]);
const size_t SW_GPIO_SIZE = sizeof(SW_GPIO)/ sizeof(SW_GPIO[0]);
const size_t LED_GPIO_SIZE = sizeof(LED_GPIO)/ sizeof(LED_GPIO[0]);
const size_t SW_GPIO_SIZE = sizeof(SW_GPIO)/ sizeof(SW_GPIO[0]); // Used for SW_KEYCODE, SW_GPIO, LED_GPIO
static const char *gpio_irq_str[] = {
"LEVEL_LOW", // 0x1
@@ -113,7 +113,7 @@ void init() {
}
// Setup LED GPIO
for (int i = 0; i < LED_GPIO_SIZE; i++) {
for (int i = 0; i < SW_GPIO_SIZE; i++) {
gpio_init(LED_GPIO[i]);
gpio_set_dir(LED_GPIO[i], GPIO_OUT);
}
@@ -125,14 +125,15 @@ void init() {
void key_mode() {
if (tud_hid_ready()) {
/*------------- Keyboard -------------*/
bool isPressed = false;
bool is_pressed = false;
int keycode_idx = 0;
uint8_t keycode[6] = {0}; //looks like we are limited to 6kro?
for (int i = 0; i < SW_GPIO_SIZE; i++) {
if (!gpio_get(SW_GPIO[i])) {
// use to avoid send multiple consecutive zero report for keyboard
uint8_t keycode[6] = {0};
keycode[0] = SW_KEYCODE[i];
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode);
isPressed = true;
keycode[keycode_idx] = SW_KEYCODE[i];
keycode_idx = ++keycode_idx % SW_GPIO_SIZE;
is_pressed = true;
// Reactive Lighting On
gpio_put(LED_GPIO[i], 1);
@@ -141,16 +142,24 @@ void key_mode() {
gpio_put(LED_GPIO[i], 0);
}
}
// send empty key report if previously has key pressed
if (!isPressed) tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL);
// delay a bit before attempt to send keyboard report
board_delay(10);
if (is_pressed) {
// send key report
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, keycode);
} else {
// send empty key report if previously has key pressed
tud_hid_keyboard_report(REPORT_ID_KEYBOARD, 0, NULL);
}
/*------------- Mouse -------------*/
tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, l_enc * ENC_SENS, r_enc * ENC_SENS, 0, 0);
l_enc = 0;
r_enc = 0;
if (l_enc != 0 || r_enc != 0) {
// delay if needed before attempt to send mouse report
while (!tud_hid_ready()) {
board_delay(1);
}
tud_hid_mouse_report(REPORT_ID_MOUSE, 0x00, l_enc * ENC_SENS, r_enc * ENC_SENS, 0, 0);
l_enc = 0;
r_enc = 0;
}
}
}