From 15771c85ec05560be78618e756644354fc2b1c36 Mon Sep 17 00:00:00 2001 From: _N0x Date: Mon, 7 Feb 2022 02:19:18 +0100 Subject: [PATCH 1/7] fixed readme --- .gitignore | 3 +++ README.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cd531cf..7b2e2e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +build/ +firmware/ + # ---> C # Prerequisites *.d diff --git a/README.md b/README.md index 8d378f1..8ae5f6b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ # f8prog -A simple tool to reprogram the MAX FALCON-8 macropad \ No newline at end of file +A tool to programm the MAX FALCON-8 macropad written in C -- 2.39.5 From 144cd7031ec3926d1c5c4911b8148ba293de6f1f Mon Sep 17 00:00:00 2001 From: _N0x Date: Wed, 9 Feb 2022 00:35:01 +0100 Subject: [PATCH 2/7] Added make file for project and fixed .gitignore --- .gitignore | 5 +++++ Makefile | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 Makefile diff --git a/.gitignore b/.gitignore index 7b2e2e2..6f1695e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ +# exclude project binary +f8prog + +# exclude project dirs build/ firmware/ +.ccls-cache/ # ---> C # Prerequisites diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a64b886 --- /dev/null +++ b/Makefile @@ -0,0 +1,37 @@ +## Compiler settings +CC = cc +CFLAGS = -Wall +LDFLAGS = + +## Project settings +TARGET = f8prog ## name of the application + +## Paths +SRC = $(wildcard src/*.c) +OFILES = $(patsubst src%, build%, $(patsubst src/%.c, build/%.o, $(SRC))) + + +$(TARGET): ./build $(OFILES) + $(CC) $(CFLAGS) $(OFILES) -o $(TARGET) $(LDFLAGS) + +%.o: ../src/%.c + $(CC) $(CFLAGS) -c $^ -o $@ + +./build: + mkdir -p $@ + +clean: + rm -rf $(OFILES) + rm -f $(TARGET) + rm -rf ./build + +test: $(TARGET) + ./$(TARGET) + +options: + @echo $(TARGET) build options: + @echo "CFLAGS = ${CFLAGS}" + @echo "LDFLAGS = ${LDFLAGS}" + @echo "CC = ${CC}" + +.PHONY: options clean test -- 2.39.5 From 90d00de84601e81ac983b9282820b469a9e145f3 Mon Sep 17 00:00:00 2001 From: _N0x Date: Wed, 9 Feb 2022 05:10:15 +0100 Subject: [PATCH 3/7] First test to read and edit the firmware, added defines for the required offsets etc --- firmware.bin | Bin 0 -> 32768 bytes include/change_key.h | 32 +++++++++++++++++++++++ include/firmware_handling.h | 11 ++++++++ src/change_key.c | 10 ++++++++ src/firmware_handling.c | 49 ++++++++++++++++++++++++++++++++++++ src/main.c | 27 ++++++++++++++++++++ 6 files changed, 129 insertions(+) create mode 100644 firmware.bin create mode 100644 include/change_key.h create mode 100644 include/firmware_handling.h create mode 100644 src/change_key.c create mode 100644 src/firmware_handling.c create mode 100644 src/main.c diff --git a/firmware.bin b/firmware.bin new file mode 100644 index 0000000000000000000000000000000000000000..3e478deb202031cb1feb665f245103022cdfc54b GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/include/change_key.h b/include/change_key.h new file mode 100644 index 0000000..d39ed56 --- /dev/null +++ b/include/change_key.h @@ -0,0 +1,32 @@ +/* changeKey.h */ + +/* Define for key offsets */ +#define KEY1 0x00005149 +#define KEY2 0x00005179 +#define KEY3 0x00005181 +#define KEY4 0x00005189 +#define KEY5 0x00005190 +#define KEY6 0x00005182 +#define KEY7 0x0000517a +#define KEY8 0x0000514a + +/* Define for prog1-8 offset */ +#define PROG1_OFFSET 0x0000539C +#define PROG2_OFFSET 0x000056BC +#define PROG3_OFFSET 0x000059DC +#define PROG4_OFFSET 0x00005CFC +#define PROG5_OFFSET 0x0000601C +#define PROG6_OFFSET 0x0000633C +#define PROG7_OFFSET 0x0000665C +#define PROG8_OFFSET 0x0006977C + +typedef struct key_prog key_prog; +struct key_prog +{ + int offset; + int key_settings[100][8]; +}; + + +void set_key_value(char* firmware_buffer, int key, int value); + diff --git a/include/firmware_handling.h b/include/firmware_handling.h new file mode 100644 index 0000000..07eeb91 --- /dev/null +++ b/include/firmware_handling.h @@ -0,0 +1,11 @@ +typedef struct fbuffer_t fbuffer_t; +struct fbuffer_t +{ + char* buffer; + int size; +}; + +/* reads in the firmware file into a buffer */ +fbuffer_t* get_firmware_buffer(char* filename); +void write_firmware_buffer(char* filename, fbuffer_t* p_fb); + diff --git a/src/change_key.c b/src/change_key.c new file mode 100644 index 0000000..9166d04 --- /dev/null +++ b/src/change_key.c @@ -0,0 +1,10 @@ +#include +#include +#include +#include + +#include "../include/change_key.h" + +void set_key_value(char* firmware_buffer, int key, int value) { + memset(firmware_buffer + key, value, 1); +} diff --git a/src/firmware_handling.c b/src/firmware_handling.c new file mode 100644 index 0000000..2447fa1 --- /dev/null +++ b/src/firmware_handling.c @@ -0,0 +1,49 @@ +#include +#include +#include +#include +#include + +#include "../include/firmware_handling.h" + +fbuffer_t* get_firmware_buffer(char* filename) { + + fbuffer_t buffer; + fbuffer_t* p_fb = &buffer; + + FILE *firmware = fopen(filename, "rb"); + if(!firmware) { + perror("Error while reading in Firmware File.\r\nExiting."); + exit(EXIT_FAILURE); + } + + struct stat sb; + if(stat(filename, &sb) == -1) { + perror("Error while reading Firmware metadata.\r\nExiting."); + exit(EXIT_FAILURE); + } + + p_fb->size = sb.st_size; + p_fb->buffer = malloc(p_fb->size); + fread(p_fb->buffer, p_fb->size, 1, firmware); + + /* for testing if the buffer could be read correclty */ + // printf("buffer size: %d", p_fb->size); + + fclose(firmware); + + return p_fb; +} + +void write_firmware_buffer(char* filename, fbuffer_t* p_fb) { + + FILE *firmware_file = fopen(filename, "wb+"); + if(!firmware_file) { + perror("Error while opening in Firmware File.\r\nExiting."); + exit(EXIT_FAILURE); + } + + fwrite(p_fb->buffer, p_fb->size, 1, firmware_file); + + fclose(firmware_file); +} diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..e5ba17b --- /dev/null +++ b/src/main.c @@ -0,0 +1,27 @@ +#include +#include +#include + +#include "../include/change_key.h" +#include "../include/firmware_handling.h" + +int main (int argc, char *argv[]) +{ + fbuffer_t* p_fb = get_firmware_buffer(argv[1]); + + set_key_value(p_fb->buffer, KEY8, 0x1E); + + /* for debugging -> print content of buffer to terminal */ + /* + for(int i = 0; isize; i++){ + putc(isprint(fb->buffer[i]) ? fb->buffer[i] : '.', stdout); + } + */ + + char str[50]; + + sprintf(str, "new_%s", argv[1]); + + write_firmware_buffer(str, p_fb); + return 0; +} -- 2.39.5 From 6bca4340b8c0e5b6986769915f4903ff55ba985d Mon Sep 17 00:00:00 2001 From: _N0x Date: Wed, 9 Feb 2022 05:32:13 +0100 Subject: [PATCH 4/7] Added header file for keycodes --- include/change_key.h | 16 +-- include/keycodes.h | 233 +++++++++++++++++++++++++++++++++++++++++++ src/main.c | 7 +- 3 files changed, 245 insertions(+), 11 deletions(-) create mode 100644 include/keycodes.h diff --git a/include/change_key.h b/include/change_key.h index d39ed56..cdc2083 100644 --- a/include/change_key.h +++ b/include/change_key.h @@ -1,14 +1,14 @@ /* changeKey.h */ /* Define for key offsets */ -#define KEY1 0x00005149 -#define KEY2 0x00005179 -#define KEY3 0x00005181 -#define KEY4 0x00005189 -#define KEY5 0x00005190 -#define KEY6 0x00005182 -#define KEY7 0x0000517a -#define KEY8 0x0000514a +#define F8_KEY1 0x00005149 +#define F8_KEY2 0x00005179 +#define F8_KEY3 0x00005181 +#define F8_KEY4 0x00005189 +#define F8_KEY5 0x00005190 +#define F8_KEY6 0x00005182 +#define F8_KEY7 0x0000517a +#define F8_KEY8 0x0000514a /* Define for prog1-8 offset */ #define PROG1_OFFSET 0x0000539C diff --git a/include/keycodes.h b/include/keycodes.h new file mode 100644 index 0000000..0bf10f6 --- /dev/null +++ b/include/keycodes.h @@ -0,0 +1,233 @@ +/* keycodes taken from https://usb.org/sites/default/files/hut1_22.pdf + * See also: https://github.com/benblazak/ergodox-firmware/blob/master/src/lib/usb/usage-page/keyboard.h + * */ + +#define KEY_ErrorRollOver 0x01 +#define KEY_POSTFail 0x02 +#define KEY_ErrorUndefined 0x03 +#define KEY_a_A 0x04 +#define KEY_b_B 0x05 +#define KEY_c_C 0x06 +#define KEY_d_D 0x07 +#define KEY_e_E 0x08 +#define KEY_f_F 0x09 +#define KEY_g_G 0x0A +#define KEY_h_H 0x0B +#define KEY_i_I 0x0C +#define KEY_j_J 0x0D +#define KEY_k_K 0x0E +#define KEY_l_L 0x0F +#define KEY_m_M 0x10 +#define KEY_n_N 0x11 +#define KEY_o_O 0x12 +#define KEY_p_P 0x13 +#define KEY_q_Q 0x14 +#define KEY_r_R 0x15 +#define KEY_s_S 0x16 +#define KEY_t_T 0x17 +#define KEY_u_U 0x18 +#define KEY_v_V 0x19 +#define KEY_w_W 0x1A +#define KEY_x_X 0x1B +#define KEY_y_Y 0x1C +#define KEY_z_Z 0x1D +#define KEY_1_Exclamation 0x1E +#define KEY_2_At 0x1F +#define KEY_3_Pound 0x20 +#define KEY_4_Dollar 0x21 +#define KEY_5_Percent 0x22 +#define KEY_6_Caret 0x23 +#define KEY_7_Ampersand 0x24 +#define KEY_8_Asterisk 0x25 +#define KEY_9_LeftParenthesis 0x26 +#define KEY_0_RightParenthesis 0x27 +#define KEY_ReturnEnter 0x28 +#define KEY_Escape 0x29 +#define KEY_DeleteBackspace 0x2A +#define KEY_Tab 0x2B +#define KEY_Spacebar 0x2C +#define KEY_Dash_Underscore 0x2D +#define KEY_Equal_Plus 0x2E +#define KEY_LeftBracket_LeftBrace 0x2F +#define KEY_RightBracket_RightBrace 0x30 +#define KEY_Backslash_Pipe 0x31 +#define KEY_NonUS_Pound_Tilde 0x32 +#define KEY_Semicolon_Colon 0x33 +#define KEY_SingleQuote_DoubleQuote 0x34 +#define KEY_GraveAccent_Tilde 0x35 +#define KEY_Comma_LessThan 0x36 +#define KEY_Period_GreaterThan 0x37 +#define KEY_Slash_Question 0x38 +#define KEY_CapsLock 0x39 +#define KEY_F1 0x3A +#define KEY_F2 0x3B +#define KEY_F3 0x3C +#define KEY_F4 0x3D +#define KEY_F5 0x3E +#define KEY_F6 0x3F +#define KEY_F7 0x40 +#define KEY_F8 0x41 +#define KEY_F9 0x42 +#define KEY_F10 0x43 +#define KEY_F11 0x44 +#define KEY_F12 0x45 +#define KEY_PrintScreen 0x46 +#define KEY_ScrollLock 0x47 +#define KEY_Pause 0x48 +#define KEY_Insert 0x49 +#define KEY_Home 0x4A +#define KEY_PageUp 0x4B +#define KEY_DeleteForward 0x4C +#define KEY_End 0x4D +#define KEY_PageDown 0x4E +#define KEY_RightArrow 0x4F +#define KEY_LeftArrow 0x50 +#define KEY_DownArrow 0x51 +#define KEY_UpArrow 0x52 + +#define KEYPAD_NumLock_Clear 0x53 +#define KEYPAD_Slash 0x54 +#define KEYPAD_Asterisk 0x55 +#define KEYPAD_Minus 0x56 +#define KEYPAD_Plus 0x57 +#define KEYPAD_ENTER 0x58 +#define KEYPAD_1_End 0x59 +#define KEYPAD_2_DownArrow 0x5A +#define KEYPAD_3_PageDown 0x5B +#define KEYPAD_4_LeftArrow 0x5C +#define KEYPAD_5 0x5D +#define KEYPAD_6_RightArrow 0x5E +#define KEYPAD_7_Home 0x5F +#define KEYPAD_8_UpArrow 0x60 +#define KEYPAD_9_PageUp 0x61 +#define KEYPAD_0_Insert 0x62 +#define KEYPAD_Period_Delete 0x63 + +#define KEY_NonUS_Backslash_Pipe 0x64 +#define KEY_Application 0x65 +#define KEY_Power 0x66 + +#define KEYPAD_Equal 0x67 + +#define KEY_F13 0x68 +#define KEY_F14 0x69 +#define KEY_F15 0x6A +#define KEY_F16 0x6B +#define KEY_F17 0x6C +#define KEY_F18 0x6D +#define KEY_F19 0x6E +#define KEY_F20 0x6F +#define KEY_F21 0x70 +#define KEY_F22 0x71 +#define KEY_F23 0x72 +#define KEY_F24 0x73 +#define KEY_Execute 0x74 +#define KEY_Help 0x75 +#define KEY_Menu 0x76 +#define KEY_Select 0x77 +#define KEY_Stop 0x78 +#define KEY_Again 0x79 +#define KEY_Undo 0x7A +#define KEY_Cut 0x7B +#define KEY_Copy 0x7C +#define KEY_Paste 0x7D +#define KEY_Find 0x7E +#define KEY_Mute 0x7F +#define KEY_VolumeUp 0x80 +#define KEY_VolumeDown 0x81 +#define KEY_LockingCapsLock 0x82 +#define KEY_LockingNumLock 0x83 +#define KEY_LockingScrollLock 0x84 + +#define KEYPAD_Comma 0x85 +#define KEYPAD_EqualSign 0x86 + +#define KEY_International1 0x87 +#define KEY_International2 0x88 +#define KEY_International3 0x89 +#define KEY_International4 0x8A +#define KEY_International5 0x8B +#define KEY_International6 0x8C +#define KEY_International7 0x8D +#define KEY_International8 0x8E +#define KEY_International9 0x8F +#define KEY_LANG1 0x90 +#define KEY_LANG2 0x91 +#define KEY_LANG3 0x92 +#define KEY_LANG4 0x93 +#define KEY_LANG5 0x94 +#define KEY_LANG6 0x95 +#define KEY_LANG7 0x96 +#define KEY_LANG8 0x97 +#define KEY_LANG9 0x98 +#define KEY_AlternateErase 0x99 +#define KEY_SysReq_Attention 0x9A +#define KEY_Cancel 0x9B +#define KEY_Clear 0x9C +#define KEY_Prior 0x9D +#define KEY_Return 0x9E +#define KEY_Separator 0x9F +#define KEY_Out 0xA0 +#define KEY_Oper 0xA1 +#define KEY_Clear_Again 0xA2 +#define KEY_CrSel_Props 0xA3 +#define KEY_ExSel 0xA4 +// (Reserved) 0xA5..0xAF +#define KEYPAD_00 0xB0 +#define KEYPAD_000 0xB1 + +#define KEY_ThousandsSeparator 0xB2 +#define KEY_DecimalSeparator 0xB3 +#define KEY_CurrencyUnit 0xB4 +#define KEY_CurrencySubunit 0xB5 + +#define KEYPAD_LeftParenthesis 0xB6 +#define KEYPAD_RightParenthesis 0xB7 +#define KEYPAD_LeftBrace 0xB8 +#define KEYPAD_RightBrace 0xB9 + +#define KEYPAD_Tab 0xBA +#define KEYPAD_Backspace 0xBB +#define KEYPAD_A 0xBC +#define KEYPAD_B 0xBD +#define KEYPAD_C 0xBE +#define KEYPAD_D 0xBF +#define KEYPAD_E 0xC0 +#define KEYPAD_F 0xC1 +#define KEYPAD_XOR 0xC2 +#define KEYPAD_Caret 0xC3 +#define KEYPAD_Percent 0xC4 +#define KEYPAD_LessThan 0xC5 +#define KEYPAD_GreaterThan 0xC6 +#define KEYPAD_Ampersand 0xC7 +#define KEYPAD_AmpersandAmpersand 0xC8 +#define KEYPAD_Pipe 0xC9 +#define KEYPAD_PipePipe 0xCA +#define KEYPAD_Colon 0xCB +#define KEYPAD_Pound 0xCC +#define KEYPAD_Space 0xCD +#define KEYPAD_At 0xCE +#define KEYPAD_Exclamation 0xCF +#define KEYPAD_MemoryStore 0xD0 +#define KEYPAD_MemoryRecall 0xD1 +#define KEYPAD_MemoryClear 0xD2 +#define KEYPAD_MemoryAdd 0xD3 +#define KEYPAD_MemorySubtract 0xD4 +#define KEYPAD_MemoryMultiply 0xD5 +#define KEYPAD_MemoryDivide 0xD6 +#define KEYPAD_PlusMinus 0xD7 +#define KEYPAD_Clear 0xD8 +#define KEYPAD_ClearEntry 0xD9 +#define KEYPAD_Binary 0xDA +#define KEYPAD_Octal 0xDB +#define KEYPAD_Decimal 0xDC +#define KEYPAD_Hexadecimal 0xDD +// (Reserved) 0xDE..0xDF +#define KEY_LeftControl 0xE0 +#define KEY_LeftShift 0xE1 +#define KEY_LeftAlt 0xE2 +#define KEY_LeftGUI 0xE3 +#define KEY_RightControl 0xE4 +#define KEY_RightShift 0xE5 +#define KEY_RightAlt 0xE6 +#define KEY_RightGUI 0xE7 diff --git a/src/main.c b/src/main.c index e5ba17b..a8ed322 100644 --- a/src/main.c +++ b/src/main.c @@ -4,12 +4,13 @@ #include "../include/change_key.h" #include "../include/firmware_handling.h" +#include "../include/keycodes.h" int main (int argc, char *argv[]) { fbuffer_t* p_fb = get_firmware_buffer(argv[1]); - set_key_value(p_fb->buffer, KEY8, 0x1E); + set_key_value(p_fb->buffer, F8_KEY8, KEY_a_A); /* for debugging -> print content of buffer to terminal */ /* @@ -17,9 +18,9 @@ int main (int argc, char *argv[]) putc(isprint(fb->buffer[i]) ? fb->buffer[i] : '.', stdout); } */ - + + /* Temporary solution to renaming the input file */ char str[50]; - sprintf(str, "new_%s", argv[1]); write_firmware_buffer(str, p_fb); -- 2.39.5 From d71af63d2bfc887e60dd8b1e1793cd2f79bc8891 Mon Sep 17 00:00:00 2001 From: _N0x Date: Wed, 9 Feb 2022 17:24:53 +0100 Subject: [PATCH 5/7] Added original Firmware file --- MAX_Falcon-8_V2.1_Firmware.bin | Bin 0 -> 27856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 MAX_Falcon-8_V2.1_Firmware.bin diff --git a/MAX_Falcon-8_V2.1_Firmware.bin b/MAX_Falcon-8_V2.1_Firmware.bin new file mode 100644 index 0000000000000000000000000000000000000000..cbb232f66d82d6e0d0949c145ab862f956e47f1e GIT binary patch literal 27856 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 Date: Thu, 10 Feb 2022 21:57:21 +0100 Subject: [PATCH 6/7] Notes.md added with notes about offsets etc that might be handy later --- Notes.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Notes.md diff --git a/Notes.md b/Notes.md new file mode 100644 index 0000000..6b1e1c4 --- /dev/null +++ b/Notes.md @@ -0,0 +1,45 @@ +# Notes regarding firmware analyzing + +# Memory informatio +Most of these values have been determined from changing the firmware and looking at it with a hex-editor. All values still need to be tested and confirmed. + +## Key Offsets + +- 0x00005189 -> Key 1 +- 0x00005181 -> Key 2 +- 0x00005179 -> Key 3 +- 0x00005149 -> Key 4 +- 0x00005190 -> Key 5 +- 0x00005182 -> Key 6 +- 0x0000517A -> Key 7 +- 0x0000514A -> Key 8 + +## Program "Key"-Codes + +Set a key to this value to activate the corresponding program. + +- 0xD7 Prog1 +- 0xD8 Prog2 +- 0xD9 Prog3 +- 0xDA Prog4 +- 0xDB Prog5 +- 0xDC Prog6 +- 0xDD Prog7 +- 0xDE Prog8 + +## Program Offsets + +- 0x0000539C -> Prog1 +- 0x000056BC -> Prog2 +- 0x000059DC -> Prog3 +- 0x00005CFC -> Prog4 +- 0x0000601C -> Prog5 +- 0x0000633C -> Prog6 +- 0x0000665C -> Prog7 +- 0x0000697C -> Prog8 + +# Sources and help: +https://blog.mateusz.perlak.com/index.php/2016/12/05/max-falcon-8-keyboard-hacking/ +https://github.com/benblazak/ergodox-firmware/blob/master/src/lib/usb/usage-page/keyboard.h + + -- 2.39.5 From 45a99e6328280877a3bc9417a4c4219ffca84600 Mon Sep 17 00:00:00 2001 From: _N0x Date: Fri, 11 Feb 2022 00:19:20 +0100 Subject: [PATCH 7/7] Added basic implementation of writing a macro program to the firmware --- Makefile | 2 +- firmware.bin | Bin 32768 -> 0 bytes include/change_key.h | 32 -------------- include/firmware_handling.h | 86 +++++++++++++++++++++++++++++++++--- src/change_key.c | 10 ----- src/firmware_handling.c | 42 +++++++++++++++--- src/main.c | 77 +++++++++++++++++++++++++++----- 7 files changed, 184 insertions(+), 65 deletions(-) delete mode 100644 firmware.bin delete mode 100644 include/change_key.h delete mode 100644 src/change_key.c diff --git a/Makefile b/Makefile index a64b886..4b76162 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ ## Compiler settings CC = cc -CFLAGS = -Wall +CFLAGS = -Wall -Werror -g -std=c99 LDFLAGS = ## Project settings diff --git a/firmware.bin b/firmware.bin deleted file mode 100644 index 3e478deb202031cb1feb665f245103022cdfc54b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/include/change_key.h b/include/change_key.h deleted file mode 100644 index cdc2083..0000000 --- a/include/change_key.h +++ /dev/null @@ -1,32 +0,0 @@ -/* changeKey.h */ - -/* Define for key offsets */ -#define F8_KEY1 0x00005149 -#define F8_KEY2 0x00005179 -#define F8_KEY3 0x00005181 -#define F8_KEY4 0x00005189 -#define F8_KEY5 0x00005190 -#define F8_KEY6 0x00005182 -#define F8_KEY7 0x0000517a -#define F8_KEY8 0x0000514a - -/* Define for prog1-8 offset */ -#define PROG1_OFFSET 0x0000539C -#define PROG2_OFFSET 0x000056BC -#define PROG3_OFFSET 0x000059DC -#define PROG4_OFFSET 0x00005CFC -#define PROG5_OFFSET 0x0000601C -#define PROG6_OFFSET 0x0000633C -#define PROG7_OFFSET 0x0000665C -#define PROG8_OFFSET 0x0006977C - -typedef struct key_prog key_prog; -struct key_prog -{ - int offset; - int key_settings[100][8]; -}; - - -void set_key_value(char* firmware_buffer, int key, int value); - diff --git a/include/firmware_handling.h b/include/firmware_handling.h index 07eeb91..a41c617 100644 --- a/include/firmware_handling.h +++ b/include/firmware_handling.h @@ -1,11 +1,85 @@ -typedef struct fbuffer_t fbuffer_t; -struct fbuffer_t +#include + +/* Max prog_actions per key_prog */ +#define MAX_ACTION 100 + +/* Defines for key offsets */ +#define F8_KEY1 0x00005189 +#define F8_KEY2 0x00005181 +#define F8_KEY3 0x00005179 +#define F8_KEY4 0x00005149 +#define F8_KEY5 0x0000518A +#define F8_KEY6 0x00005182 +#define F8_KEY7 0x0000517A +#define F8_KEY8 0x0000514A + +/* Defines for key program code */ +#define F8_PROG1 0xD7 +#define F8_PROG2 0xD8 +#define F8_PROG3 0xD9 +#define F8_PROG4 0xDA +#define F8_PROG5 0xDB +#define F8_PROG6 0xDC +#define F8_PROG7 0xDD +#define F8_PROG8 0xDE + +/* Define for prog1-8 offset */ +#define PROG1_OFFSET 0x0000539C +#define PROG2_OFFSET 0x000056BC +#define PROG3_OFFSET 0x000059DC +#define PROG4_OFFSET 0x00005CFC +#define PROG5_OFFSET 0x0000601C +#define PROG6_OFFSET 0x0000633C +#define PROG7_OFFSET 0x0000665C +#define PROG8_OFFSET 0x0000697C + +typedef struct f_bffr_t* f_bffrP; +struct f_bffr_t { - char* buffer; + char *buffer; int size; }; -/* reads in the firmware file into a buffer */ -fbuffer_t* get_firmware_buffer(char* filename); -void write_firmware_buffer(char* filename, fbuffer_t* p_fb); +/* + * A single macro action + * First value is the modifiers to be hold while executing the other actions (see keycodes.h) + * Second value is the delay between the keypresse ranging from 0.0 seconds to 3.0 seconds + * The remaining values are the keycodes to be pressed + */ +typedef struct prog_action* prog_actionP; +struct prog_action +{ + uint8_t k_modifier; + uint8_t k_delay; + uint8_t k_action1; + uint8_t k_action2; + uint8_t k_action3; + uint8_t k_action4; + uint8_t k_action5; + uint8_t k_action6; +}; + +/* + * A single macro program consisting of the offset and up to MAX_ACTION (100) actions + */ +typedef struct key_prog* key_progP; +struct key_prog +{ + int prog_offset; + prog_actionP prog_actions[MAX_ACTION]; +}; + +/* + * set the value "value" to the specified key "key" inside the buffer "firmware_buffer" + * Key has to be the offset of the key to be altered. + * Value has to be a keycode + */ +void set_key_value(char *firmware_buffer, int key, int value); + +void set_program(f_bffrP p_fb, key_progP kp); + +/* reads in the firmware file into a buffer */ +f_bffrP get_firmware_buffer(char *filename); + +void write_firmware_buffer(char *filename, f_bffrP p_fb); diff --git a/src/change_key.c b/src/change_key.c deleted file mode 100644 index 9166d04..0000000 --- a/src/change_key.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include -#include - -#include "../include/change_key.h" - -void set_key_value(char* firmware_buffer, int key, int value) { - memset(firmware_buffer + key, value, 1); -} diff --git a/src/firmware_handling.c b/src/firmware_handling.c index 2447fa1..e19c9ed 100644 --- a/src/firmware_handling.c +++ b/src/firmware_handling.c @@ -1,15 +1,16 @@ #include #include -#include #include +#include + +/* Just for debugging */ #include #include "../include/firmware_handling.h" -fbuffer_t* get_firmware_buffer(char* filename) { +f_bffrP get_firmware_buffer(char *filename) { - fbuffer_t buffer; - fbuffer_t* p_fb = &buffer; + f_bffrP p_fb = malloc(sizeof(*p_fb)); FILE *firmware = fopen(filename, "rb"); if(!firmware) { @@ -23,6 +24,7 @@ fbuffer_t* get_firmware_buffer(char* filename) { exit(EXIT_FAILURE); } + /* set buffer size and read in firmware file into buffer*/ p_fb->size = sb.st_size; p_fb->buffer = malloc(p_fb->size); fread(p_fb->buffer, p_fb->size, 1, firmware); @@ -35,7 +37,7 @@ fbuffer_t* get_firmware_buffer(char* filename) { return p_fb; } -void write_firmware_buffer(char* filename, fbuffer_t* p_fb) { +void write_firmware_buffer(char *filename, f_bffrP p_fb) { FILE *firmware_file = fopen(filename, "wb+"); if(!firmware_file) { @@ -47,3 +49,33 @@ void write_firmware_buffer(char* filename, fbuffer_t* p_fb) { fclose(firmware_file); } + + +void set_key_value(char *firmware_buffer, int key, int value) { + memset(firmware_buffer + key, value, 1); +} + +void set_program(f_bffrP p_fb, key_progP kp) { + for(int i=0; iprog_actions[i]){ + /* calculate the offset for the action + * -> general prog_offset + current prog_action i times bytes per action + */ + int actionpointer = kp->prog_offset + (i * sizeof(*kp->prog_actions[0])); + + /* set the modifiers */ + memset(p_fb->buffer + actionpointer + 0, kp->prog_actions[i]->k_modifier, 1); + /* set timing delay */ + memset(p_fb->buffer + actionpointer + 1, kp->prog_actions[i]->k_delay, 1); + /* set action 1-6 */ + memset(p_fb->buffer + actionpointer + 2, kp->prog_actions[i]->k_action1, 1); + memset(p_fb->buffer + actionpointer + 3, kp->prog_actions[i]->k_action2, 1); + memset(p_fb->buffer + actionpointer + 4, kp->prog_actions[i]->k_action3, 1); + memset(p_fb->buffer + actionpointer + 5, kp->prog_actions[i]->k_action4, 1); + memset(p_fb->buffer + actionpointer + 6, kp->prog_actions[i]->k_action5, 1); + memset(p_fb->buffer + actionpointer + 7, kp->prog_actions[i]->k_action6, 1); + } + } +} diff --git a/src/main.c b/src/main.c index a8ed322..6d8523a 100644 --- a/src/main.c +++ b/src/main.c @@ -1,28 +1,83 @@ #include +#include #include #include -#include "../include/change_key.h" #include "../include/firmware_handling.h" #include "../include/keycodes.h" +void testing (f_bffrP p_fb); +char *updated_file_name(char *orig); + int main (int argc, char *argv[]) { - fbuffer_t* p_fb = get_firmware_buffer(argv[1]); + /* Read in the firmware file into a f_bffr_t struct */ + f_bffrP p_fb = get_firmware_buffer(argv[1]); - set_key_value(p_fb->buffer, F8_KEY8, KEY_a_A); + /* Call testing method */ + testing(p_fb); + + write_firmware_buffer(updated_file_name(argv[1]), p_fb); + + free(p_fb->buffer); + free(p_fb); + + return 0; +} + +char *updated_file_name (char *orig){ + char *ne = "_new.bin"; + int len = strlen(orig); + + char *new_name = malloc(len + 4); + + strncpy(new_name, orig, len - 4); + strcat(new_name, ne); + + printf("New File Name: %s", new_name); + + return new_name; +} + +void testing (f_bffrP p_fb) { + set_key_value(p_fb->buffer, F8_KEY1, KEY_9_LeftParenthesis); + set_key_value(p_fb->buffer, F8_KEY2, KEY_8_Asterisk); + set_key_value(p_fb->buffer, F8_KEY3, KEY_7_Ampersand); + set_key_value(p_fb->buffer, F8_KEY4, KEY_6_Caret); + set_key_value(p_fb->buffer, F8_KEY5, KEY_5_Percent); + set_key_value(p_fb->buffer, F8_KEY6, KEY_4_Dollar); + set_key_value(p_fb->buffer, F8_KEY7, KEY_3_Pound); + set_key_value(p_fb->buffer, F8_KEY8, KEY_2_At); /* for debugging -> print content of buffer to terminal */ /* - for(int i = 0; isize; i++){ - putc(isprint(fb->buffer[i]) ? fb->buffer[i] : '.', stdout); + for(int i = 0; isize; i++){ + putc(isprint(p_fb->buffer[i]) ? p_fb->buffer[i] : '.', stdout); } */ - - /* Temporary solution to renaming the input file */ - char str[50]; - sprintf(str, "new_%s", argv[1]); - write_firmware_buffer(str, p_fb); - return 0; + prog_actionP pa = calloc(1, sizeof(*pa)); + pa->k_modifier = 0x00; + pa->k_delay = 0x00; + pa->k_action1 = 0x0B; + pa->k_action2 = 0x04; + pa->k_action3 = 0x0F; + pa->k_action4 = 0x0F; + pa->k_action5 = 0x12; + pa->k_action6 = 0x00; + + + key_progP kp = calloc(1, sizeof(*kp)); + kp->prog_offset = PROG1_OFFSET; + kp->prog_actions[0] = pa; + kp->prog_actions[1] = pa; + kp->prog_actions[2] = pa; + kp->prog_actions[3] = pa; + kp->prog_actions[99] = pa; + //*/ + + set_program(p_fb, kp); + + free(kp); + free(pa); } -- 2.39.5