diff --git a/typewriter-driver/CMakeLists.txt b/typewriter-driver/CMakeLists.txt new file mode 100644 index 0000000..65e9f9b --- /dev/null +++ b/typewriter-driver/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.13) +include(pico_sdk_import.cmake) +project(typewriter_project C CXX ASM) +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) +pico_sdk_init() +add_executable(main +main.c +) +pico_enable_stdio_usb(main 1) +pico_enable_stdio_uart(main 1) +pico_add_extra_outputs(main) +target_link_libraries(main pico_stdlib) diff --git a/typewriter-driver/main.c b/typewriter-driver/main.c new file mode 100644 index 0000000..91650e2 --- /dev/null +++ b/typewriter-driver/main.c @@ -0,0 +1,100 @@ +#include +#include +#include "pico/stdlib.h" +#include "hardware/gpio.h" +#include "pico/binary_info.h" + +const uint LED_PIN = 0; + +// Define hash table for letter matrix + +#define TABLE_SIZE 256 + +typedef struct { + char key; + int l_value; + int r_value; +} Entry; + +typedef struct { + Entry entries[TABLE_SIZE]; + int count; +} LetterMatrix; + +void init_matrix(LetterMatrix* mt) { + mt->count = 0; + + mt->entries[mt->count++] = (Entry){'a', 3, 16}; + mt->entries[mt->count++] = (Entry){'b', 4, 15}; + mt->entries[mt->count++] = (Entry){'c', 1, 9}; + mt->entries[mt->count++] = (Entry){'d', 2, 13}; + mt->entries[mt->count++] = (Entry){'e', 2, 14}; + mt->entries[mt->count++] = (Entry){'f', 1, 13}; + mt->entries[mt->count++] = (Entry){'g', 1, 16}; + mt->entries[mt->count++] = (Entry){'h', 4, 16}; + mt->entries[mt->count++] = (Entry){'i', 5, 13}; + mt->entries[mt->count++] = (Entry){'j', 4, 13}; + mt->entries[mt->count++] = (Entry){'k', 5, 14}; + mt->entries[mt->count++] = (Entry){'l', 5, 16}; + mt->entries[mt->count++] = (Entry){'m', 5, 10}; + mt->entries[mt->count++] = (Entry){'n', 5, 9}; + mt->entries[mt->count++] = (Entry){'o', 5, 18}; + mt->entries[mt->count++] = (Entry){'p', 6, 17}; + mt->entries[mt->count++] = (Entry){'q', 3, 18}; + mt->entries[mt->count++] = (Entry){'r', 1, 14}; + mt->entries[mt->count++] = (Entry){'s', 2, 18}; + mt->entries[mt->count++] = (Entry){'t', 1, 18}; + mt->entries[mt->count++] = (Entry){'u', 4, 14}; + mt->entries[mt->count++] = (Entry){'v', 1, 15}; + mt->entries[mt->count++] = (Entry){'w', 2, 16}; + mt->entries[mt->count++] = (Entry){'x', 2, 9}; + mt->entries[mt->count++] = (Entry){'y', 3, 15}; + mt->entries[mt->count++] = (Entry){'z', 4, 18}; + mt->entries[mt->count++] = (Entry){'1', 3, 13}; + mt->entries[mt->count++] = (Entry){'2', 3, 14}; + mt->entries[mt->count++] = (Entry){'3', 2, 15}; + mt->entries[mt->count++] = (Entry){'4', 2, 10}; + mt->entries[mt->count++] = (Entry){'5', 1, 10}; + mt->entries[mt->count++] = (Entry){'6', 1, 17}; + mt->entries[mt->count++] = (Entry){'7', 4, 17}; + mt->entries[mt->count++] = (Entry){'8', 4, 10}; + mt->entries[mt->count++] = (Entry){'9', 5, 17}; + mt->entries[mt->count++] = (Entry){'0', 5, 15}; + mt->entries[mt->count++] = (Entry){'ß', 6, 15}; + mt->entries[mt->count++] = (Entry){'+', 7, 14}; + mt->entries[mt->count++] = (Entry){'#', 7, 15}; + mt->entries[mt->count++] = (Entry){''', 6, 16}; + mt->entries[mt->count++] = (Entry){'.', 6, 9}; + mt->entries[mt->count++] = (Entry){'-', 7, 18}; + mt->entries[mt->count++] = (Entry){' ', 4, 9}; + mt->entries[mt->count++] = (Entry){'´', 6, 10}; +}; + +// Lookup function to get left and right pin values for the letter +Entry* lookup(LetterMatrix* mt, char key) { + for (int i = 0; i < ht->count; i++) { + if (ht->entries[i].key == key) { + return &ht->entries[i]; + } + } + return NULL; // Not found +}; + +// TODO: Implement special keys + +int main () { + bi_decl(bi_program_description("Blink")); + bi_decl(bi_1pin_with_name(LED_PIN, "Onboard LED")); + + stdio_init_all(); + gpio_init(LED_PIN); + gpio_set_dir(LED_PIN, GPIO_OUT); + + while (1) { + gpio_put(LED_PIN, 1); + sleep_ms(1000); + gpio_put(LED_PIN, 0); + sleep_ms(1000); + } + return 0; +}