From 33ffdb09c38e512764effdaed0a4e40aabd18c99 Mon Sep 17 00:00:00 2001 From: Peter Weingartner Date: Sat, 29 Jun 2024 20:35:35 -0400 Subject: [PATCH] Fixed issue with RTC include file. --- misc/Foenix Scan Code 1 Mapping.ods | Bin 0 -> 18295 bytes src/dev/Makefile | 4 +- src/dev/kbd_f256k.c | 81 +++++++++++++++++++--------- src/dev/kbd_f256k.h | 8 +++ src/dev/rtc.c | 2 +- src/include/F256/via_f256.h | 2 - src/include/rtc_reg.h | 2 +- src/toolbox.c | 37 +++++++++++-- 8 files changed, 101 insertions(+), 35 deletions(-) create mode 100644 misc/Foenix Scan Code 1 Mapping.ods diff --git a/misc/Foenix Scan Code 1 Mapping.ods b/misc/Foenix Scan Code 1 Mapping.ods new file mode 100644 index 0000000000000000000000000000000000000000..a21581d568b6e1c2ec83586285dfd71c62b9339a GIT binary patch literal 18295 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 Q#DxBt!2 #include +#include +#include "uart.h" + // // Constants // @@ -26,15 +31,25 @@ // Map a key's matrix position to its scan code (FoenixMCP scan codes are used here) // -static const uint8_t kbd_scan_codes[KBD_COLUMNS][KBD_ROWS] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} +// PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PB8 +// PA0 DELETE RETURN LEFT F7 F1 F3 F5 UP DOWN +// PA1 3 W A 4 Z S E L-SHIFT +// PA2 5 R D 6 C F T X +// PA3 7 Y G 8 B H U V +// PA4 9 I J 0 M K O N +// PA5 - P L CAPS . : [ , +// PA6 = ] ' HOME R-SHIFT ALT TAB / RIGHT +// PA7 1 BKSP CTRL 2 SPACE Foenix Q RUN/STOP + +static const uint8_t kbd_scan_codes[KBD_ROWS][KBD_COLUMNS] = { + {0x65, 0x1c, 0x69, 0x41, 0x3b, 0x3d, 0x3f, 0x68, 0x6a}, + {0x04, 0x11, 0x1e, 0x05, 0x2c, 0x1f, 0x12, 0x2a, 0x00}, + {0x06, 0x13, 0x20, 0x07, 0x2e, 0x21, 0x14, 0x2d, 0x00}, + {0x08, 0x15, 0x22, 0x09, 0x30, 0x23, 0x16, 0x2f, 0x00}, + {0x0a, 0x17, 0x24, 0x0b, 0x32, 0x25, 0x18, 0x31, 0x00}, + {0x0c, 0x19, 0x26, 0x3a, 0x34, 0x27, 0x1a, 0x33, 0x00}, + {0x0d, 0x1b, 0x28, 0x63, 0x36, 0x5c, 0x0f, 0x35, 0x6b}, + {0x02, 0x01, 0x1d, 0x03, 0x39, 0x5b, 0x10, 0x61, 0x00} }; // @@ -44,16 +59,7 @@ static const uint8_t kbd_scan_codes[KBD_COLUMNS][KBD_ROWS] = { static uint8_t kbd_stat[KBD_MATRIX_SIZE]; static short counter = 0; static uint8_t last_press = 0; - -// PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7 PB8 -// PA7 1 <== CTRL RUN SPC F Q 2 -// PA1 3 W A L-SHIFT Z S E 4 -// PA2 5 R D X C F T 6 -// PA3 7 Y G V B H U 8 -// PA4 9 I J N M K O 0 -// PA5 + P L , . : @ CAPS -// PA6 - * ; / R-SHIFT ALT TAB HOME RIGHT -// PA0 DEL RETURN LEFT UP F1 F3 F5 F7 DOWN +static t_word_ring scan_code_buffer; /** * @brief Get the keys selected in a given column @@ -65,15 +71,19 @@ static uint8_t kbd_get_rows(short column) { uint8_t result = 0x00; if (column > 7) { + via0->pb = 0x00; + result = via1->pa; via0->pb = 0x80; - result = via1->pa; - via0->pb = 0; } else { - via1->pb = 0x01 << column; + via1->pb = ~(0x01 << column); result = via1->pa; - via1->pb = 0; + via1->pb = 0xff; } + char message[80]; + sprintf(message, "Row: %02X, %02X", result, column); + uart_writeln(0, message); + return result; } @@ -85,7 +95,7 @@ static uint8_t kbd_get_rows(short column) { * @param is_pressed TRUE, the key is down... FALSE, the key is up */ static void kbd_process_key(short column, short row, bool is_pressed) { - uint8_t scan_code = kbd_scan_codes[column][row]; + uint8_t scan_code = kbd_scan_codes[row][column]; if (scan_code != 0) { if (!is_pressed) { if (last_press == scan_code) { @@ -101,7 +111,23 @@ static void kbd_process_key(short column, short row, bool is_pressed) { last_press = scan_code; } - // TODO: queue the scan code + if (!rb_word_full(&scan_code_buffer)) { + rb_word_put(&scan_code_buffer, (unsigned short)scan_code); + } + } +} + +/* + * Try to retrieve the next scancode from the keyboard. + * + * Returns: + * The next scancode to be processed, 0 if nothing. + */ +unsigned short kbd_get_scancode() { + if (rb_word_empty(&scan_code_buffer)) { + return 0; + } else { + return rb_word_get(&scan_code_buffer); } } @@ -154,4 +180,9 @@ short kbd_init() { for (short i = 0; i < KBD_MATRIX_SIZE; i++) { kbd_stat[i] = 0; } + + // Set up and clear out the buffer for the scan codes + rb_word_init(&scan_code_buffer); + + return 1; } diff --git a/src/dev/kbd_f256k.h b/src/dev/kbd_f256k.h index 8876ee8..fc23115 100644 --- a/src/dev/kbd_f256k.h +++ b/src/dev/kbd_f256k.h @@ -18,6 +18,14 @@ */ extern void kbd_handle_irq(); +/* + * Try to retrieve the next scancode from the keyboard. + * + * Returns: + * The next scancode to be processed, 0 if nothing. + */ +extern unsigned short kbd_get_scancode(); + /* * Initialize the matrix keyboard * diff --git a/src/dev/rtc.c b/src/dev/rtc.c index d908502..2c170a2 100644 --- a/src/dev/rtc.c +++ b/src/dev/rtc.c @@ -259,6 +259,6 @@ SYSTEMCALL void rtc_get_time(p_time time) { * the number of jiffies since the last reset */ long rtc_get_jiffies() { - return timers_jiffies(); + return 0; // timers_jiffies(); } diff --git a/src/include/F256/via_f256.h b/src/include/F256/via_f256.h index 65daefb..b069884 100644 --- a/src/include/F256/via_f256.h +++ b/src/include/F256/via_f256.h @@ -52,8 +52,6 @@ typedef struct via_s { #define VIA_INT_IRQ 0x80 #define via0 ((volatile __attribute__((far)) via_p)0xf01c00) -#if MODEL == MODEL_FOENIX_F256K || MODEL ==MODEL_FOENIX_F256K2 #define via1 ((volatile __attribute__((far)) via_p)0xf01b00) -#endif #endif diff --git a/src/include/rtc_reg.h b/src/include/rtc_reg.h index 1359ef8..66c2aff 100644 --- a/src/include/rtc_reg.h +++ b/src/include/rtc_reg.h @@ -27,7 +27,7 @@ #define RTC_CTRL ((volatile unsigned char *)0xFEC0008E) #define RTC_CENTURY ((volatile unsigned char *)0xFEC0008F) -#elif MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS +#elif MODEL == MODEL_FOENIX_A2560U || MODEL == MODEL_FOENIX_A2560U_PLUS #define RTC_BASE ((volatile unsigned char *)0x00B00080) #define RTC_SEC ((volatile unsigned char *)0x00B00080) diff --git a/src/toolbox.c b/src/toolbox.c index 49e34a4..4aaeeba 100644 --- a/src/toolbox.c +++ b/src/toolbox.c @@ -34,6 +34,7 @@ #include "dev/txt_evid.h" #elif MODEL == MODEL_FOENIX_F256 || MODEL == MODEL_FOENIX_F256K || MODEL == MODEL_FOENIX_F256K2 #include "dev/txt_f256.h" +#include "dev/kbd_f256k.h" #endif #include "syscalls.h" @@ -133,7 +134,7 @@ void initialize() { #error Cannot identify screen setup #endif - printf("Foenix Toolbox v%d.%02d.%04d starting up...\n", VER_MAJOR, VER_MINOR, VER_BUILD); + printf("Foenix Toolbox v%d.%02d.%04d starting up...\nHello, F256k!\n", VER_MAJOR, VER_MINOR, VER_BUILD); INFO("Text system initialized."); // // Initialize the bitmap system @@ -178,9 +179,21 @@ void initialize() { // timers_init(); // INFO("Timers initialized"); -// /* Initialize the real time clock */ -// rtc_init(); -// INFO("Real time clock initialized"); + /* Initialize the real time clock */ + rtc_init(); + INFO("Real time clock initialized"); + + t_time time; + time.year = 2024; + time.month = 6; + time.day = 24; + time.hour = 22; + time.minute = 0; + time.second = 0; + rtc_set_time(&time); + + rtc_get_time(&time); + INFO3("%04d-%02d-%02d", time.year, time.month, time.day); // target_jiffies = sys_time_jiffies() + 300; /* 5 seconds minimum */ // DEBUG1("target_jiffies assigned: %d", target_jiffies); @@ -259,6 +272,12 @@ void initialize() { // } } +char dec2hex(uint8_t x) { + char * hex_digits = "0123456789ABCDEF"; + + return hex_digits[x & 0x0f]; +} + int main(int argc, char * argv[]) { short result; short i; @@ -266,6 +285,16 @@ int main(int argc, char * argv[]) { initialize(); + // while (1) { + // kbd_handle_irq(); + // unsigned short scan_code = kbd_get_scancode(); + // if (scan_code != 0) { + // tvky_text_matrix[0] = dec2hex((scan_code & 0xf0) >> 4); + // tvky_text_matrix[1] = dec2hex(scan_code & 0x0f); + // tvky_text_matrix[2] += 1; + // } + // } + // Attempt to start up the user code // log(LOG_INFO, "Looking for user startup code:"); // boot_launch();