From 7ebc26c9421abe0d754302e909cdb5645898d579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9F=9010?= <0w0@0w0.pw> Date: Tue, 13 Aug 2019 02:48:08 +0800 Subject: [PATCH] add new feature bootloader jumper keycode --- Firmware/Pigeon/Inc/bootloader.h | 13 +++ Firmware/Pigeon/Inc/eeprom.h | 13 ++- Firmware/Pigeon/Inc/keycode.h | 51 ++++++++++ Firmware/Pigeon/Makefile | 1 + Firmware/Pigeon/Src/bootloader.c | 33 +++++++ Firmware/Pigeon/Src/eeprom.c | 130 +++++++++++++----------- Firmware/Pigeon/Src/keycode.c | 137 ++++++++++++++++++++++++++ Firmware/Pigeon/Src/main.c | 3 +- SplashScreenGenerator/BootScreen1.png | Bin 1030 -> 864 bytes SplashScreenGenerator/img2rle.py | 8 +- 10 files changed, 326 insertions(+), 63 deletions(-) create mode 100644 Firmware/Pigeon/Inc/bootloader.h create mode 100644 Firmware/Pigeon/Inc/keycode.h create mode 100644 Firmware/Pigeon/Src/bootloader.c create mode 100644 Firmware/Pigeon/Src/keycode.c diff --git a/Firmware/Pigeon/Inc/bootloader.h b/Firmware/Pigeon/Inc/bootloader.h new file mode 100644 index 0000000..a1347af --- /dev/null +++ b/Firmware/Pigeon/Inc/bootloader.h @@ -0,0 +1,13 @@ +#ifndef __BOOTLOADER_H__ +#define __BOOTLOADER_H__ + +#include "main.h" + +#define BOOTLOADER_MAGIC_ADDR ((uint32_t*) ((uint32_t) 0x20001000)) //4k into SRAM (out of 6k) +#define BOOTLOADER_MAGIC_TOKEN 0xDEADBEEF // :D//Value taken from CD00167594.pdf page 35, system memory start. +#define BOOTLOADER_START_ADDR 0x1fffc400 //for ST32F042 + +void BOOTLOADER_Init(); +void BOOTLOADER_Jump(); + +#endif //__BOOTLOADER_H__ diff --git a/Firmware/Pigeon/Inc/eeprom.h b/Firmware/Pigeon/Inc/eeprom.h index 80c3f4a..d508602 100644 --- a/Firmware/Pigeon/Inc/eeprom.h +++ b/Firmware/Pigeon/Inc/eeprom.h @@ -2,14 +2,25 @@ #define __EEPROM_H__ #include "st7735_hal.h" - +#include "keycode.h" typedef struct EEPROM{ uint8_t ProfileIdx; + uint8_t KeyDef; + KEY_REPORT_TypeDef KeyReports[]; uint8_t Brightness; uint16_t ColorTab[4]; uint16_t RLELen; uint16_t RLEData[]; } EEPROM_TypeDef; +typedef enum Key +{ + EEPROM_KEY_NONE, + EEPROM_KEY_KBD, + EEPROM_KEY_EVENT, + EEPROM_KEY_BOTH, +}EEPROM_KeyTypeDef; + EEPROM_TypeDef * EEPROM_GetData(); + #endif //__EEPROM_H__ diff --git a/Firmware/Pigeon/Inc/keycode.h b/Firmware/Pigeon/Inc/keycode.h new file mode 100644 index 0000000..5a03844 --- /dev/null +++ b/Firmware/Pigeon/Inc/keycode.h @@ -0,0 +1,51 @@ +#ifndef __KEYCODE_H__ +#define __KEYCODE_H__ + +#include + +#define SHIFT 0x80 + +#define KEY_LEFT_CTRL 0x80 +#define KEY_LEFT_SHIFT 0x81 +#define KEY_LEFT_ALT 0x82 +#define KEY_LEFT_GUI 0x83 +#define KEY_RIGHT_CTRL 0x84 +#define KEY_RIGHT_SHIFT 0x85 +#define KEY_RIGHT_ALT 0x86 +#define KEY_RIGHT_GUI 0x87 + +#define KEY_UP_ARROW 0xDA +#define KEY_DOWN_ARROW 0xD9 +#define KEY_LEFT_ARROW 0xD8 +#define KEY_RIGHT_ARROW 0xD7 +#define KEY_BACKSPACE 0xB2 +#define KEY_TAB 0xB3 +#define KEY_RETURN 0xB0 +#define KEY_ESC 0xB1 +#define KEY_INSERT 0xD1 +#define KEY_DELETE 0xD4 +#define KEY_PAGE_UP 0xD3 +#define KEY_PAGE_DOWN 0xD6 +#define KEY_HOME 0xD2 +#define KEY_END 0xD5 +#define KEY_CAPS_LOCK 0xC1 +#define KEY_F1 0xC2 +#define KEY_F2 0xC3 +#define KEY_F3 0xC4 +#define KEY_F4 0xC5 +#define KEY_F5 0xC6 +#define KEY_F6 0xC7 +#define KEY_F7 0xC8 +#define KEY_F8 0xC9 +#define KEY_F9 0xCA +#define KEY_F10 0xCB +#define KEY_F11 0xCC +#define KEY_F12 0xCD + +typedef KEY_REPORT{ + uint8_t modifiers; + uint8_t reserved; + uint8_t keys[6]; +}KEY_REPORT_TypeDef; + +#endif diff --git a/Firmware/Pigeon/Makefile b/Firmware/Pigeon/Makefile index ffc6dc2..97c55b1 100644 --- a/Firmware/Pigeon/Makefile +++ b/Firmware/Pigeon/Makefile @@ -37,6 +37,7 @@ BUILD_DIR = build # C sources C_SOURCES = \ Src/eeprom.c \ +Src/bootloader.c \ Src/st7735_hal.c \ Src/fonts.c \ Src/main.c \ diff --git a/Firmware/Pigeon/Src/bootloader.c b/Firmware/Pigeon/Src/bootloader.c new file mode 100644 index 0000000..acf8419 --- /dev/null +++ b/Firmware/Pigeon/Src/bootloader.c @@ -0,0 +1,33 @@ +#include "bootloader.h" + +void BOOTLOADER_Jump(){ + //https://community.st.com/s/question/0D50X00009Xkg1VSAR/jump-to-usb-dfu-bootloader-in-startup-code-on-stm32f042 + //call this at any time to initiate a reboot into bootloader + *BOOTLOADER_MAGIC_ADDR = BOOTLOADER_MAGIC_TOKEN; + NVIC_SystemReset(); +} +void BOOTLOADER_Init(){ + uint32_t jumpaddr; + if (*BOOTLOADER_MAGIC_ADDR == BOOTLOADER_MAGIC_TOKEN){ + // 要求转跳Bootloader + *BOOTLOADER_MAGIC_ADDR=0; + // 初始化Boot0引脚 + GPIO_InitTypeDef GPIO_InitStruct; + __HAL_RCC_GPIOB_CLK_ENABLE(); + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET); + GPIO_InitStruct.Pin = GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET); // 拉高Boot0 + + void (*bootloader)(void) = 0; //Zero the function pointer. + jumpaddr = *(__IO uint32_t*)(BOOTLOADER_START_ADDR + 4); + bootloader = (void (*)(void)) jumpaddr; //Set the function pointerto bootaddr +4 + __set_MSP(*(__IO uint32_t*) BOOTLOADER_START_ADDR); //load the stackpointer - bye bye program + bootloader(); //Go to DFU mode + //this should never be hit, trap for debugging + while(1){} + } +} diff --git a/Firmware/Pigeon/Src/eeprom.c b/Firmware/Pigeon/Src/eeprom.c index 6bb24be..0838572 100644 --- a/Firmware/Pigeon/Src/eeprom.c +++ b/Firmware/Pigeon/Src/eeprom.c @@ -4,15 +4,20 @@ EEPROM_TypeDef _eep __attribute__ ((section(".eeprom"),used))= { /* Screen configuration profile index */ .ProfileIdx = 0, + /* Key function setting */ + .KeyDef = EEPROM_KEY_BOTH, + .KeyStrLen = 12, + .KeyStr = 'H','e','l','l','o',' ','w','o','r','l','d','!', /* Screen brightness */ .Brightness = 10, /* Default color table */ .ColorTab = { - ST7735_COLOR565(255, 255, 255),ST7735_COLOR565(0, 162, 232), - ST7735_COLOR565(181, 230, 29),ST7735_COLOR565(0, 0, 0) + ST7735_COLOR565(255, 255, 255), + ST7735_COLOR565(0, 162, 232), + ST7735_COLOR565(181, 230, 29), }, /* RLE data length, calculated based on uint16_t */ - .RLELen = 523, + .RLELen = 615, /* RLE data(splash screen image)*/ .RLEData = { 0x03dd, 0x4004, 0x009b, 0x4006, 0x009a, 0x4006, 0x0099, 0x4007, @@ -27,60 +32,71 @@ EEPROM_TypeDef _eep __attribute__ ((section(".eeprom"),used))= { 0x0067, 0x4010, 0x0004, 0x400c, 0x0004, 0x4014, 0x0068, 0x4011, 0x0005, 0x400a, 0x0004, 0x4009, 0x0002, 0x4009, 0x0068, 0x4012, 0x0006, 0x4008, 0x0004, 0x4009, 0x0002, 0x4009, 0x0068, 0x4014, - 0x0006, 0x4006, 0x0004, 0x4014, 0x0017, 0x8003, 0x004e, 0x4016, - 0x0006, 0x4004, 0x0004, 0x4014, 0x0007, 0x8009, 0x0007, 0x8003, - 0x004e, 0x4017, 0x000d, 0x4014, 0x0007, 0x800b, 0x0005, 0x8003, - 0x004e, 0x401a, 0x000a, 0x4014, 0x0007, 0x8003, 0x0005, 0x8004, - 0x0055, 0x401c, 0x0008, 0x4014, 0x0007, 0x8003, 0x0006, 0x8004, - 0x0054, 0x4021, 0x0003, 0x4014, 0x0007, 0x8003, 0x0007, 0x8003, - 0x0054, 0x4038, 0x0007, 0x8003, 0x0007, 0x8003, 0x0003, 0x8003, - 0x0007, 0x8005, 0x0002, 0x8003, 0x0007, 0x8006, 0x000a, 0x8006, - 0x0007, 0x8003, 0x0002, 0x8005, 0x000f, 0x4038, 0x0007, 0x8003, - 0x0007, 0x8003, 0x0003, 0x8003, 0x0005, 0x8008, 0x0001, 0x8003, - 0x0006, 0x8008, 0x0007, 0x800a, 0x0005, 0x8003, 0x0001, 0x8008, - 0x000e, 0x4037, 0x0007, 0x8003, 0x0007, 0x8003, 0x0003, 0x8003, - 0x0005, 0x8003, 0x0004, 0x8005, 0x0005, 0x8003, 0x0004, 0x8003, - 0x0005, 0x8003, 0x0005, 0x8004, 0x0004, 0x8005, 0x0004, 0x8003, - 0x000e, 0x4037, 0x0007, 0x8003, 0x0006, 0x8003, 0x0004, 0x8003, - 0x0004, 0x8003, 0x0006, 0x8004, 0x0004, 0x8003, 0x0005, 0x8003, - 0x0004, 0x8003, 0x0007, 0x8003, 0x0004, 0x8004, 0x0005, 0x8004, - 0x000d, 0x4037, 0x0007, 0x8003, 0x0005, 0x8004, 0x0004, 0x8003, - 0x0004, 0x8003, 0x0007, 0x8003, 0x0004, 0x8002, 0x0007, 0x8003, - 0x0003, 0x8003, 0x0007, 0x8004, 0x0003, 0x8003, 0x0007, 0x8003, - 0x000e, 0x4036, 0x0007, 0x800b, 0x0005, 0x8003, 0x0003, 0x8003, - 0x0008, 0x8003, 0x0003, 0x8003, 0x0007, 0x8003, 0x0002, 0x8003, - 0x0009, 0x8003, 0x0003, 0x8003, 0x0007, 0x8003, 0x000e, 0x4036, - 0x0007, 0x8009, 0x0007, 0x8003, 0x0003, 0x8003, 0x0008, 0x8003, - 0x0003, 0x800d, 0x0002, 0x8003, 0x0009, 0x8003, 0x0003, 0x8003, - 0x0007, 0x8003, 0x000e, 0x4036, 0x0007, 0x8003, 0x000d, 0x8003, - 0x0003, 0x8003, 0x0008, 0x8003, 0x0003, 0x800d, 0x0002, 0x8003, - 0x0009, 0x8003, 0x0003, 0x8003, 0x0007, 0x8003, 0x000f, 0x4035, - 0x0007, 0x8003, 0x000d, 0x8003, 0x0003, 0x8003, 0x0008, 0x8003, - 0x0003, 0x8003, 0x000c, 0x8003, 0x0009, 0x8003, 0x0003, 0x8003, - 0x0007, 0x8003, 0x000f, 0x4035, 0x0007, 0x8003, 0x000d, 0x8003, - 0x0003, 0x8003, 0x0008, 0x8003, 0x0003, 0x8003, 0x000c, 0x8003, - 0x0009, 0x8003, 0x0003, 0x8003, 0x0007, 0x8003, 0x0010, 0x4034, - 0x0007, 0x8003, 0x000d, 0x8003, 0x0003, 0x8003, 0x0008, 0x8003, - 0x0003, 0x8003, 0x000c, 0x8004, 0x0008, 0x8002, 0x0004, 0x8003, - 0x0007, 0x8003, 0x0011, 0x4033, 0x0007, 0x8003, 0x000d, 0x8003, - 0x0004, 0x8003, 0x0006, 0x8004, 0x0004, 0x8003, 0x0007, 0x8001, - 0x0004, 0x8003, 0x0007, 0x8003, 0x0004, 0x8003, 0x0007, 0x8003, - 0x0011, 0x4033, 0x0007, 0x8003, 0x000d, 0x8003, 0x0004, 0x8004, - 0x0004, 0x8005, 0x0004, 0x8004, 0x0005, 0x8002, 0x0005, 0x8003, - 0x0005, 0x8003, 0x0005, 0x8003, 0x0007, 0x8003, 0x0012, 0x4032, - 0x0007, 0x8003, 0x000d, 0x8003, 0x0005, 0x8008, 0x0001, 0x8003, - 0x0005, 0x8009, 0x0007, 0x8009, 0x0006, 0x8003, 0x0007, 0x8003, - 0x0013, 0x4031, 0x0007, 0x8003, 0x000d, 0x8003, 0x0007, 0x8005, - 0x0002, 0x8003, 0x0007, 0x8006, 0x0009, 0x8006, 0x0008, 0x8003, - 0x0007, 0x8003, 0x0014, 0x4030, 0x0028, 0x8003, 0x0045, 0x4030, - 0x0028, 0x8003, 0x0046, 0x402f, 0x0027, 0x8003, 0x0048, 0x402d, - 0x0028, 0x8003, 0x004a, 0x402b, 0x001f, 0x8002, 0x0005, 0x8004, - 0x004c, 0x4029, 0x0020, 0x800a, 0x004e, 0x4028, 0x0022, 0x8006, - 0x004d, 0x402a, 0x0072, 0x402d, 0x006f, 0x4031, 0x006b, 0x4034, - 0x0069, 0x4036, 0x006a, 0x4034, 0x006c, 0x4033, 0x006d, 0x4031, - 0x006f, 0x402f, 0x0072, 0x401e, 0x0083, 0x401c, 0x0085, 0x4019, - 0x0088, 0x4017, 0x008b, 0x4014, 0x008d, 0x4012, 0x0090, 0x400f, - 0x0095, 0x400a, 0x06c5, + 0x0006, 0x4006, 0x0004, 0x4014, 0x0068, 0x4016, 0x0006, 0x4004, + 0x0004, 0x4014, 0x0068, 0x4017, 0x000d, 0x4014, 0x001d, 0x8002, + 0x0019, 0x8002, 0x0019, 0x8002, 0x0013, 0x401a, 0x000a, 0x4014, + 0x001d, 0x8002, 0x0019, 0x8002, 0x0019, 0x8002, 0x0013, 0x401c, + 0x0008, 0x4014, 0x000e, 0x8008, 0x0007, 0x8002, 0x000a, 0x8008, + 0x0007, 0x8002, 0x000a, 0x8008, 0x0007, 0x8002, 0x0013, 0x4021, + 0x0003, 0x4014, 0x000e, 0x8008, 0x0007, 0x8002, 0x000a, 0x8008, + 0x0007, 0x8002, 0x000a, 0x8008, 0x0007, 0x8002, 0x0013, 0x4038, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, + 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x0013, 0x4038, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0001, 0x800f, 0x0003, 0x8002, 0x0004, 0x8002, 0x0001, 0x800f, + 0x0003, 0x8002, 0x0004, 0x8002, 0x0001, 0x800f, 0x000d, 0x4037, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0001, 0x800f, 0x0003, 0x8002, + 0x0004, 0x8002, 0x0001, 0x800f, 0x0003, 0x8002, 0x0004, 0x8002, + 0x0001, 0x800f, 0x000d, 0x4037, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, + 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x0014, 0x4037, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, + 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x0015, 0x4036, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, + 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x0015, 0x4036, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, + 0x0004, 0x8002, 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x0015, 0x4036, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0007, 0x8002, 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, + 0x000a, 0x8002, 0x0004, 0x8002, 0x0007, 0x8002, 0x0016, 0x4035, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0002, 0x800d, 0x0004, 0x8002, + 0x0004, 0x8002, 0x0002, 0x800d, 0x0004, 0x8002, 0x0004, 0x8002, + 0x0002, 0x800d, 0x0010, 0x4035, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0002, 0x800d, 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x800d, + 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x800d, 0x0011, 0x4034, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0012, 0x4033, 0x000e, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, + 0x0009, 0x8002, 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, + 0x0009, 0x8002, 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, + 0x0009, 0x8002, 0x0012, 0x4033, 0x000e, 0x8002, 0x0004, 0x8002, + 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8002, 0x0004, 0x8002, + 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8002, 0x0004, 0x8002, + 0x0002, 0x8002, 0x0009, 0x8002, 0x0013, 0x4032, 0x000e, 0x8008, + 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8008, 0x0002, 0x8002, + 0x0009, 0x8002, 0x0004, 0x8008, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0014, 0x4031, 0x000e, 0x8008, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0004, 0x8008, 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8008, + 0x0002, 0x8002, 0x0009, 0x8002, 0x0015, 0x4030, 0x000e, 0x8002, + 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8002, + 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, 0x0004, 0x8002, + 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, 0x0015, 0x4030, + 0x000e, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0004, 0x8002, 0x0004, 0x8002, 0x0002, 0x8002, 0x0009, 0x8002, + 0x0016, 0x402f, 0x000e, 0x8002, 0x0008, 0x800d, 0x0004, 0x8002, + 0x0008, 0x800d, 0x0004, 0x8002, 0x0008, 0x800d, 0x0017, 0x402d, + 0x0019, 0x800d, 0x000e, 0x800d, 0x000e, 0x800d, 0x0019, 0x402b, + 0x0019, 0x8002, 0x0009, 0x8002, 0x000e, 0x8002, 0x0009, 0x8002, + 0x000e, 0x8002, 0x0009, 0x8002, 0x001a, 0x4029, 0x001a, 0x8002, + 0x0009, 0x8002, 0x000e, 0x8002, 0x0009, 0x8002, 0x000e, 0x8002, + 0x0009, 0x8002, 0x001b, 0x4028, 0x0075, 0x402a, 0x0072, 0x402d, + 0x006f, 0x4031, 0x006b, 0x4034, 0x0069, 0x4036, 0x006a, 0x4034, + 0x006c, 0x4033, 0x006d, 0x4031, 0x006f, 0x402f, 0x0072, 0x401e, + 0x0083, 0x401c, 0x0085, 0x4019, 0x0088, 0x4017, 0x008b, 0x4014, + 0x008d, 0x4012, 0x0090, 0x400f, 0x0095, 0x400a, 0x06c5, } }; diff --git a/Firmware/Pigeon/Src/keycode.c b/Firmware/Pigeon/Src/keycode.c new file mode 100644 index 0000000..ed8c85a --- /dev/null +++ b/Firmware/Pigeon/Src/keycode.c @@ -0,0 +1,137 @@ +#include "keycode.h" + +const uint8_t _asciimap[128] = { + 0x00, // NUL + 0x00, // SOH + 0x00, // STX + 0x00, // ETX + 0x00, // EOT + 0x00, // ENQ + 0x00, // ACK + 0x00, // BEL + 0x2a, // BS Backspace + 0x2b, // TAB Tab + 0x28, // LF Enter + 0x00, // VT + 0x00, // FF + 0x00, // CR + 0x00, // SO + 0x00, // SI + 0x00, // DEL + 0x00, // DC1 + 0x00, // DC2 + 0x00, // DC3 + 0x00, // DC4 + 0x00, // NAK + 0x00, // SYN + 0x00, // ETB + 0x00, // CAN + 0x00, // EM + 0x00, // SUB + 0x00, // ESC + 0x00, // FS + 0x00, // GS + 0x00, // RS + 0x00, // US + + 0x2c, // ' ' + 0x1e|SHIFT, // ! + 0x34|SHIFT, // " + 0x20|SHIFT, // # + 0x21|SHIFT, // $ + 0x22|SHIFT, // % + 0x24|SHIFT, // & + 0x34, // ' + 0x26|SHIFT, // ( + 0x27|SHIFT, // ) + 0x25|SHIFT, // * + 0x2e|SHIFT, // + + 0x36, // , + 0x2d, // - + 0x37, // . + 0x38, // / + 0x27, // 0 + 0x1e, // 1 + 0x1f, // 2 + 0x20, // 3 + 0x21, // 4 + 0x22, // 5 + 0x23, // 6 + 0x24, // 7 + 0x25, // 8 + 0x26, // 9 + 0x33|SHIFT, // : + 0x33, // ; + 0x36|SHIFT, // < + 0x2e, // = + 0x37|SHIFT, // > + 0x38|SHIFT, // ? + 0x1f|SHIFT, // @ + 0x04|SHIFT, // A + 0x05|SHIFT, // B + 0x06|SHIFT, // C + 0x07|SHIFT, // D + 0x08|SHIFT, // E + 0x09|SHIFT, // F + 0x0a|SHIFT, // G + 0x0b|SHIFT, // H + 0x0c|SHIFT, // I + 0x0d|SHIFT, // J + 0x0e|SHIFT, // K + 0x0f|SHIFT, // L + 0x10|SHIFT, // M + 0x11|SHIFT, // N + 0x12|SHIFT, // O + 0x13|SHIFT, // P + 0x14|SHIFT, // Q + 0x15|SHIFT, // R + 0x16|SHIFT, // S + 0x17|SHIFT, // T + 0x18|SHIFT, // U + 0x19|SHIFT, // V + 0x1a|SHIFT, // W + 0x1b|SHIFT, // X + 0x1c|SHIFT, // Y + 0x1d|SHIFT, // Z + 0x2f, // [ + 0x31, // bslash + 0x30, // ] + 0x23|SHIFT, // ^ + 0x2d|SHIFT, // _ + 0x35, // ` + 0x04, // a + 0x05, // b + 0x06, // c + 0x07, // d + 0x08, // e + 0x09, // f + 0x0a, // g + 0x0b, // h + 0x0c, // i + 0x0d, // j + 0x0e, // k + 0x0f, // l + 0x10, // m + 0x11, // n + 0x12, // o + 0x13, // p + 0x14, // q + 0x15, // r + 0x16, // s + 0x17, // t + 0x18, // u + 0x19, // v + 0x1a, // w + 0x1b, // x + 0x1c, // y + 0x1d, // z + 0x2f|SHIFT, // { + 0x31|SHIFT, // | + 0x30|SHIFT, // } + 0x35|SHIFT, // ~ + 0 // DEL +}; + +uint8_t KEYCODE_GetKeyCode(char chr){ + return _asciimap[chr]; +} diff --git a/Firmware/Pigeon/Src/main.c b/Firmware/Pigeon/Src/main.c index 9da2ff3..cbb6283 100644 --- a/Firmware/Pigeon/Src/main.c +++ b/Firmware/Pigeon/Src/main.c @@ -27,6 +27,7 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ +#include "bootloader.h" #include "eeprom.h" #include "st7735_hal.h" #include "usbd_customhid.h" @@ -103,7 +104,7 @@ void keyPress(){ int main(void) { /* USER CODE BEGIN 1 */ - + BOOTLOADER_Init(); /* USER CODE END 1 */ diff --git a/SplashScreenGenerator/BootScreen1.png b/SplashScreenGenerator/BootScreen1.png index f50b3cb6fa4c22a214cd742fda9892cbbd0f3b2d..051a64e6d5b3c03e4c4d1df4f7c8ec323bc3fc35 100644 GIT binary patch delta 792 zcmV+z1LypP2;c^gReu8YNklZEh1W5P;#7OCbJmAnw5FxB~~`58@Q1)5gLw z-u1_hJ@)MTNKs0a))jd(_NMUi`sM)``SiR8Ob{SU5g<$vAWRV;OqpB-zx?>~{OH5$ z_s`Fda5vK@U>cvueGd1)77SBU17y-6)pQ2Da&{}l$2stxs(&Zo=(8Ks@t&q^!Ni3l zmjfg&Tv2rfEJb#9erpZ1=PaoCBH%1Km&z7wIR%-(ds90D=0fO+qxNg$aoX`Q{pKqM zsQn}ZG1aT!G}hjUQi^`Wi-PHALp4C572y#kvM=fZ3XKS7hQ{=>GbBKpKj|~pfR5n-iriL8BoI>q6cXXA5RcZvdZq;!%nT9hEB<4Ik&~n+ zIPIUuBKn`dzrNpp`||7kex%jcnmz$zVH%E%9BVV3fH|d!w8{hwul6HnQ=oNHcwI}F zPQaXaDux^US}wqxm1C4wdwd(o<66sY!Lwc6g3~7_{(pRFJ3AA9U$1M4;sms~O2mDr z{GX7Wjhui-Y915wx|Z1D3<$rf0%RM;C`>?@B0!j`x(Eq8UW|;s2nl~~QF{Tf`&xnt z2vbcHPUp26;GiRKB&6)`li1;bQVfK0)EWP6EkBY9k_djb+6G+f$( ziSXlK9e>|O^0*dfK$vQN8zyJxw`R28hDr6DpVIH?buFPX0e9Vsul(Hdmsxs}w0K=h zs7%1vPSbG43#WFXh?d9Z?6{Wt8E}_rxa-vRMtuSXt4~4#T!U(WyKKM2w~k8z?s)Y} zd~0b6aObyM0s>siX@DMrixJ;?{tM7sbOG_L$$$N?;v_ucTbJtq32%Ka17zy$!&QKU zx1a1)u+@bK@!U^#0$PMXeD`GjJ|N-U+vyo_bR5Ko>R-iaPebB^sJ;r;42Jj+R8PRz zm1#(Ph;;>+stuC(kWvW{=;iWPao7g|!W03*6am5%0m2jk!W03*6am5%0m9JZ@fW~^ WA`!^@;>=tC0000)X28IZbReuAUNkl@uyB0!iTK$s#xm@;`6{PyF|_0>P` z-#=ep;c0H4fMI+h_B}iUw_upMH9#gELQQMHk+oYXKGuQHRDV4IXRqCuj?Z+%PGhN-kaJQFcv~j9JTw%cG~eV{q9!` zQ2QbSKGk=@VXVCqr4;>)7X{PLhH8L9E5Z~e@>$da6dDoU85+~i&XfSfZV|%9v;c)h zgtIaIY)uVN#D5~3ebMiD4(OO3porZ{i3FnfQJnTVEEQeqdBW}QIv))`e}BEcdcD4V z`E`8--|Yc9wINyt=m(UN3yT2DZn*`=%iMykjNF2q)PHt8`#Wy?kzHGj-m2T@^@xA0dqf(U9gd3wC*dybLct8 z(sM8Y2bF%oDW&~tj@A3zqGsRLW0tn}pVJ}00kL1GrrH2%0@66w+%am-A*L$89sVFZ zoBZ;_hkvg&7UA#PvY#(}{uV9I-+O+wn1F-i0?ociCGG_gd#sKCE4k3Z2gXzf$ZdFC zu@^?{u_7iQOf?0_6g*GMI&sDnZJvNcIL^P2xd3uMt38GYf8G*OOQ1ct1ur0Wky|f( zYWvjpYXbJaKV$lds*mDgPWgCFJb##D) zx4t6-Wa{nXr~nCXKhbx=R&PXz=Xs(N&>{rldnWV00}|e|W!HeS;~+j%e-x)Z4T%q; z`dzSQFvJI^dII`JrXlgc*A-x>Hb~+_NH`@xpx2Qf#bF-=2vY