update keyboard fw
This commit is contained in:
parent
8273dca5b3
commit
faf95bcf8a
|
@ -24,14 +24,14 @@ target_include_directories(${PROJECT} PUBLIC
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT} PUBLIC PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1)
|
|
||||||
|
|
||||||
# Configure compilation flags and libraries for the example without RTOS.
|
# Configure compilation flags and libraries for the example without RTOS.
|
||||||
# See the corresponding function in hw/bsp/FAMILY/family.cmake for details.
|
# See the corresponding function in hw/bsp/FAMILY/family.cmake for details.
|
||||||
family_configure_device_example(${PROJECT} noos)
|
family_configure_device_example(${PROJECT} noos)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT} PRIVATE pico_stdlib pico_multicore tinyusb_device tinyusb_board hardware_pwm hardware_i2c hardware_pio)
|
target_link_libraries(${PROJECT} PRIVATE pico_stdlib pico_multicore tinyusb_device tinyusb_board hardware_pwm hardware_i2c hardware_pio)
|
||||||
|
|
||||||
|
target_compile_definitions(${PROJECT} PUBLIC PICO_RP2040_USB_DEVICE_ENUMERATION_FIX=1)
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT} PUBLIC
|
target_compile_definitions(${PROJECT} PUBLIC
|
||||||
PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
|
PICO_XOSC_STARTUP_DELAY_MULTIPLIER=64
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
sudo picotool load build/pocket-hid.uf2
|
sudo picotool load -f build/pocket-hid.uf2
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||||
|
|
||||||
|
# This can be dropped into an external project to help locate this SDK
|
||||||
|
# It should be include()ed prior to project()
|
||||||
|
|
||||||
|
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||||
|
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||||
|
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||||
|
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||||
|
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||||
|
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||||
|
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||||
|
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||||
|
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||||
|
|
||||||
|
if (NOT PICO_SDK_PATH)
|
||||||
|
if (PICO_SDK_FETCH_FROM_GIT)
|
||||||
|
include(FetchContent)
|
||||||
|
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||||
|
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||||
|
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||||
|
endif ()
|
||||||
|
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||||
|
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||||
|
FetchContent_Declare(
|
||||||
|
pico_sdk
|
||||||
|
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||||
|
GIT_TAG master
|
||||||
|
GIT_SUBMODULES_RECURSE FALSE
|
||||||
|
)
|
||||||
|
else ()
|
||||||
|
FetchContent_Declare(
|
||||||
|
pico_sdk
|
||||||
|
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||||
|
GIT_TAG master
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (NOT pico_sdk)
|
||||||
|
message("Downloading Raspberry Pi Pico SDK")
|
||||||
|
FetchContent_Populate(pico_sdk)
|
||||||
|
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||||
|
endif ()
|
||||||
|
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||||
|
else ()
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||||
|
)
|
||||||
|
endif ()
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||||
|
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||||
|
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||||
|
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||||
|
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||||
|
|
||||||
|
include(${PICO_SDK_INIT_CMAKE_FILE})
|
|
@ -173,6 +173,9 @@ void anim_hello(void) {
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
board_init();
|
board_init();
|
||||||
|
|
||||||
|
set_sys_clock_48mhz();
|
||||||
|
|
||||||
tusb_init();
|
tusb_init();
|
||||||
|
|
||||||
uart_init(UART_ID, BAUD_RATE);
|
uart_init(UART_ID, BAUD_RATE);
|
||||||
|
@ -183,59 +186,64 @@ int main(void)
|
||||||
gpio_set_function(PIN_UART_RX, GPIO_FUNC_UART);
|
gpio_set_function(PIN_UART_RX, GPIO_FUNC_UART);
|
||||||
unsigned int UART_IRQ = UART_ID == uart0 ? UART0_IRQ : UART1_IRQ;
|
unsigned int UART_IRQ = UART_ID == uart0 ? UART0_IRQ : UART1_IRQ;
|
||||||
|
|
||||||
gpio_pull_up(PIN_COL1);
|
|
||||||
gpio_init(PIN_LEDS);
|
gpio_init(PIN_LEDS);
|
||||||
gpio_set_dir(PIN_LEDS, true); // output
|
gpio_set_dir(PIN_LEDS, true); // output
|
||||||
|
|
||||||
gpio_init(PIN_COL1);
|
gpio_init(PIN_COL1);
|
||||||
gpio_set_dir(PIN_COL1, false);
|
gpio_set_dir(PIN_COL1, true);
|
||||||
gpio_pull_up(PIN_COL1);
|
//gpio_pull_up(PIN_COL1);
|
||||||
gpio_init(PIN_COL2);
|
gpio_init(PIN_COL2);
|
||||||
gpio_set_dir(PIN_COL2, false);
|
gpio_set_dir(PIN_COL2, true);
|
||||||
gpio_pull_up(PIN_COL2);
|
//gpio_pull_up(PIN_COL2);
|
||||||
gpio_init(PIN_COL3);
|
gpio_init(PIN_COL3);
|
||||||
gpio_set_dir(PIN_COL3, false);
|
gpio_set_dir(PIN_COL3, true);
|
||||||
gpio_pull_up(PIN_COL3);
|
//gpio_pull_up(PIN_COL3);
|
||||||
gpio_init(PIN_COL4);
|
gpio_init(PIN_COL4);
|
||||||
gpio_set_dir(PIN_COL4, false);
|
gpio_set_dir(PIN_COL4, true);
|
||||||
gpio_pull_up(PIN_COL4);
|
//gpio_pull_up(PIN_COL4);
|
||||||
gpio_init(PIN_COL5);
|
gpio_init(PIN_COL5);
|
||||||
gpio_set_dir(PIN_COL5, false);
|
gpio_set_dir(PIN_COL5, true);
|
||||||
gpio_pull_up(PIN_COL5);
|
//gpio_pull_up(PIN_COL5);
|
||||||
gpio_init(PIN_COL6);
|
gpio_init(PIN_COL6);
|
||||||
gpio_set_dir(PIN_COL6, false);
|
gpio_set_dir(PIN_COL6, true);
|
||||||
gpio_pull_up(PIN_COL6);
|
//gpio_pull_up(PIN_COL6);
|
||||||
gpio_init(PIN_COL7);
|
gpio_init(PIN_COL7);
|
||||||
gpio_set_dir(PIN_COL7, false);
|
gpio_set_dir(PIN_COL7, true);
|
||||||
gpio_pull_up(PIN_COL7);
|
//gpio_pull_up(PIN_COL7);
|
||||||
gpio_init(PIN_COL8);
|
gpio_init(PIN_COL8);
|
||||||
gpio_set_dir(PIN_COL8, false);
|
gpio_set_dir(PIN_COL8, true);
|
||||||
gpio_pull_up(PIN_COL8);
|
//gpio_pull_up(PIN_COL8);
|
||||||
gpio_init(PIN_COL9);
|
gpio_init(PIN_COL9);
|
||||||
gpio_set_dir(PIN_COL9, false);
|
gpio_set_dir(PIN_COL9, true);
|
||||||
gpio_pull_up(PIN_COL9);
|
//gpio_pull_up(PIN_COL9);
|
||||||
gpio_init(PIN_COL10);
|
gpio_init(PIN_COL10);
|
||||||
gpio_set_dir(PIN_COL10, false);
|
gpio_set_dir(PIN_COL10, true);
|
||||||
gpio_pull_up(PIN_COL10);
|
//gpio_pull_up(PIN_COL10);
|
||||||
gpio_init(PIN_COL11);
|
gpio_init(PIN_COL11);
|
||||||
gpio_set_dir(PIN_COL11, false);
|
gpio_set_dir(PIN_COL11, true);
|
||||||
gpio_pull_up(PIN_COL11);
|
//gpio_pull_up(PIN_COL11);
|
||||||
gpio_init(PIN_COL12);
|
gpio_init(PIN_COL12);
|
||||||
gpio_set_dir(PIN_COL12, false);
|
gpio_set_dir(PIN_COL12, true);
|
||||||
gpio_pull_up(PIN_COL12);
|
//gpio_pull_up(PIN_COL12);
|
||||||
|
|
||||||
gpio_init(PIN_ROW1);
|
gpio_init(PIN_ROW1);
|
||||||
gpio_set_dir(PIN_ROW1, true);
|
gpio_set_dir(PIN_ROW1, false);
|
||||||
|
gpio_pull_down(PIN_ROW1);
|
||||||
gpio_init(PIN_ROW2);
|
gpio_init(PIN_ROW2);
|
||||||
gpio_set_dir(PIN_ROW2, true);
|
gpio_set_dir(PIN_ROW2, false);
|
||||||
|
gpio_pull_down(PIN_ROW2);
|
||||||
gpio_init(PIN_ROW3);
|
gpio_init(PIN_ROW3);
|
||||||
gpio_set_dir(PIN_ROW3, true);
|
gpio_set_dir(PIN_ROW3, false);
|
||||||
|
gpio_pull_down(PIN_ROW3);
|
||||||
gpio_init(PIN_ROW4);
|
gpio_init(PIN_ROW4);
|
||||||
gpio_set_dir(PIN_ROW4, true);
|
gpio_set_dir(PIN_ROW4, false);
|
||||||
|
gpio_pull_down(PIN_ROW4);
|
||||||
gpio_init(PIN_ROW5);
|
gpio_init(PIN_ROW5);
|
||||||
gpio_set_dir(PIN_ROW5, true);
|
gpio_set_dir(PIN_ROW5, false);
|
||||||
|
gpio_pull_down(PIN_ROW5);
|
||||||
gpio_init(PIN_ROW6);
|
gpio_init(PIN_ROW6);
|
||||||
gpio_set_dir(PIN_ROW6, true);
|
gpio_set_dir(PIN_ROW6, false);
|
||||||
|
gpio_pull_down(PIN_ROW6);
|
||||||
|
|
||||||
i2c_init(i2c0, 100 * 1000);
|
i2c_init(i2c0, 100 * 1000);
|
||||||
gpio_set_function(PIN_SDA, GPIO_FUNC_I2C);
|
gpio_set_function(PIN_SDA, GPIO_FUNC_I2C);
|
||||||
|
@ -374,42 +382,53 @@ int process_keyboard(uint8_t* resulting_scancodes) {
|
||||||
pressed_scancodes[i] = 0;
|
pressed_scancodes[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// pull ROWs low one after the other
|
for (int x = 0; x < KBD_COLS; x++) {
|
||||||
for (int y = 0; y < KBD_ROWS; y++) {
|
gpio_put(PIN_COL1, 0);
|
||||||
switch (y) {
|
gpio_put(PIN_COL2, 0);
|
||||||
case 0: gpio_put(PIN_ROW1, 0); break;
|
gpio_put(PIN_COL3, 0);
|
||||||
case 1: gpio_put(PIN_ROW2, 0); break;
|
gpio_put(PIN_COL4, 0);
|
||||||
case 2: gpio_put(PIN_ROW3, 0); break;
|
gpio_put(PIN_COL5, 0);
|
||||||
case 3: gpio_put(PIN_ROW4, 0); break;
|
gpio_put(PIN_COL6, 0);
|
||||||
case 4: gpio_put(PIN_ROW5, 0); break;
|
gpio_put(PIN_COL7, 0);
|
||||||
case 5: gpio_put(PIN_ROW6, 0); break;
|
gpio_put(PIN_COL8, 0);
|
||||||
|
gpio_put(PIN_COL9, 0);
|
||||||
|
gpio_put(PIN_COL10, 0);
|
||||||
|
gpio_put(PIN_COL11, 0);
|
||||||
|
gpio_put(PIN_COL12, 0);
|
||||||
|
|
||||||
|
switch (x) {
|
||||||
|
case 0: gpio_put(PIN_COL1, 1); break;
|
||||||
|
case 1: gpio_put(PIN_COL2, 1); break;
|
||||||
|
case 2: gpio_put(PIN_COL3, 1); break;
|
||||||
|
case 3: gpio_put(PIN_COL4, 1); break;
|
||||||
|
case 4: gpio_put(PIN_COL5, 1); break;
|
||||||
|
case 5: gpio_put(PIN_COL6, 1); break;
|
||||||
|
case 6: gpio_put(PIN_COL7, 1); break;
|
||||||
|
case 7: gpio_put(PIN_COL8, 1); break;
|
||||||
|
case 8: gpio_put(PIN_COL9, 1); break;
|
||||||
|
case 9: gpio_put(PIN_COL10, 1); break;
|
||||||
|
case 10: gpio_put(PIN_COL11, 1); break;
|
||||||
|
case 11: gpio_put(PIN_COL12, 1); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for signal to stabilize
|
// wait for signal to stabilize
|
||||||
// TODO maybe not necessary
|
|
||||||
//_delay_us(10);
|
//_delay_us(10);
|
||||||
|
sleep_us(1);
|
||||||
|
|
||||||
// check input COLs
|
for (int y = 0; y < KBD_ROWS; y++) {
|
||||||
for (int x = 0; x < KBD_COLS; x++) {
|
|
||||||
uint8_t keycode;
|
uint8_t keycode;
|
||||||
int loc = y*KBD_COLS+x;
|
int loc = y*KBD_COLS+x;
|
||||||
keycode = active_matrix[loc];
|
keycode = active_matrix[loc];
|
||||||
uint8_t pressed = 0;
|
uint8_t pressed = 0;
|
||||||
uint8_t debounced_pressed = 0;
|
uint8_t debounced_pressed = 0;
|
||||||
|
|
||||||
switch (x) {
|
switch (y) {
|
||||||
case 0: pressed = !gpio_get(PIN_COL1); break;
|
case 0: pressed = gpio_get(PIN_ROW1); break;
|
||||||
case 1: pressed = !gpio_get(PIN_COL2); break;
|
case 1: pressed = gpio_get(PIN_ROW2); break;
|
||||||
case 2: pressed = !gpio_get(PIN_COL3); break;
|
case 2: pressed = gpio_get(PIN_ROW3); break;
|
||||||
case 3: pressed = !gpio_get(PIN_COL4); break;
|
case 3: pressed = gpio_get(PIN_ROW4); break;
|
||||||
case 4: pressed = !gpio_get(PIN_COL5); break;
|
case 4: pressed = gpio_get(PIN_ROW5); break;
|
||||||
case 5: pressed = !gpio_get(PIN_COL6); break;
|
case 5: pressed = gpio_get(PIN_ROW6); break;
|
||||||
case 6: pressed = !gpio_get(PIN_COL7); break;
|
|
||||||
case 7: pressed = !gpio_get(PIN_COL8); break;
|
|
||||||
case 8: pressed = !gpio_get(PIN_COL9); break;
|
|
||||||
case 9: pressed = !gpio_get(PIN_COL10); break;
|
|
||||||
case 10: pressed = !gpio_get(PIN_COL11); break;
|
|
||||||
case 11: pressed = !gpio_get(PIN_COL12); break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// shift new state as bit into debounce "register"
|
// shift new state as bit into debounce "register"
|
||||||
|
@ -479,15 +498,6 @@ int process_keyboard(uint8_t* resulting_scancodes) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (y) {
|
|
||||||
case 0: gpio_put(PIN_ROW1, 1); break;
|
|
||||||
case 1: gpio_put(PIN_ROW2, 1); break;
|
|
||||||
case 2: gpio_put(PIN_ROW3, 1); break;
|
|
||||||
case 3: gpio_put(PIN_ROW4, 1); break;
|
|
||||||
case 4: gpio_put(PIN_ROW5, 1); break;
|
|
||||||
case 5: gpio_put(PIN_ROW6, 1); break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// if no more keys are held down, allow a new meta command
|
// if no more keys are held down, allow a new meta command
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
// RHPort max operational speed can defined by board.mk
|
// RHPort max operational speed can defined by board.mk
|
||||||
// Default to max (auto) speed for MCU with internal HighSpeed PHY
|
// Default to max (auto) speed for MCU with internal HighSpeed PHY
|
||||||
#ifndef BOARD_DEVICE_RHPORT_SPEED
|
#ifndef BOARD_DEVICE_RHPORT_SPEED
|
||||||
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_DEFAULT_SPEED
|
#define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_LOW_SPEED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Device mode with rhport and speed defined by board.mk
|
// Device mode with rhport and speed defined by board.mk
|
||||||
|
|
Loading…
Reference in New Issue