typico/typewriter-driver/main.c

100 lines
3.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <string.h>
#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;
}