diff --git a/firmware/modularkbd/.cproject b/firmware/67percent/.cproject
similarity index 100%
rename from firmware/modularkbd/.cproject
rename to firmware/67percent/.cproject
diff --git a/firmware/modularkbd/.mxproject b/firmware/67percent/.mxproject
similarity index 100%
rename from firmware/modularkbd/.mxproject
rename to firmware/67percent/.mxproject
diff --git a/firmware/modularkbd/.project b/firmware/67percent/.project
similarity index 100%
rename from firmware/modularkbd/.project
rename to firmware/67percent/.project
diff --git a/firmware/modularkbd/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs b/firmware/67percent/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
similarity index 100%
rename from firmware/modularkbd/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
rename to firmware/67percent/.settings/com.st.stm32cube.ide.mcu.sfrview.prefs
diff --git a/firmware/67percent/.settings/language.settings.xml b/firmware/67percent/.settings/language.settings.xml
new file mode 100644
index 00000000..500b64f7
--- /dev/null
+++ b/firmware/67percent/.settings/language.settings.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/firmware/modularkbd/.settings/org.eclipse.core.resources.prefs b/firmware/67percent/.settings/org.eclipse.core.resources.prefs
similarity index 100%
rename from firmware/modularkbd/.settings/org.eclipse.core.resources.prefs
rename to firmware/67percent/.settings/org.eclipse.core.resources.prefs
diff --git a/firmware/modularkbd/.settings/stm32cubeide.project.prefs b/firmware/67percent/.settings/stm32cubeide.project.prefs
similarity index 100%
rename from firmware/modularkbd/.settings/stm32cubeide.project.prefs
rename to firmware/67percent/.settings/stm32cubeide.project.prefs
diff --git a/firmware/modularkbd/Core/Inc/Backup/dma.h.bak b/firmware/67percent/Core/Inc/Backup/dma.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/dma.h.bak
rename to firmware/67percent/Core/Inc/Backup/dma.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/gpio.h.bak b/firmware/67percent/Core/Inc/Backup/gpio.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/gpio.h.bak
rename to firmware/67percent/Core/Inc/Backup/gpio.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/i2c.h.bak b/firmware/67percent/Core/Inc/Backup/i2c.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/i2c.h.bak
rename to firmware/67percent/Core/Inc/Backup/i2c.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/main.h.bak b/firmware/67percent/Core/Inc/Backup/main.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/main.h.bak
rename to firmware/67percent/Core/Inc/Backup/main.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak b/firmware/67percent/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak
rename to firmware/67percent/Core/Inc/Backup/stm32f4xx_hal_conf.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/stm32f4xx_it.h.bak b/firmware/67percent/Core/Inc/Backup/stm32f4xx_it.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/stm32f4xx_it.h.bak
rename to firmware/67percent/Core/Inc/Backup/stm32f4xx_it.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/tim.h.bak b/firmware/67percent/Core/Inc/Backup/tim.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/tim.h.bak
rename to firmware/67percent/Core/Inc/Backup/tim.h.bak
diff --git a/firmware/modularkbd/Core/Inc/Backup/usart.h.bak b/firmware/67percent/Core/Inc/Backup/usart.h.bak
similarity index 100%
rename from firmware/modularkbd/Core/Inc/Backup/usart.h.bak
rename to firmware/67percent/Core/Inc/Backup/usart.h.bak
diff --git a/firmware/modularkbd/Core/Inc/dma.h b/firmware/67percent/Core/Inc/dma.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/dma.h
rename to firmware/67percent/Core/Inc/dma.h
diff --git a/firmware/modularkbd/Core/Inc/gpio.h b/firmware/67percent/Core/Inc/gpio.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/gpio.h
rename to firmware/67percent/Core/Inc/gpio.h
diff --git a/firmware/modularkbd/Core/Inc/hid_queue.h b/firmware/67percent/Core/Inc/hid_queue.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/hid_queue.h
rename to firmware/67percent/Core/Inc/hid_queue.h
diff --git a/firmware/modularkbd/Core/Inc/i2c.h b/firmware/67percent/Core/Inc/i2c.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/i2c.h
rename to firmware/67percent/Core/Inc/i2c.h
diff --git a/firmware/modularkbd/Core/Inc/main.h b/firmware/67percent/Core/Inc/main.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/main.h
rename to firmware/67percent/Core/Inc/main.h
diff --git a/firmware/67percent/Core/Inc/pwm.h b/firmware/67percent/Core/Inc/pwm.h
new file mode 100644
index 00000000..cfa730df
--- /dev/null
+++ b/firmware/67percent/Core/Inc/pwm.h
@@ -0,0 +1,24 @@
+#ifndef __PWM_H__
+#define __PWM_H__
+
+#include "main.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Initialize PWM on TIM2 Channel 1 (PA5)
+void MX_PWM_Init(void);
+// Start/stop PWM output
+void PWM_Start(void);
+void PWM_Stop(void);
+// Set duty as raw timer compare value (0..Period)
+void PWM_SetDuty(uint32_t duty);
+// Helper: set duty as percent (0..100)
+void PWM_SetPercent(uint8_t percent);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __PWM_H__
diff --git a/firmware/modularkbd/Core/Inc/stm32f4xx_hal_conf.h b/firmware/67percent/Core/Inc/stm32f4xx_hal_conf.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/stm32f4xx_hal_conf.h
rename to firmware/67percent/Core/Inc/stm32f4xx_hal_conf.h
diff --git a/firmware/modularkbd/Core/Inc/stm32f4xx_it.h b/firmware/67percent/Core/Inc/stm32f4xx_it.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/stm32f4xx_it.h
rename to firmware/67percent/Core/Inc/stm32f4xx_it.h
diff --git a/firmware/modularkbd/Core/Inc/tim.h b/firmware/67percent/Core/Inc/tim.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/tim.h
rename to firmware/67percent/Core/Inc/tim.h
diff --git a/firmware/modularkbd/Core/Inc/usart.h b/firmware/67percent/Core/Inc/usart.h
similarity index 100%
rename from firmware/modularkbd/Core/Inc/usart.h
rename to firmware/67percent/Core/Inc/usart.h
diff --git a/firmware/modularkbd/Core/Src/Backup/dma.c.bak b/firmware/67percent/Core/Src/Backup/dma.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/dma.c.bak
rename to firmware/67percent/Core/Src/Backup/dma.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/gpio.c.bak b/firmware/67percent/Core/Src/Backup/gpio.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/gpio.c.bak
rename to firmware/67percent/Core/Src/Backup/gpio.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/i2c.c.bak b/firmware/67percent/Core/Src/Backup/i2c.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/i2c.c.bak
rename to firmware/67percent/Core/Src/Backup/i2c.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/main.c.bak b/firmware/67percent/Core/Src/Backup/main.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/main.c.bak
rename to firmware/67percent/Core/Src/Backup/main.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/stm32f4xx_hal_msp.c.bak b/firmware/67percent/Core/Src/Backup/stm32f4xx_hal_msp.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/stm32f4xx_hal_msp.c.bak
rename to firmware/67percent/Core/Src/Backup/stm32f4xx_hal_msp.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/stm32f4xx_it.c.bak b/firmware/67percent/Core/Src/Backup/stm32f4xx_it.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/stm32f4xx_it.c.bak
rename to firmware/67percent/Core/Src/Backup/stm32f4xx_it.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/syscalls.c.bak b/firmware/67percent/Core/Src/Backup/syscalls.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/syscalls.c.bak
rename to firmware/67percent/Core/Src/Backup/syscalls.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/sysmem.c.bak b/firmware/67percent/Core/Src/Backup/sysmem.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/sysmem.c.bak
rename to firmware/67percent/Core/Src/Backup/sysmem.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/system_stm32f4xx.c.bak b/firmware/67percent/Core/Src/Backup/system_stm32f4xx.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/system_stm32f4xx.c.bak
rename to firmware/67percent/Core/Src/Backup/system_stm32f4xx.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/tim.c.bak b/firmware/67percent/Core/Src/Backup/tim.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/tim.c.bak
rename to firmware/67percent/Core/Src/Backup/tim.c.bak
diff --git a/firmware/modularkbd/Core/Src/Backup/usart.c.bak b/firmware/67percent/Core/Src/Backup/usart.c.bak
similarity index 100%
rename from firmware/modularkbd/Core/Src/Backup/usart.c.bak
rename to firmware/67percent/Core/Src/Backup/usart.c.bak
diff --git a/firmware/modularkbd/Core/Src/dma.c b/firmware/67percent/Core/Src/dma.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/dma.c
rename to firmware/67percent/Core/Src/dma.c
diff --git a/firmware/modularkbd/Core/Src/gpio.c b/firmware/67percent/Core/Src/gpio.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/gpio.c
rename to firmware/67percent/Core/Src/gpio.c
diff --git a/firmware/modularkbd/Core/Src/hid_queue.c b/firmware/67percent/Core/Src/hid_queue.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/hid_queue.c
rename to firmware/67percent/Core/Src/hid_queue.c
diff --git a/firmware/modularkbd/Core/Src/i2c.c b/firmware/67percent/Core/Src/i2c.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/i2c.c
rename to firmware/67percent/Core/Src/i2c.c
diff --git a/firmware/67percent/Core/Src/main.c b/firmware/67percent/Core/Src/main.c
new file mode 100644
index 00000000..fd75f93f
--- /dev/null
+++ b/firmware/67percent/Core/Src/main.c
@@ -0,0 +1,610 @@
+/* USER CODE BEGIN Header */
+/**
+ ******************************************************************************
+ * @file : main.c
+ * @brief : Main program body
+ ******************************************************************************
+ * @attention
+ *
+ * Copyright (c) 2025 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software is licensed under terms that can be found in the LICENSE file
+ * in the root directory of this software component.
+ * If no LICENSE file comes with this software, it is provided AS-IS.
+ *
+ ******************************************************************************
+ */
+/* USER CODE END Header */
+/* Includes ------------------------------------------------------------------*/
+#include "main.h"
+#include "dma.h"
+#include "i2c.h"
+#include "tim.h"
+#include "usart.h"
+#include "usb_device.h"
+#include "gpio.h"
+#include
+#include "pwm.h"
+
+/* Private includes ----------------------------------------------------------*/
+/* USER CODE BEGIN Includes */
+#include "usbd_hid.h"
+/* USER CODE END Includes */
+
+/* Private typedef -----------------------------------------------------------*/
+/* USER CODE BEGIN PTD */
+
+typedef struct {
+ uint8_t MODIFIER; // Modifier keys (Ctrl, Shift, Alt, Win)
+ uint8_t RESERVED; // Always 0
+ uint8_t KEYPRESS[12]; // Up to 12 keycodes
+} __attribute__((packed)) HIDReport;
+
+
+// Switch pin mapping structure
+typedef struct {
+ GPIO_TypeDef* GPIOx; // Pointer to GPIO port (e.g., GPIOA, GPIOB)
+ uint16_t PIN; // Pin number on the GPIO port
+} SwitchPins;
+
+
+// UART message structure for sending/receiving key events
+typedef struct {
+ uint16_t DEPTH; // Custom field: could represent queue depth, layer, or message size
+ uint16_t TYPE; // Message type identifier (defines what kind of message this is)
+ uint8_t KEYPRESS[12]; // Keypress data (similar to HIDReport, but for UART transmission)
+} __attribute__((packed)) UARTMessage;
+
+#define PACKET_SIZE 12
+#define QUEUE_CAPACITY 32
+
+typedef struct {
+ uint8_t data[QUEUE_CAPACITY][PACKET_SIZE];
+ volatile uint8_t head; // accessed in main
+ volatile uint8_t tail; // accessed in ISR
+ volatile uint8_t count; // optional, only if needed
+} PacketQueue;
+
+// Initialize
+void pq_init(PacketQueue *q){
+ q->head = 0;
+ q->tail = 0;
+ q->count = 0;
+}
+
+// Called from ISR
+bool pq_push(PacketQueue *q, const uint8_t packet[PACKET_SIZE]){
+ uint8_t nextTail = (q->tail + 1) % QUEUE_CAPACITY;
+ if(nextTail == q->head) return false; // queue full
+
+ memcpy(q->data[q->tail], packet, PACKET_SIZE);
+ q->tail = nextTail;
+ return true;
+}
+
+// Called from main
+bool pq_pop(PacketQueue *q, uint8_t out_packet[PACKET_SIZE]){
+ if(q->head == q->tail) return false; // queue empty
+
+ memcpy(out_packet, q->data[q->head], PACKET_SIZE);
+ q->head = (q->head + 1) % QUEUE_CAPACITY;
+ return true;
+}
+
+/* USER CODE END PTD */
+
+/* Private define ------------------------------------------------------------*/
+/* USER CODE BEGIN PD */
+
+/* USER CODE END PD */
+
+/* Private macro -------------------------------------------------------------*/
+/* USER CODE BEGIN PM */
+#define ROW 6
+#define COL 5
+#define MAXQUEUE 256
+#define MODE_INACTIVE 0
+#define MODE_MAINBOARD 1
+#define MODE_ACTIVE 2
+#define MODE_DEBUG 3
+#define UART_RX_BUFF_SIZE 64
+#define QUEUE_SIZ 8
+/* USER CODE END PM */
+
+/* Private variables ---------------------------------------------------------*/
+
+/* USER CODE BEGIN PV */
+
+// Initialize HID report properly
+HIDReport REPORT = {0, 0, {0}};
+UARTMessage RX5Msg; //Buffer for messages on uart5
+UARTMessage RX1Msg; //Buffer for messages on uart5
+UARTMessage RX2Msg; //Buffer for messages on uart5
+UARTMessage RX4Msg; //Buffer for messages on uart5
+
+
+SwitchPins ROW_PINS[ROW] = {
+ {GPIOB, GPIO_PIN_10},
+ {GPIOB, GPIO_PIN_2},
+ {GPIOB, GPIO_PIN_1},
+ {GPIOB, GPIO_PIN_0},
+ {GPIOC, GPIO_PIN_5},
+ {GPIOC, GPIO_PIN_4},
+};
+
+SwitchPins COLUMN_PINS[COL] = {
+ {GPIOA, GPIO_PIN_8},
+ {GPIOC, GPIO_PIN_9},
+ {GPIOC, GPIO_PIN_8},
+ {GPIOC, GPIO_PIN_7},
+ {GPIOC, GPIO_PIN_6}
+};
+
+// Initialize keycodes array
+uint8_t KEYCODES[ROW][COL] = {
+ {0x00, KEY_F13, KEY_F14, KEY_F15, KEY_F16},
+ {KEY_F17, NUM_LOCK, KEYPAD_SLASH, KEYPAD_ASTERISK, KEYPAD_MINUS},
+ {KEY_F18, KEYPAD_7, KEYPAD_8, KEYPAD_9, KEYPAD_PLUS},
+ {KEY_F19, KEYPAD_4, KEYPAD_5, KEYPAD_6, 0x00},
+ {KEY_F20, KEYPAD_1, KEYPAD_2, KEYPAD_3, KEYPAD_ENTER},
+ {KEY_F21, KEYPAD_0, 0x00, KEYPAD_DOT, 0x00}
+};
+
+uint16_t DEPTH = 0;
+uint16_t PORT_DEPTH[] = {0xFF, 0xFF, 0xFF, 0xFF};
+UART_HandleTypeDef* PARENT;
+UART_HandleTypeDef* PORTS[] = {&huart5, &huart1, &huart2, &huart4};
+uint8_t KEYSTATE_CHANGED_FLAG = 0;
+uint8_t KEYSTATE[ROW][COL];
+ //North East South West
+UARTMessage reportBuff;
+
+extern USBD_HandleTypeDef hUsbDeviceFS;
+volatile uint8_t MODE = MODE_INACTIVE;
+
+UARTMessage uartBuffer;
+volatile int uartUpdateFlag = 0;
+// Encoder state (TIM3 in encoder mode on PA6/PA7)
+volatile int32_t LAST_ENCODER_COUNT = 0;
+
+uint8_t UART_KEYSTATE[4][12];
+
+
+PacketQueue huart1q;
+PacketQueue huart2q;
+PacketQueue huart4q;
+PacketQueue huart5q;
+
+
+/* USER CODE END PV */
+
+/* Private function prototypes -----------------------------------------------*/
+void SystemClock_Config(void);
+/* USER CODE BEGIN PFP */
+void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *huart);
+void UART_DMA_SendReport(UART_HandleTypeDef *huart);
+void addUSBReport(uint8_t usageID);
+void handleUARTMessages(uint8_t *data, UART_HandleTypeDef *sender);
+void matrixScan(void);
+void encoderProcess(void);
+void resetReport(void);
+void sendMessage(void);
+void findBestParent();
+void mergeChild();
+/* USER CODE END PFP */
+
+/* Private user code ---------------------------------------------------------*/
+/* USER CODE BEGIN 0 */
+
+/* USER CODE END 0 */
+
+/**
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void)
+{
+
+ /* USER CODE BEGIN 1 */
+
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ MX_DMA_Init();MX_PWM_Init();
+ MX_TIM2_Init();
+ MX_TIM3_Init();
+ MX_UART4_Init();
+ MX_UART5_Init();
+ MX_USART1_UART_Init();
+ MX_USART2_UART_Init();
+ MX_I2C1_Init();
+ MX_USB_DEVICE_Init();
+ MX_PWM_Init();
+ /* USER CODE BEGIN 2 */
+
+ //Enable UART RX DMA for all ports
+ HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage));
+ HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage));
+ HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage));
+ HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage));
+
+ // Start TIM3 encoder (PA6/PA7) so we can read encoder delta
+ HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
+ LAST_ENCODER_COUNT = __HAL_TIM_GET_COUNTER(&htim3);
+
+ //Prealloc Kestate matrix
+ memset(KEYSTATE, 0, sizeof(KEYSTATE));
+ pq_init(&huart1q);
+ pq_init(&huart2q);
+ pq_init(&huart4q);
+ pq_init(&huart5q);
+
+ PWM_Start();
+
+ /* USER CODE END 2 */
+
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67);
+ switch (MODE){
+ case MODE_ACTIVE:
+ KEYSTATE_CHANGED_FLAG = 1;
+ resetReport();
+ matrixScan();
+ mergeChild();
+ encoderProcess();
+ if(KEYSTATE_CHANGED_FLAG == 1){
+ UARTMessage UARTREPORT;
+ UARTREPORT.DEPTH = DEPTH;
+ UARTREPORT.TYPE = 0xEE;
+ memcpy(UARTREPORT.KEYPRESS, REPORT.KEYPRESS, sizeof(UARTREPORT.KEYPRESS));
+ HAL_UART_Transmit_DMA(PARENT, (uint8_t*)&UARTREPORT, sizeof(UARTREPORT));
+ }
+ break;
+
+ case MODE_INACTIVE:
+ //If the module is connected through the USB then mode is mainboard
+ if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){
+ MODE = MODE_MAINBOARD;
+ DEPTH = 0;
+ }else{
+ //TODO: Look for a parent module...
+
+
+
+ UARTMessage REQ;
+ REQ.DEPTH = 0;
+ REQ.TYPE = 0xFF; //Message code for request is 0xFF
+ memset(REQ.KEYPRESS, 0, sizeof(REQ.KEYPRESS));
+
+ //Send query' for parent module
+ HAL_UART_Transmit_DMA(&huart1, (uint8_t*)&REQ, sizeof(REQ));
+ HAL_UART_Transmit_DMA(&huart2, (uint8_t*)&REQ, sizeof(REQ));
+ HAL_UART_Transmit_DMA(&huart4, (uint8_t*)&REQ, sizeof(REQ));
+ HAL_UART_Transmit_DMA(&huart5, (uint8_t*)&REQ, sizeof(REQ));
+ HAL_Delay(500);
+ findBestParent(); //So true...
+ }
+ break;
+
+ case MODE_MAINBOARD:
+ resetReport();
+ matrixScan();//Something related to this making the key stick. Likely due to race conditions
+ mergeChild();
+ encoderProcess();
+ USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT));
+ break;
+
+ default:
+ break;
+ }
+
+ HAL_Delay(20);
+ /* USER CODE END WHILE */
+
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
+}
+
+void mergeChild(){
+ uint8_t packet[12];
+ if (pq_pop(&huart1q, packet)) {
+ memcpy(UART_KEYSTATE[1], packet, 12);
+ KEYSTATE_CHANGED_FLAG = 1;
+ }
+ if (pq_pop(&huart2q, packet)) {
+ memcpy(UART_KEYSTATE[2], packet, 12);
+ KEYSTATE_CHANGED_FLAG = 1;
+ }
+ if (pq_pop(&huart4q, packet)) {
+ memcpy(UART_KEYSTATE[3], packet, 12);
+ KEYSTATE_CHANGED_FLAG = 1;
+ }
+ if (pq_pop(&huart5q, packet)) {
+ memcpy(UART_KEYSTATE[0], packet, 12);
+ KEYSTATE_CHANGED_FLAG = 1;
+ }
+ for(int i = 0; i < 4; i++){
+ for(int j = 0; j < 12; j++){
+ REPORT.KEYPRESS[j] |= UART_KEYSTATE[i][j];
+ }
+ }
+}
+
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+
+ /** Configure the main internal regulator out put voltage
+ */
+ __HAL_RCC_PWR_CLK_ENABLE();
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
+
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ RCC_OscInitStruct.PLL.PLLM = 4;
+ RCC_OscInitStruct.PLL.PLLN = 96;
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ RCC_OscInitStruct.PLL.PLLQ = 4;
+ RCC_OscInitStruct.PLL.PLLR = 2;
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ {
+ Error_Handler();
+ }
+
+ /** Initializes the CPU, AHB and APB buses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ {
+ Error_Handler();
+ }
+}
+
+/* USER CODE BEGIN 4 */
+// UART Message Requests Goes Here
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
+ if (huart->Instance == USART1) {
+ handleUARTMessages((uint8_t*)&RX1Msg, &huart1);
+ HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == USART2) {
+ handleUARTMessages((uint8_t*)&RX2Msg, &huart2);
+ HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == UART4) {
+ handleUARTMessages((uint8_t*)&RX4Msg, &huart4);
+ HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == UART5) {
+ handleUARTMessages((uint8_t*)&RX5Msg, &huart5);
+ HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage));
+ }
+}
+
+void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
+ // Restart DMA on error
+ if (huart->Instance == USART1) {
+ HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == USART2) {
+ HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == UART4) {
+ HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage));
+ }
+ else if (huart->Instance == UART5) {
+ HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage));
+ }
+}
+
+
+
+void findBestParent(){
+ //Find least depth parent
+ uint16_t least_val = 0xFF;
+ UART_HandleTypeDef* least_port = NULL;
+ for(uint8_t i = 0; i < 4; i++){
+ if(PORT_DEPTH[i] 0x73) return; //Usage ID is out of bounds
+ uint16_t bit_index = usageID - 0x04; //Offset, UsageID starts with 0x04. Gives us the actual value of the bit
+ uint8_t byte_index = bit_index/8; //Calculates which byte in the REPORT array
+ uint8_t bit_offset = bit_index%8; //Calculates which bits in the REPORT[byte_index] should be set/unset
+ REPORT.KEYPRESS[byte_index] |= (1 << bit_offset);
+}
+
+void matrixScan(void){
+
+ for (uint8_t col = 0; col < COL; col++){
+ HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_SET);
+ HAL_Delay(1);
+ for(uint8_t row = 0; row < ROW; row++){
+ uint8_t new_key = HAL_GPIO_ReadPin(ROW_PINS[row].GPIOx, ROW_PINS[row].PIN);
+ if(new_key != KEYSTATE[row][col]){
+ KEYSTATE_CHANGED_FLAG = 1;
+ KEYSTATE[row][col] = new_key;
+ }
+ if(new_key){
+ addUSBReport(KEYCODES[row][col]);
+ }
+ }
+ HAL_GPIO_WritePin(COLUMN_PINS[col].GPIOx, COLUMN_PINS[col].PIN, GPIO_PIN_RESET);
+ }
+
+}
+
+
+// Read TIM3 encoder counter, calculate delta and add corresponding keycodes
+void encoderProcess(void){
+ int32_t cnt = (int32_t)__HAL_TIM_GET_COUNTER(&htim3);
+ int32_t diff = cnt - LAST_ENCODER_COUNT;
+ // TIM3 configured as 16-bit counter (period 65535). Fix wrap-around.
+ if(diff > 32767) diff -= 65536;
+ if(diff < -32768) diff += 65536;
+ if(diff > 0){
+ int steps = diff;
+ if(steps > 10) steps = 10; // cap bursts
+ for(int i = 0; i < steps; i++){
+ // CW -> KEYCODES[0][0]
+ addUSBReport(KEYCODES[3][3]);
+ }
+ }else if(diff < 0){
+ int steps = -diff;
+ if(steps > 10) steps = 10;
+ for(int i = 0; i < steps; i++){
+ // CCW -> KEYCODES[0][1]
+ addUSBReport(KEYCODES[2][1]);
+ }
+ }
+ LAST_ENCODER_COUNT = cnt;
+}
+
+void resetReport(void){
+ memset(REPORT.KEYPRESS, 0, sizeof(REPORT.KEYPRESS));
+}
+
+/* USER CODE END 4 */
+
+/**
+ * @brief This function is executed in case of error occurrence.
+ * @retval None
+ */
+void Error_Handler(void)
+{
+ /* USER CODE BEGIN Error_Handler_Debug */
+ /* User can add his own implementation to report the HAL error return state */
+ __disable_irq();
+ while (1)
+ {
+ }
+ /* USER CODE END Error_Handler_Debug */
+}
+#ifdef USE_FULL_ASSERT
+/**
+ * @brief Reports the name of the source file and the source line number
+ * where the assert_param error has occurred.
+ * @param file: pointer to the source file name
+ * @param line: assert_param error line source number
+ * @retval None
+ */
+void assert_failed(uint8_t *file, uint32_t line)
+{
+ /* USER CODE BEGIN 6 */
+ /* User can add his own implementation to report the file name and line number,
+ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
+ /* USER CODE END 6 */
+}
+#endif /* USE_FULL_ASSERT */
+
diff --git a/firmware/67percent/Core/Src/pwm.c b/firmware/67percent/Core/Src/pwm.c
new file mode 100644
index 00000000..2dfe6255
--- /dev/null
+++ b/firmware/67percent/Core/Src/pwm.c
@@ -0,0 +1,41 @@
+#include "pwm.h"
+#include "tim.h"
+
+void MX_PWM_Init(void){
+ TIM_OC_InitTypeDef sConfigOC = {0};
+
+ // Initialize TIM2 for PWM (safe to call even if TIM2 was previously initialized for OC)
+ if (HAL_TIM_PWM_Init(&htim2) != HAL_OK){
+ Error_Handler();
+ }
+
+ sConfigOC.OCMode = TIM_OCMODE_PWM1;
+ sConfigOC.Pulse = 0;
+ sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
+ sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
+ if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK){
+ Error_Handler();
+ }
+}
+
+void PWM_Start(void){
+ HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
+}
+
+void PWM_Stop(void){
+ HAL_TIM_PWM_Stop(&htim2, TIM_CHANNEL_1);
+}
+
+void PWM_SetDuty(uint32_t duty){
+ // Clamp duty to timer period
+ uint32_t period = htim2.Init.Period;
+ if(duty > period) duty = period;
+ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, duty);
+}
+
+void PWM_SetPercent(uint8_t percent){
+ if(percent > 100) percent = 100;
+ uint32_t period = htim2.Init.Period;
+ uint32_t duty = (period * percent) / 100;
+ PWM_SetDuty(duty);
+}
diff --git a/firmware/modularkbd/Core/Src/stm32f4xx_hal_msp.c b/firmware/67percent/Core/Src/stm32f4xx_hal_msp.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/stm32f4xx_hal_msp.c
rename to firmware/67percent/Core/Src/stm32f4xx_hal_msp.c
diff --git a/firmware/modularkbd/Core/Src/stm32f4xx_it.c b/firmware/67percent/Core/Src/stm32f4xx_it.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/stm32f4xx_it.c
rename to firmware/67percent/Core/Src/stm32f4xx_it.c
diff --git a/firmware/modularkbd/Core/Src/syscalls.c b/firmware/67percent/Core/Src/syscalls.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/syscalls.c
rename to firmware/67percent/Core/Src/syscalls.c
diff --git a/firmware/modularkbd/Core/Src/sysmem.c b/firmware/67percent/Core/Src/sysmem.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/sysmem.c
rename to firmware/67percent/Core/Src/sysmem.c
diff --git a/firmware/modularkbd/Core/Src/system_stm32f4xx.c b/firmware/67percent/Core/Src/system_stm32f4xx.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/system_stm32f4xx.c
rename to firmware/67percent/Core/Src/system_stm32f4xx.c
diff --git a/firmware/modularkbd/Core/Src/tim.c b/firmware/67percent/Core/Src/tim.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/tim.c
rename to firmware/67percent/Core/Src/tim.c
diff --git a/firmware/modularkbd/Core/Src/usart.c b/firmware/67percent/Core/Src/usart.c
similarity index 100%
rename from firmware/modularkbd/Core/Src/usart.c
rename to firmware/67percent/Core/Src/usart.c
diff --git a/firmware/modularkbd/Core/Startup/startup_stm32f446retx.s b/firmware/67percent/Core/Startup/startup_stm32f446retx.s
similarity index 100%
rename from firmware/modularkbd/Core/Startup/startup_stm32f446retx.s
rename to firmware/67percent/Core/Startup/startup_stm32f446retx.s
diff --git a/firmware/modularkbd/Debug/Core/Src/dma.cyclo b/firmware/67percent/Debug/Core/Src/dma.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/dma.cyclo
rename to firmware/67percent/Debug/Core/Src/dma.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/dma.d b/firmware/67percent/Debug/Core/Src/dma.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/dma.d
rename to firmware/67percent/Debug/Core/Src/dma.d
diff --git a/firmware/67percent/Debug/Core/Src/dma.o b/firmware/67percent/Debug/Core/Src/dma.o
new file mode 100644
index 00000000..56de0de8
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/dma.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/dma.su b/firmware/67percent/Debug/Core/Src/dma.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/dma.su
rename to firmware/67percent/Debug/Core/Src/dma.su
diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.cyclo b/firmware/67percent/Debug/Core/Src/gpio.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/gpio.cyclo
rename to firmware/67percent/Debug/Core/Src/gpio.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.d b/firmware/67percent/Debug/Core/Src/gpio.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/gpio.d
rename to firmware/67percent/Debug/Core/Src/gpio.d
diff --git a/firmware/67percent/Debug/Core/Src/gpio.o b/firmware/67percent/Debug/Core/Src/gpio.o
new file mode 100644
index 00000000..b50eacfc
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/gpio.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/gpio.su b/firmware/67percent/Debug/Core/Src/gpio.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/gpio.su
rename to firmware/67percent/Debug/Core/Src/gpio.su
diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo b/firmware/67percent/Debug/Core/Src/hid_queue.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/hid_queue.cyclo
rename to firmware/67percent/Debug/Core/Src/hid_queue.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.d b/firmware/67percent/Debug/Core/Src/hid_queue.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/hid_queue.d
rename to firmware/67percent/Debug/Core/Src/hid_queue.d
diff --git a/firmware/67percent/Debug/Core/Src/hid_queue.o b/firmware/67percent/Debug/Core/Src/hid_queue.o
new file mode 100644
index 00000000..dce98adc
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/hid_queue.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/hid_queue.su b/firmware/67percent/Debug/Core/Src/hid_queue.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/hid_queue.su
rename to firmware/67percent/Debug/Core/Src/hid_queue.su
diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.cyclo b/firmware/67percent/Debug/Core/Src/i2c.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/i2c.cyclo
rename to firmware/67percent/Debug/Core/Src/i2c.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.d b/firmware/67percent/Debug/Core/Src/i2c.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/i2c.d
rename to firmware/67percent/Debug/Core/Src/i2c.d
diff --git a/firmware/67percent/Debug/Core/Src/i2c.o b/firmware/67percent/Debug/Core/Src/i2c.o
new file mode 100644
index 00000000..db118f05
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/i2c.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/i2c.su b/firmware/67percent/Debug/Core/Src/i2c.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/i2c.su
rename to firmware/67percent/Debug/Core/Src/i2c.su
diff --git a/firmware/67percent/Debug/Core/Src/main.cyclo b/firmware/67percent/Debug/Core/Src/main.cyclo
new file mode 100644
index 00000000..6281ec52
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/main.cyclo
@@ -0,0 +1,15 @@
+../Core/Src/main.c:70:6:pq_init 1
+../Core/Src/main.c:77:6:pq_push 2
+../Core/Src/main.c:87:6:pq_pop 2
+../Core/Src/main.c:206:5:main 7
+../Core/Src/main.c:330:6:mergeChild 7
+../Core/Src/main.c:359:6:SystemClock_Config 3
+../Core/Src/main.c:403:6:HAL_UART_RxCpltCallback 5
+../Core/Src/main.c:422:6:HAL_UART_ErrorCallback 5
+../Core/Src/main.c:440:6:findBestParent 4
+../Core/Src/main.c:461:6:handleUARTMessages 14
+../Core/Src/main.c:520:6:addUSBReport 3
+../Core/Src/main.c:528:6:matrixScan 5
+../Core/Src/main.c:550:6:encoderProcess 9
+../Core/Src/main.c:574:6:resetReport 1
+../Core/Src/main.c:584:6:Error_Handler 1
diff --git a/firmware/67percent/Debug/Core/Src/main.d b/firmware/67percent/Debug/Core/Src/main.d
new file mode 100644
index 00000000..454119d6
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/main.d
@@ -0,0 +1,94 @@
+Core/Src/main.o: ../Core/Src/main.c ../Core/Inc/main.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \
+ ../Core/Inc/stm32f4xx_hal_conf.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \
+ ../Drivers/CMSIS/Include/core_cm4.h \
+ ../Drivers/CMSIS/Include/cmsis_version.h \
+ ../Drivers/CMSIS/Include/cmsis_compiler.h \
+ ../Drivers/CMSIS/Include/cmsis_gcc.h \
+ ../Drivers/CMSIS/Include/mpu_armv7.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \
+ ../Core/Inc/dma.h ../Core/Inc/main.h ../Core/Inc/i2c.h ../Core/Inc/tim.h \
+ ../Core/Inc/usart.h ../USB_DEVICE/App/usb_device.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \
+ ../USB_DEVICE/Target/usbd_conf.h ../Core/Inc/gpio.h ../Core/Inc/pwm.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h \
+ ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+../Core/Inc/main.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h:
+../Core/Inc/stm32f4xx_hal_conf.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h:
+../Drivers/CMSIS/Include/core_cm4.h:
+../Drivers/CMSIS/Include/cmsis_version.h:
+../Drivers/CMSIS/Include/cmsis_compiler.h:
+../Drivers/CMSIS/Include/cmsis_gcc.h:
+../Drivers/CMSIS/Include/mpu_armv7.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h:
+../Core/Inc/dma.h:
+../Core/Inc/main.h:
+../Core/Inc/i2c.h:
+../Core/Inc/tim.h:
+../Core/Inc/usart.h:
+../USB_DEVICE/App/usb_device.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h:
+../USB_DEVICE/Target/usbd_conf.h:
+../Core/Inc/gpio.h:
+../Core/Inc/pwm.h:
+../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc/usbd_hid.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h:
+../Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h:
diff --git a/firmware/67percent/Debug/Core/Src/main.o b/firmware/67percent/Debug/Core/Src/main.o
new file mode 100644
index 00000000..5e91d85b
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/main.o differ
diff --git a/firmware/67percent/Debug/Core/Src/main.su b/firmware/67percent/Debug/Core/Src/main.su
new file mode 100644
index 00000000..6c1dccd3
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/main.su
@@ -0,0 +1,15 @@
+../Core/Src/main.c:70:6:pq_init 16 static
+../Core/Src/main.c:77:6:pq_push 24 static
+../Core/Src/main.c:87:6:pq_pop 16 static
+../Core/Src/main.c:206:5:main 40 static
+../Core/Src/main.c:330:6:mergeChild 40 static
+../Core/Src/main.c:359:6:SystemClock_Config 88 static
+../Core/Src/main.c:403:6:HAL_UART_RxCpltCallback 16 static
+../Core/Src/main.c:422:6:HAL_UART_ErrorCallback 16 static
+../Core/Src/main.c:440:6:findBestParent 24 static
+../Core/Src/main.c:461:6:handleUARTMessages 56 static
+../Core/Src/main.c:520:6:addUSBReport 24 static
+../Core/Src/main.c:528:6:matrixScan 16 static
+../Core/Src/main.c:550:6:encoderProcess 32 static
+../Core/Src/main.c:574:6:resetReport 8 static
+../Core/Src/main.c:584:6:Error_Handler 4 static,ignoring_inline_asm
diff --git a/firmware/67percent/Debug/Core/Src/pwm.cyclo b/firmware/67percent/Debug/Core/Src/pwm.cyclo
new file mode 100644
index 00000000..ea82f127
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/pwm.cyclo
@@ -0,0 +1,5 @@
+../Core/Src/pwm.c:4:6:MX_PWM_Init 3
+../Core/Src/pwm.c:21:6:PWM_Start 1
+../Core/Src/pwm.c:25:6:PWM_Stop 1
+../Core/Src/pwm.c:29:6:PWM_SetDuty 2
+../Core/Src/pwm.c:36:6:PWM_SetPercent 2
diff --git a/firmware/67percent/Debug/Core/Src/pwm.d b/firmware/67percent/Debug/Core/Src/pwm.d
new file mode 100644
index 00000000..997f695f
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/pwm.d
@@ -0,0 +1,71 @@
+Core/Src/pwm.o: ../Core/Src/pwm.c ../Core/Inc/pwm.h ../Core/Inc/main.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h \
+ ../Core/Inc/stm32f4xx_hal_conf.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h \
+ ../Drivers/CMSIS/Include/core_cm4.h \
+ ../Drivers/CMSIS/Include/cmsis_version.h \
+ ../Drivers/CMSIS/Include/cmsis_compiler.h \
+ ../Drivers/CMSIS/Include/cmsis_gcc.h \
+ ../Drivers/CMSIS/Include/mpu_armv7.h \
+ ../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h \
+ ../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h \
+ ../Core/Inc/tim.h
+../Core/Inc/pwm.h:
+../Core/Inc/main.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal.h:
+../Core/Inc/stm32f4xx_hal_conf.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f446xx.h:
+../Drivers/CMSIS/Include/core_cm4.h:
+../Drivers/CMSIS/Include/cmsis_version.h:
+../Drivers/CMSIS/Include/cmsis_compiler.h:
+../Drivers/CMSIS/Include/cmsis_gcc.h:
+../Drivers/CMSIS/Include/mpu_armv7.h:
+../Drivers/CMSIS/Device/ST/STM32F4xx/Include/system_stm32f4xx.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_rcc_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_gpio_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_exti.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_dma_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_cortex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_flash_ramfunc.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_i2c_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pwr_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_tim_ex.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_uart.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_ll_usb.h:
+../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_pcd_ex.h:
+../Core/Inc/tim.h:
diff --git a/firmware/67percent/Debug/Core/Src/pwm.o b/firmware/67percent/Debug/Core/Src/pwm.o
new file mode 100644
index 00000000..2311e384
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/pwm.o differ
diff --git a/firmware/67percent/Debug/Core/Src/pwm.su b/firmware/67percent/Debug/Core/Src/pwm.su
new file mode 100644
index 00000000..8f1e7001
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/pwm.su
@@ -0,0 +1,5 @@
+../Core/Src/pwm.c:4:6:MX_PWM_Init 40 static
+../Core/Src/pwm.c:21:6:PWM_Start 8 static
+../Core/Src/pwm.c:25:6:PWM_Stop 8 static
+../Core/Src/pwm.c:29:6:PWM_SetDuty 24 static
+../Core/Src/pwm.c:36:6:PWM_SetPercent 24 static
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.cyclo b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.cyclo
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.d b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.d
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.d
diff --git a/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o
new file mode 100644
index 00000000..edeced39
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.su b/firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_hal_msp.su
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_hal_msp.su
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.cyclo b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.cyclo
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.d b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.d
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.d
diff --git a/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o
new file mode 100644
index 00000000..e19568c1
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.su b/firmware/67percent/Debug/Core/Src/stm32f4xx_it.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/stm32f4xx_it.su
rename to firmware/67percent/Debug/Core/Src/stm32f4xx_it.su
diff --git a/firmware/67percent/Debug/Core/Src/subdir.mk b/firmware/67percent/Debug/Core/Src/subdir.mk
new file mode 100644
index 00000000..e7a142ba
--- /dev/null
+++ b/firmware/67percent/Debug/Core/Src/subdir.mk
@@ -0,0 +1,63 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+# Toolchain: GNU Tools for STM32 (13.3.rel1)
+################################################################################
+
+# Add inputs and outputs from these tool invocations to the build variables
+C_SRCS += \
+../Core/Src/dma.c \
+../Core/Src/gpio.c \
+../Core/Src/hid_queue.c \
+../Core/Src/i2c.c \
+../Core/Src/main.c \
+../Core/Src/pwm.c \
+../Core/Src/stm32f4xx_hal_msp.c \
+../Core/Src/stm32f4xx_it.c \
+../Core/Src/syscalls.c \
+../Core/Src/sysmem.c \
+../Core/Src/system_stm32f4xx.c \
+../Core/Src/tim.c \
+../Core/Src/usart.c
+
+OBJS += \
+./Core/Src/dma.o \
+./Core/Src/gpio.o \
+./Core/Src/hid_queue.o \
+./Core/Src/i2c.o \
+./Core/Src/main.o \
+./Core/Src/pwm.o \
+./Core/Src/stm32f4xx_hal_msp.o \
+./Core/Src/stm32f4xx_it.o \
+./Core/Src/syscalls.o \
+./Core/Src/sysmem.o \
+./Core/Src/system_stm32f4xx.o \
+./Core/Src/tim.o \
+./Core/Src/usart.o
+
+C_DEPS += \
+./Core/Src/dma.d \
+./Core/Src/gpio.d \
+./Core/Src/hid_queue.d \
+./Core/Src/i2c.d \
+./Core/Src/main.d \
+./Core/Src/pwm.d \
+./Core/Src/stm32f4xx_hal_msp.d \
+./Core/Src/stm32f4xx_it.d \
+./Core/Src/syscalls.d \
+./Core/Src/sysmem.d \
+./Core/Src/system_stm32f4xx.d \
+./Core/Src/tim.d \
+./Core/Src/usart.d
+
+
+# Each subdirectory must supply rules for building sources it contributes
+Core/Src/%.o Core/Src/%.su Core/Src/%.cyclo: ../Core/Src/%.c Core/Src/subdir.mk
+ arm-none-eabi-gcc "$<" -mcpu=cortex-m4 -std=gnu11 -g3 -DDEBUG -DUSE_HAL_DRIVER -DSTM32F446xx -c -I../Core/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc -I../Drivers/STM32F4xx_HAL_Driver/Inc/Legacy -I../Drivers/CMSIS/Device/ST/STM32F4xx/Include -I../Drivers/CMSIS/Include -I../USB_DEVICE/App -I../USB_DEVICE/Target -I../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../Middlewares/ST/STM32_USB_Device_Library/Class/HID/Inc -O0 -ffunction-sections -fdata-sections -Wall -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"$(@:%.o=%.d)" -MT"$@" --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -o "$@"
+
+clean: clean-Core-2f-Src
+
+clean-Core-2f-Src:
+ -$(RM) ./Core/Src/dma.cyclo ./Core/Src/dma.d ./Core/Src/dma.o ./Core/Src/dma.su ./Core/Src/gpio.cyclo ./Core/Src/gpio.d ./Core/Src/gpio.o ./Core/Src/gpio.su ./Core/Src/hid_queue.cyclo ./Core/Src/hid_queue.d ./Core/Src/hid_queue.o ./Core/Src/hid_queue.su ./Core/Src/i2c.cyclo ./Core/Src/i2c.d ./Core/Src/i2c.o ./Core/Src/i2c.su ./Core/Src/main.cyclo ./Core/Src/main.d ./Core/Src/main.o ./Core/Src/main.su ./Core/Src/pwm.cyclo ./Core/Src/pwm.d ./Core/Src/pwm.o ./Core/Src/pwm.su ./Core/Src/stm32f4xx_hal_msp.cyclo ./Core/Src/stm32f4xx_hal_msp.d ./Core/Src/stm32f4xx_hal_msp.o ./Core/Src/stm32f4xx_hal_msp.su ./Core/Src/stm32f4xx_it.cyclo ./Core/Src/stm32f4xx_it.d ./Core/Src/stm32f4xx_it.o ./Core/Src/stm32f4xx_it.su ./Core/Src/syscalls.cyclo ./Core/Src/syscalls.d ./Core/Src/syscalls.o ./Core/Src/syscalls.su ./Core/Src/sysmem.cyclo ./Core/Src/sysmem.d ./Core/Src/sysmem.o ./Core/Src/sysmem.su ./Core/Src/system_stm32f4xx.cyclo ./Core/Src/system_stm32f4xx.d ./Core/Src/system_stm32f4xx.o ./Core/Src/system_stm32f4xx.su ./Core/Src/tim.cyclo ./Core/Src/tim.d ./Core/Src/tim.o ./Core/Src/tim.su ./Core/Src/usart.cyclo ./Core/Src/usart.d ./Core/Src/usart.o ./Core/Src/usart.su
+
+.PHONY: clean-Core-2f-Src
+
diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.cyclo b/firmware/67percent/Debug/Core/Src/syscalls.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/syscalls.cyclo
rename to firmware/67percent/Debug/Core/Src/syscalls.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.d b/firmware/67percent/Debug/Core/Src/syscalls.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/syscalls.d
rename to firmware/67percent/Debug/Core/Src/syscalls.d
diff --git a/firmware/67percent/Debug/Core/Src/syscalls.o b/firmware/67percent/Debug/Core/Src/syscalls.o
new file mode 100644
index 00000000..026d6a62
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/syscalls.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/syscalls.su b/firmware/67percent/Debug/Core/Src/syscalls.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/syscalls.su
rename to firmware/67percent/Debug/Core/Src/syscalls.su
diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.cyclo b/firmware/67percent/Debug/Core/Src/sysmem.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/sysmem.cyclo
rename to firmware/67percent/Debug/Core/Src/sysmem.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.d b/firmware/67percent/Debug/Core/Src/sysmem.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/sysmem.d
rename to firmware/67percent/Debug/Core/Src/sysmem.d
diff --git a/firmware/67percent/Debug/Core/Src/sysmem.o b/firmware/67percent/Debug/Core/Src/sysmem.o
new file mode 100644
index 00000000..92127518
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/sysmem.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/sysmem.su b/firmware/67percent/Debug/Core/Src/sysmem.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/sysmem.su
rename to firmware/67percent/Debug/Core/Src/sysmem.su
diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.cyclo b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.cyclo
rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.d b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.d
rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.d
diff --git a/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o
new file mode 100644
index 00000000..ab5551a5
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.su b/firmware/67percent/Debug/Core/Src/system_stm32f4xx.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/system_stm32f4xx.su
rename to firmware/67percent/Debug/Core/Src/system_stm32f4xx.su
diff --git a/firmware/modularkbd/Debug/Core/Src/tim.cyclo b/firmware/67percent/Debug/Core/Src/tim.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/tim.cyclo
rename to firmware/67percent/Debug/Core/Src/tim.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/tim.d b/firmware/67percent/Debug/Core/Src/tim.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/tim.d
rename to firmware/67percent/Debug/Core/Src/tim.d
diff --git a/firmware/67percent/Debug/Core/Src/tim.o b/firmware/67percent/Debug/Core/Src/tim.o
new file mode 100644
index 00000000..df9bf7f9
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/tim.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/tim.su b/firmware/67percent/Debug/Core/Src/tim.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/tim.su
rename to firmware/67percent/Debug/Core/Src/tim.su
diff --git a/firmware/modularkbd/Debug/Core/Src/usart.cyclo b/firmware/67percent/Debug/Core/Src/usart.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/usart.cyclo
rename to firmware/67percent/Debug/Core/Src/usart.cyclo
diff --git a/firmware/modularkbd/Debug/Core/Src/usart.d b/firmware/67percent/Debug/Core/Src/usart.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/usart.d
rename to firmware/67percent/Debug/Core/Src/usart.d
diff --git a/firmware/67percent/Debug/Core/Src/usart.o b/firmware/67percent/Debug/Core/Src/usart.o
new file mode 100644
index 00000000..d76960bd
Binary files /dev/null and b/firmware/67percent/Debug/Core/Src/usart.o differ
diff --git a/firmware/modularkbd/Debug/Core/Src/usart.su b/firmware/67percent/Debug/Core/Src/usart.su
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Src/usart.su
rename to firmware/67percent/Debug/Core/Src/usart.su
diff --git a/firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.d b/firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.d
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.d
rename to firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.d
diff --git a/firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.o b/firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.o
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Startup/startup_stm32f446retx.o
rename to firmware/67percent/Debug/Core/Startup/startup_stm32f446retx.o
diff --git a/firmware/modularkbd/Debug/Core/Startup/subdir.mk b/firmware/67percent/Debug/Core/Startup/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/Core/Startup/subdir.mk
rename to firmware/67percent/Debug/Core/Startup/subdir.mk
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_cortex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_dma_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_exti.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_flash_ramfunc.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_gpio.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_i2c_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pcd_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_pwr_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_rcc_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_tim_ex.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_uart.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.cyclo
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.d
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.o
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.su
diff --git a/firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk b/firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk
rename to firmware/67percent/Debug/Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.cyclo
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.d
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.o
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/usbd_hid.su
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.cyclo
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.d
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.o
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.su
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.cyclo
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.d
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.o
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.su
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.cyclo
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.d
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.o
diff --git a/firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su b/firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su
similarity index 100%
rename from firmware/modularkbd/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su
rename to firmware/67percent/Debug/Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.su
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/subdir.mk b/firmware/67percent/Debug/USB_DEVICE/App/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/subdir.mk
rename to firmware/67percent/Debug/USB_DEVICE/App/subdir.mk
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.cyclo b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.cyclo
rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.cyclo
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.d b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.d
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.d
rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.d
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.o b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.o
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.o
rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.o
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.su b/firmware/67percent/Debug/USB_DEVICE/App/usb_device.su
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usb_device.su
rename to firmware/67percent/Debug/USB_DEVICE/App/usb_device.su
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.cyclo b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.cyclo
rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.cyclo
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.d b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.d
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.d
rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.d
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.o b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.o
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.o
rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.o
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.su b/firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.su
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/App/usbd_desc.su
rename to firmware/67percent/Debug/USB_DEVICE/App/usbd_desc.su
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/subdir.mk b/firmware/67percent/Debug/USB_DEVICE/Target/subdir.mk
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/Target/subdir.mk
rename to firmware/67percent/Debug/USB_DEVICE/Target/subdir.mk
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.cyclo b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.cyclo
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.cyclo
rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.cyclo
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.d b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.d
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.d
rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.d
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.o b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.o
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.o
rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.o
diff --git a/firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.su b/firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.su
similarity index 100%
rename from firmware/modularkbd/Debug/USB_DEVICE/Target/usbd_conf.su
rename to firmware/67percent/Debug/USB_DEVICE/Target/usbd_conf.su
diff --git a/firmware/67percent/Debug/makefile b/firmware/67percent/Debug/makefile
new file mode 100644
index 00000000..4176ad2b
--- /dev/null
+++ b/firmware/67percent/Debug/makefile
@@ -0,0 +1,98 @@
+################################################################################
+# Automatically-generated file. Do not edit!
+# Toolchain: GNU Tools for STM32 (13.3.rel1)
+################################################################################
+
+-include ../makefile.init
+
+RM := rm -rf
+
+# All of the sources participating in the build are defined here
+-include sources.mk
+-include USB_DEVICE/Target/subdir.mk
+-include USB_DEVICE/App/subdir.mk
+-include Middlewares/ST/STM32_USB_Device_Library/Core/Src/subdir.mk
+-include Middlewares/ST/STM32_USB_Device_Library/Class/HID/Src/subdir.mk
+-include Drivers/STM32F4xx_HAL_Driver/Src/subdir.mk
+-include Core/Startup/subdir.mk
+-include Core/Src/subdir.mk
+-include objects.mk
+
+ifneq ($(MAKECMDGOALS),clean)
+ifneq ($(strip $(S_DEPS)),)
+-include $(S_DEPS)
+endif
+ifneq ($(strip $(S_UPPER_DEPS)),)
+-include $(S_UPPER_DEPS)
+endif
+ifneq ($(strip $(C_DEPS)),)
+-include $(C_DEPS)
+endif
+endif
+
+-include ../makefile.defs
+
+OPTIONAL_TOOL_DEPS := \
+$(wildcard ../makefile.defs) \
+$(wildcard ../makefile.init) \
+$(wildcard ../makefile.targets) \
+
+
+BUILD_ARTIFACT_NAME := modularkbd
+BUILD_ARTIFACT_EXTENSION := elf
+BUILD_ARTIFACT_PREFIX :=
+BUILD_ARTIFACT := $(BUILD_ARTIFACT_PREFIX)$(BUILD_ARTIFACT_NAME)$(if $(BUILD_ARTIFACT_EXTENSION),.$(BUILD_ARTIFACT_EXTENSION),)
+
+# Add inputs and outputs from these tool invocations to the build variables
+EXECUTABLES += \
+modularkbd.elf \
+
+MAP_FILES += \
+modularkbd.map \
+
+SIZE_OUTPUT += \
+default.size.stdout \
+
+OBJDUMP_LIST += \
+modularkbd.list \
+
+
+# All Target
+all: main-build
+
+# Main-build Target
+main-build: modularkbd.elf secondary-outputs
+
+# Tool invocations
+modularkbd.elf modularkbd.map: $(OBJS) $(USER_OBJS) /home/ukim/Projects/modular-kbd/firmware/67percent/STM32F446RETX_FLASH.ld makefile objects.list $(OPTIONAL_TOOL_DEPS)
+ arm-none-eabi-gcc -o "modularkbd.elf" @"objects.list" $(USER_OBJS) $(LIBS) -mcpu=cortex-m4 -T"/home/ukim/Projects/modular-kbd/firmware/67percent/STM32F446RETX_FLASH.ld" --specs=nosys.specs -Wl,-Map="modularkbd.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group
+ @echo 'Finished building target: $@'
+ @echo ' '
+
+default.size.stdout: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
+ arm-none-eabi-size $(EXECUTABLES)
+ @echo 'Finished building: $@'
+ @echo ' '
+
+modularkbd.list: $(EXECUTABLES) makefile objects.list $(OPTIONAL_TOOL_DEPS)
+ arm-none-eabi-objdump -h -S $(EXECUTABLES) > "modularkbd.list"
+ @echo 'Finished building: $@'
+ @echo ' '
+
+# Other Targets
+clean:
+ -$(RM) default.size.stdout modularkbd.elf modularkbd.list modularkbd.map
+ -@echo ' '
+
+secondary-outputs: $(SIZE_OUTPUT) $(OBJDUMP_LIST)
+
+fail-specified-linker-script-missing:
+ @echo 'Error: Cannot find the specified linker script. Check the linker settings in the build configuration.'
+ @exit 2
+
+warn-no-linker-script-specified:
+ @echo 'Warning: No linker script specified. Check the linker settings in the build configuration.'
+
+.PHONY: all clean dependents main-build fail-specified-linker-script-missing warn-no-linker-script-specified
+
+-include ../makefile.targets
diff --git a/firmware/67percent/Debug/modularkbd.elf b/firmware/67percent/Debug/modularkbd.elf
new file mode 100755
index 00000000..4b7f5800
Binary files /dev/null and b/firmware/67percent/Debug/modularkbd.elf differ
diff --git a/firmware/67percent/Debug/modularkbd.list b/firmware/67percent/Debug/modularkbd.list
new file mode 100644
index 00000000..c1ab3d34
--- /dev/null
+++ b/firmware/67percent/Debug/modularkbd.list
@@ -0,0 +1,21363 @@
+
+modularkbd.elf: file format elf32-littlearm
+
+Sections:
+Idx Name Size VMA LMA File off Algn
+ 0 .isr_vector 000001c4 08000000 08000000 00001000 2**0
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 1 .text 0000b218 080001c4 080001c4 000011c4 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, CODE
+ 2 .rodata 0000005c 0800b3dc 0800b3dc 0000c3dc 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 3 .ARM.extab 00000000 0800b438 0800b438 0000d1a0 2**0
+ CONTENTS, READONLY
+ 4 .ARM 00000008 0800b438 0800b438 0000c438 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 5 .preinit_array 00000000 0800b440 0800b440 0000d1a0 2**0
+ CONTENTS, ALLOC, LOAD, DATA
+ 6 .init_array 00000004 0800b440 0800b440 0000c440 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 7 .fini_array 00000004 0800b444 0800b444 0000c444 2**2
+ CONTENTS, ALLOC, LOAD, READONLY, DATA
+ 8 .data 000001a0 20000000 0800b448 0000d000 2**2
+ CONTENTS, ALLOC, LOAD, DATA
+ 9 .bss 000015bc 200001a0 0800b5e8 0000d1a0 2**2
+ ALLOC
+ 10 ._user_heap_stack 00000604 2000175c 0800b5e8 0000d75c 2**0
+ ALLOC
+ 11 .ARM.attributes 00000030 00000000 00000000 0000d1a0 2**0
+ CONTENTS, READONLY
+ 12 .debug_info 0001be15 00000000 00000000 0000d1d0 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 13 .debug_abbrev 00004285 00000000 00000000 00028fe5 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 14 .debug_aranges 000017f0 00000000 00000000 0002d270 2**3
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 15 .debug_rnglists 00001291 00000000 00000000 0002ea60 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 16 .debug_macro 000262b3 00000000 00000000 0002fcf1 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 17 .debug_line 0001f083 00000000 00000000 00055fa4 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 18 .debug_str 000d80a4 00000000 00000000 00075027 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 19 .comment 00000043 00000000 00000000 0014d0cb 2**0
+ CONTENTS, READONLY
+ 20 .debug_frame 0000645c 00000000 00000000 0014d110 2**2
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+ 21 .debug_line_str 00000062 00000000 00000000 0015356c 2**0
+ CONTENTS, READONLY, DEBUGGING, OCTETS
+
+Disassembly of section .text:
+
+080001c4 <__do_global_dtors_aux>:
+ 80001c4: b510 push {r4, lr}
+ 80001c6: 4c05 ldr r4, [pc, #20] @ (80001dc <__do_global_dtors_aux+0x18>)
+ 80001c8: 7823 ldrb r3, [r4, #0]
+ 80001ca: b933 cbnz r3, 80001da <__do_global_dtors_aux+0x16>
+ 80001cc: 4b04 ldr r3, [pc, #16] @ (80001e0 <__do_global_dtors_aux+0x1c>)
+ 80001ce: b113 cbz r3, 80001d6 <__do_global_dtors_aux+0x12>
+ 80001d0: 4804 ldr r0, [pc, #16] @ (80001e4 <__do_global_dtors_aux+0x20>)
+ 80001d2: f3af 8000 nop.w
+ 80001d6: 2301 movs r3, #1
+ 80001d8: 7023 strb r3, [r4, #0]
+ 80001da: bd10 pop {r4, pc}
+ 80001dc: 200001a0 .word 0x200001a0
+ 80001e0: 00000000 .word 0x00000000
+ 80001e4: 0800b3c4 .word 0x0800b3c4
+
+080001e8 :
+ 80001e8: b508 push {r3, lr}
+ 80001ea: 4b03 ldr r3, [pc, #12] @ (80001f8 )
+ 80001ec: b11b cbz r3, 80001f6
+ 80001ee: 4903 ldr r1, [pc, #12] @ (80001fc )
+ 80001f0: 4803 ldr r0, [pc, #12] @ (8000200 )
+ 80001f2: f3af 8000 nop.w
+ 80001f6: bd08 pop {r3, pc}
+ 80001f8: 00000000 .word 0x00000000
+ 80001fc: 200001a4 .word 0x200001a4
+ 8000200: 0800b3c4 .word 0x0800b3c4
+
+08000204 <__aeabi_uldivmod>:
+ 8000204: b953 cbnz r3, 800021c <__aeabi_uldivmod+0x18>
+ 8000206: b94a cbnz r2, 800021c <__aeabi_uldivmod+0x18>
+ 8000208: 2900 cmp r1, #0
+ 800020a: bf08 it eq
+ 800020c: 2800 cmpeq r0, #0
+ 800020e: bf1c itt ne
+ 8000210: f04f 31ff movne.w r1, #4294967295 @ 0xffffffff
+ 8000214: f04f 30ff movne.w r0, #4294967295 @ 0xffffffff
+ 8000218: f000 b988 b.w 800052c <__aeabi_idiv0>
+ 800021c: f1ad 0c08 sub.w ip, sp, #8
+ 8000220: e96d ce04 strd ip, lr, [sp, #-16]!
+ 8000224: f000 f806 bl 8000234 <__udivmoddi4>
+ 8000228: f8dd e004 ldr.w lr, [sp, #4]
+ 800022c: e9dd 2302 ldrd r2, r3, [sp, #8]
+ 8000230: b004 add sp, #16
+ 8000232: 4770 bx lr
+
+08000234 <__udivmoddi4>:
+ 8000234: e92d 47f0 stmdb sp!, {r4, r5, r6, r7, r8, r9, sl, lr}
+ 8000238: 9d08 ldr r5, [sp, #32]
+ 800023a: 468e mov lr, r1
+ 800023c: 4604 mov r4, r0
+ 800023e: 4688 mov r8, r1
+ 8000240: 2b00 cmp r3, #0
+ 8000242: d14a bne.n 80002da <__udivmoddi4+0xa6>
+ 8000244: 428a cmp r2, r1
+ 8000246: 4617 mov r7, r2
+ 8000248: d962 bls.n 8000310 <__udivmoddi4+0xdc>
+ 800024a: fab2 f682 clz r6, r2
+ 800024e: b14e cbz r6, 8000264 <__udivmoddi4+0x30>
+ 8000250: f1c6 0320 rsb r3, r6, #32
+ 8000254: fa01 f806 lsl.w r8, r1, r6
+ 8000258: fa20 f303 lsr.w r3, r0, r3
+ 800025c: 40b7 lsls r7, r6
+ 800025e: ea43 0808 orr.w r8, r3, r8
+ 8000262: 40b4 lsls r4, r6
+ 8000264: ea4f 4e17 mov.w lr, r7, lsr #16
+ 8000268: fa1f fc87 uxth.w ip, r7
+ 800026c: fbb8 f1fe udiv r1, r8, lr
+ 8000270: 0c23 lsrs r3, r4, #16
+ 8000272: fb0e 8811 mls r8, lr, r1, r8
+ 8000276: ea43 4308 orr.w r3, r3, r8, lsl #16
+ 800027a: fb01 f20c mul.w r2, r1, ip
+ 800027e: 429a cmp r2, r3
+ 8000280: d909 bls.n 8000296 <__udivmoddi4+0x62>
+ 8000282: 18fb adds r3, r7, r3
+ 8000284: f101 30ff add.w r0, r1, #4294967295 @ 0xffffffff
+ 8000288: f080 80ea bcs.w 8000460 <__udivmoddi4+0x22c>
+ 800028c: 429a cmp r2, r3
+ 800028e: f240 80e7 bls.w 8000460 <__udivmoddi4+0x22c>
+ 8000292: 3902 subs r1, #2
+ 8000294: 443b add r3, r7
+ 8000296: 1a9a subs r2, r3, r2
+ 8000298: b2a3 uxth r3, r4
+ 800029a: fbb2 f0fe udiv r0, r2, lr
+ 800029e: fb0e 2210 mls r2, lr, r0, r2
+ 80002a2: ea43 4302 orr.w r3, r3, r2, lsl #16
+ 80002a6: fb00 fc0c mul.w ip, r0, ip
+ 80002aa: 459c cmp ip, r3
+ 80002ac: d909 bls.n 80002c2 <__udivmoddi4+0x8e>
+ 80002ae: 18fb adds r3, r7, r3
+ 80002b0: f100 32ff add.w r2, r0, #4294967295 @ 0xffffffff
+ 80002b4: f080 80d6 bcs.w 8000464 <__udivmoddi4+0x230>
+ 80002b8: 459c cmp ip, r3
+ 80002ba: f240 80d3 bls.w 8000464 <__udivmoddi4+0x230>
+ 80002be: 443b add r3, r7
+ 80002c0: 3802 subs r0, #2
+ 80002c2: ea40 4001 orr.w r0, r0, r1, lsl #16
+ 80002c6: eba3 030c sub.w r3, r3, ip
+ 80002ca: 2100 movs r1, #0
+ 80002cc: b11d cbz r5, 80002d6 <__udivmoddi4+0xa2>
+ 80002ce: 40f3 lsrs r3, r6
+ 80002d0: 2200 movs r2, #0
+ 80002d2: e9c5 3200 strd r3, r2, [r5]
+ 80002d6: e8bd 87f0 ldmia.w sp!, {r4, r5, r6, r7, r8, r9, sl, pc}
+ 80002da: 428b cmp r3, r1
+ 80002dc: d905 bls.n 80002ea <__udivmoddi4+0xb6>
+ 80002de: b10d cbz r5, 80002e4 <__udivmoddi4+0xb0>
+ 80002e0: e9c5 0100 strd r0, r1, [r5]
+ 80002e4: 2100 movs r1, #0
+ 80002e6: 4608 mov r0, r1
+ 80002e8: e7f5 b.n 80002d6 <__udivmoddi4+0xa2>
+ 80002ea: fab3 f183 clz r1, r3
+ 80002ee: 2900 cmp r1, #0
+ 80002f0: d146 bne.n 8000380 <__udivmoddi4+0x14c>
+ 80002f2: 4573 cmp r3, lr
+ 80002f4: d302 bcc.n 80002fc <__udivmoddi4+0xc8>
+ 80002f6: 4282 cmp r2, r0
+ 80002f8: f200 8105 bhi.w 8000506 <__udivmoddi4+0x2d2>
+ 80002fc: 1a84 subs r4, r0, r2
+ 80002fe: eb6e 0203 sbc.w r2, lr, r3
+ 8000302: 2001 movs r0, #1
+ 8000304: 4690 mov r8, r2
+ 8000306: 2d00 cmp r5, #0
+ 8000308: d0e5 beq.n 80002d6 <__udivmoddi4+0xa2>
+ 800030a: e9c5 4800 strd r4, r8, [r5]
+ 800030e: e7e2 b.n 80002d6 <__udivmoddi4+0xa2>
+ 8000310: 2a00 cmp r2, #0
+ 8000312: f000 8090 beq.w 8000436 <__udivmoddi4+0x202>
+ 8000316: fab2 f682 clz r6, r2
+ 800031a: 2e00 cmp r6, #0
+ 800031c: f040 80a4 bne.w 8000468 <__udivmoddi4+0x234>
+ 8000320: 1a8a subs r2, r1, r2
+ 8000322: 0c03 lsrs r3, r0, #16
+ 8000324: ea4f 4e17 mov.w lr, r7, lsr #16
+ 8000328: b280 uxth r0, r0
+ 800032a: b2bc uxth r4, r7
+ 800032c: 2101 movs r1, #1
+ 800032e: fbb2 fcfe udiv ip, r2, lr
+ 8000332: fb0e 221c mls r2, lr, ip, r2
+ 8000336: ea43 4302 orr.w r3, r3, r2, lsl #16
+ 800033a: fb04 f20c mul.w r2, r4, ip
+ 800033e: 429a cmp r2, r3
+ 8000340: d907 bls.n 8000352 <__udivmoddi4+0x11e>
+ 8000342: 18fb adds r3, r7, r3
+ 8000344: f10c 38ff add.w r8, ip, #4294967295 @ 0xffffffff
+ 8000348: d202 bcs.n 8000350 <__udivmoddi4+0x11c>
+ 800034a: 429a cmp r2, r3
+ 800034c: f200 80e0 bhi.w 8000510 <__udivmoddi4+0x2dc>
+ 8000350: 46c4 mov ip, r8
+ 8000352: 1a9b subs r3, r3, r2
+ 8000354: fbb3 f2fe udiv r2, r3, lr
+ 8000358: fb0e 3312 mls r3, lr, r2, r3
+ 800035c: ea40 4303 orr.w r3, r0, r3, lsl #16
+ 8000360: fb02 f404 mul.w r4, r2, r4
+ 8000364: 429c cmp r4, r3
+ 8000366: d907 bls.n 8000378 <__udivmoddi4+0x144>
+ 8000368: 18fb adds r3, r7, r3
+ 800036a: f102 30ff add.w r0, r2, #4294967295 @ 0xffffffff
+ 800036e: d202 bcs.n 8000376 <__udivmoddi4+0x142>
+ 8000370: 429c cmp r4, r3
+ 8000372: f200 80ca bhi.w 800050a <__udivmoddi4+0x2d6>
+ 8000376: 4602 mov r2, r0
+ 8000378: 1b1b subs r3, r3, r4
+ 800037a: ea42 400c orr.w r0, r2, ip, lsl #16
+ 800037e: e7a5 b.n 80002cc <__udivmoddi4+0x98>
+ 8000380: f1c1 0620 rsb r6, r1, #32
+ 8000384: 408b lsls r3, r1
+ 8000386: fa22 f706 lsr.w r7, r2, r6
+ 800038a: 431f orrs r7, r3
+ 800038c: fa0e f401 lsl.w r4, lr, r1
+ 8000390: fa20 f306 lsr.w r3, r0, r6
+ 8000394: fa2e fe06 lsr.w lr, lr, r6
+ 8000398: ea4f 4917 mov.w r9, r7, lsr #16
+ 800039c: 4323 orrs r3, r4
+ 800039e: fa00 f801 lsl.w r8, r0, r1
+ 80003a2: fa1f fc87 uxth.w ip, r7
+ 80003a6: fbbe f0f9 udiv r0, lr, r9
+ 80003aa: 0c1c lsrs r4, r3, #16
+ 80003ac: fb09 ee10 mls lr, r9, r0, lr
+ 80003b0: ea44 440e orr.w r4, r4, lr, lsl #16
+ 80003b4: fb00 fe0c mul.w lr, r0, ip
+ 80003b8: 45a6 cmp lr, r4
+ 80003ba: fa02 f201 lsl.w r2, r2, r1
+ 80003be: d909 bls.n 80003d4 <__udivmoddi4+0x1a0>
+ 80003c0: 193c adds r4, r7, r4
+ 80003c2: f100 3aff add.w sl, r0, #4294967295 @ 0xffffffff
+ 80003c6: f080 809c bcs.w 8000502 <__udivmoddi4+0x2ce>
+ 80003ca: 45a6 cmp lr, r4
+ 80003cc: f240 8099 bls.w 8000502 <__udivmoddi4+0x2ce>
+ 80003d0: 3802 subs r0, #2
+ 80003d2: 443c add r4, r7
+ 80003d4: eba4 040e sub.w r4, r4, lr
+ 80003d8: fa1f fe83 uxth.w lr, r3
+ 80003dc: fbb4 f3f9 udiv r3, r4, r9
+ 80003e0: fb09 4413 mls r4, r9, r3, r4
+ 80003e4: ea4e 4404 orr.w r4, lr, r4, lsl #16
+ 80003e8: fb03 fc0c mul.w ip, r3, ip
+ 80003ec: 45a4 cmp ip, r4
+ 80003ee: d908 bls.n 8000402 <__udivmoddi4+0x1ce>
+ 80003f0: 193c adds r4, r7, r4
+ 80003f2: f103 3eff add.w lr, r3, #4294967295 @ 0xffffffff
+ 80003f6: f080 8082 bcs.w 80004fe <__udivmoddi4+0x2ca>
+ 80003fa: 45a4 cmp ip, r4
+ 80003fc: d97f bls.n 80004fe <__udivmoddi4+0x2ca>
+ 80003fe: 3b02 subs r3, #2
+ 8000400: 443c add r4, r7
+ 8000402: ea43 4000 orr.w r0, r3, r0, lsl #16
+ 8000406: eba4 040c sub.w r4, r4, ip
+ 800040a: fba0 ec02 umull lr, ip, r0, r2
+ 800040e: 4564 cmp r4, ip
+ 8000410: 4673 mov r3, lr
+ 8000412: 46e1 mov r9, ip
+ 8000414: d362 bcc.n 80004dc <__udivmoddi4+0x2a8>
+ 8000416: d05f beq.n 80004d8 <__udivmoddi4+0x2a4>
+ 8000418: b15d cbz r5, 8000432 <__udivmoddi4+0x1fe>
+ 800041a: ebb8 0203 subs.w r2, r8, r3
+ 800041e: eb64 0409 sbc.w r4, r4, r9
+ 8000422: fa04 f606 lsl.w r6, r4, r6
+ 8000426: fa22 f301 lsr.w r3, r2, r1
+ 800042a: 431e orrs r6, r3
+ 800042c: 40cc lsrs r4, r1
+ 800042e: e9c5 6400 strd r6, r4, [r5]
+ 8000432: 2100 movs r1, #0
+ 8000434: e74f b.n 80002d6 <__udivmoddi4+0xa2>
+ 8000436: fbb1 fcf2 udiv ip, r1, r2
+ 800043a: 0c01 lsrs r1, r0, #16
+ 800043c: ea41 410e orr.w r1, r1, lr, lsl #16
+ 8000440: b280 uxth r0, r0
+ 8000442: ea40 4201 orr.w r2, r0, r1, lsl #16
+ 8000446: 463b mov r3, r7
+ 8000448: 4638 mov r0, r7
+ 800044a: 463c mov r4, r7
+ 800044c: 46b8 mov r8, r7
+ 800044e: 46be mov lr, r7
+ 8000450: 2620 movs r6, #32
+ 8000452: fbb1 f1f7 udiv r1, r1, r7
+ 8000456: eba2 0208 sub.w r2, r2, r8
+ 800045a: ea41 410c orr.w r1, r1, ip, lsl #16
+ 800045e: e766 b.n 800032e <__udivmoddi4+0xfa>
+ 8000460: 4601 mov r1, r0
+ 8000462: e718 b.n 8000296 <__udivmoddi4+0x62>
+ 8000464: 4610 mov r0, r2
+ 8000466: e72c b.n 80002c2 <__udivmoddi4+0x8e>
+ 8000468: f1c6 0220 rsb r2, r6, #32
+ 800046c: fa2e f302 lsr.w r3, lr, r2
+ 8000470: 40b7 lsls r7, r6
+ 8000472: 40b1 lsls r1, r6
+ 8000474: fa20 f202 lsr.w r2, r0, r2
+ 8000478: ea4f 4e17 mov.w lr, r7, lsr #16
+ 800047c: 430a orrs r2, r1
+ 800047e: fbb3 f8fe udiv r8, r3, lr
+ 8000482: b2bc uxth r4, r7
+ 8000484: fb0e 3318 mls r3, lr, r8, r3
+ 8000488: 0c11 lsrs r1, r2, #16
+ 800048a: ea41 4103 orr.w r1, r1, r3, lsl #16
+ 800048e: fb08 f904 mul.w r9, r8, r4
+ 8000492: 40b0 lsls r0, r6
+ 8000494: 4589 cmp r9, r1
+ 8000496: ea4f 4310 mov.w r3, r0, lsr #16
+ 800049a: b280 uxth r0, r0
+ 800049c: d93e bls.n 800051c <__udivmoddi4+0x2e8>
+ 800049e: 1879 adds r1, r7, r1
+ 80004a0: f108 3cff add.w ip, r8, #4294967295 @ 0xffffffff
+ 80004a4: d201 bcs.n 80004aa <__udivmoddi4+0x276>
+ 80004a6: 4589 cmp r9, r1
+ 80004a8: d81f bhi.n 80004ea <__udivmoddi4+0x2b6>
+ 80004aa: eba1 0109 sub.w r1, r1, r9
+ 80004ae: fbb1 f9fe udiv r9, r1, lr
+ 80004b2: fb09 f804 mul.w r8, r9, r4
+ 80004b6: fb0e 1119 mls r1, lr, r9, r1
+ 80004ba: b292 uxth r2, r2
+ 80004bc: ea42 4201 orr.w r2, r2, r1, lsl #16
+ 80004c0: 4542 cmp r2, r8
+ 80004c2: d229 bcs.n 8000518 <__udivmoddi4+0x2e4>
+ 80004c4: 18ba adds r2, r7, r2
+ 80004c6: f109 31ff add.w r1, r9, #4294967295 @ 0xffffffff
+ 80004ca: d2c4 bcs.n 8000456 <__udivmoddi4+0x222>
+ 80004cc: 4542 cmp r2, r8
+ 80004ce: d2c2 bcs.n 8000456 <__udivmoddi4+0x222>
+ 80004d0: f1a9 0102 sub.w r1, r9, #2
+ 80004d4: 443a add r2, r7
+ 80004d6: e7be b.n 8000456 <__udivmoddi4+0x222>
+ 80004d8: 45f0 cmp r8, lr
+ 80004da: d29d bcs.n 8000418 <__udivmoddi4+0x1e4>
+ 80004dc: ebbe 0302 subs.w r3, lr, r2
+ 80004e0: eb6c 0c07 sbc.w ip, ip, r7
+ 80004e4: 3801 subs r0, #1
+ 80004e6: 46e1 mov r9, ip
+ 80004e8: e796 b.n 8000418 <__udivmoddi4+0x1e4>
+ 80004ea: eba7 0909 sub.w r9, r7, r9
+ 80004ee: 4449 add r1, r9
+ 80004f0: f1a8 0c02 sub.w ip, r8, #2
+ 80004f4: fbb1 f9fe udiv r9, r1, lr
+ 80004f8: fb09 f804 mul.w r8, r9, r4
+ 80004fc: e7db b.n 80004b6 <__udivmoddi4+0x282>
+ 80004fe: 4673 mov r3, lr
+ 8000500: e77f b.n 8000402 <__udivmoddi4+0x1ce>
+ 8000502: 4650 mov r0, sl
+ 8000504: e766 b.n 80003d4 <__udivmoddi4+0x1a0>
+ 8000506: 4608 mov r0, r1
+ 8000508: e6fd b.n 8000306 <__udivmoddi4+0xd2>
+ 800050a: 443b add r3, r7
+ 800050c: 3a02 subs r2, #2
+ 800050e: e733 b.n 8000378 <__udivmoddi4+0x144>
+ 8000510: f1ac 0c02 sub.w ip, ip, #2
+ 8000514: 443b add r3, r7
+ 8000516: e71c b.n 8000352 <__udivmoddi4+0x11e>
+ 8000518: 4649 mov r1, r9
+ 800051a: e79c b.n 8000456 <__udivmoddi4+0x222>
+ 800051c: eba1 0109 sub.w r1, r1, r9
+ 8000520: 46c4 mov ip, r8
+ 8000522: fbb1 f9fe udiv r9, r1, lr
+ 8000526: fb09 f804 mul.w r8, r9, r4
+ 800052a: e7c4 b.n 80004b6 <__udivmoddi4+0x282>
+
+0800052c <__aeabi_idiv0>:
+ 800052c: 4770 bx lr
+ 800052e: bf00 nop
+
+08000530 :
+
+/**
+ * Enable DMA controller clock
+ */
+void MX_DMA_Init(void)
+{
+ 8000530: b580 push {r7, lr}
+ 8000532: b082 sub sp, #8
+ 8000534: af00 add r7, sp, #0
+
+ /* DMA controller clock enable */
+ __HAL_RCC_DMA1_CLK_ENABLE();
+ 8000536: 2300 movs r3, #0
+ 8000538: 607b str r3, [r7, #4]
+ 800053a: 4b2f ldr r3, [pc, #188] @ (80005f8 )
+ 800053c: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800053e: 4a2e ldr r2, [pc, #184] @ (80005f8 )
+ 8000540: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
+ 8000544: 6313 str r3, [r2, #48] @ 0x30
+ 8000546: 4b2c ldr r3, [pc, #176] @ (80005f8 )
+ 8000548: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800054a: f403 1300 and.w r3, r3, #2097152 @ 0x200000
+ 800054e: 607b str r3, [r7, #4]
+ 8000550: 687b ldr r3, [r7, #4]
+ __HAL_RCC_DMA2_CLK_ENABLE();
+ 8000552: 2300 movs r3, #0
+ 8000554: 603b str r3, [r7, #0]
+ 8000556: 4b28 ldr r3, [pc, #160] @ (80005f8 )
+ 8000558: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800055a: 4a27 ldr r2, [pc, #156] @ (80005f8 )
+ 800055c: f443 0380 orr.w r3, r3, #4194304 @ 0x400000
+ 8000560: 6313 str r3, [r2, #48] @ 0x30
+ 8000562: 4b25 ldr r3, [pc, #148] @ (80005f8 )
+ 8000564: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000566: f403 0380 and.w r3, r3, #4194304 @ 0x400000
+ 800056a: 603b str r3, [r7, #0]
+ 800056c: 683b ldr r3, [r7, #0]
+
+ /* DMA interrupt init */
+ /* DMA1_Stream0_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 0, 0);
+ 800056e: 2200 movs r2, #0
+ 8000570: 2100 movs r1, #0
+ 8000572: 200b movs r0, #11
+ 8000574: f001 fde3 bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn);
+ 8000578: 200b movs r0, #11
+ 800057a: f001 fdfc bl 8002176
+ /* DMA1_Stream2_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream2_IRQn, 0, 0);
+ 800057e: 2200 movs r2, #0
+ 8000580: 2100 movs r1, #0
+ 8000582: 200d movs r0, #13
+ 8000584: f001 fddb bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream2_IRQn);
+ 8000588: 200d movs r0, #13
+ 800058a: f001 fdf4 bl 8002176
+ /* DMA1_Stream4_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream4_IRQn, 0, 0);
+ 800058e: 2200 movs r2, #0
+ 8000590: 2100 movs r1, #0
+ 8000592: 200f movs r0, #15
+ 8000594: f001 fdd3 bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream4_IRQn);
+ 8000598: 200f movs r0, #15
+ 800059a: f001 fdec bl 8002176
+ /* DMA1_Stream5_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 0, 0);
+ 800059e: 2200 movs r2, #0
+ 80005a0: 2100 movs r1, #0
+ 80005a2: 2010 movs r0, #16
+ 80005a4: f001 fdcb bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn);
+ 80005a8: 2010 movs r0, #16
+ 80005aa: f001 fde4 bl 8002176
+ /* DMA1_Stream6_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0);
+ 80005ae: 2200 movs r2, #0
+ 80005b0: 2100 movs r1, #0
+ 80005b2: 2011 movs r0, #17
+ 80005b4: f001 fdc3 bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);
+ 80005b8: 2011 movs r0, #17
+ 80005ba: f001 fddc bl 8002176
+ /* DMA1_Stream7_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 0, 0);
+ 80005be: 2200 movs r2, #0
+ 80005c0: 2100 movs r1, #0
+ 80005c2: 202f movs r0, #47 @ 0x2f
+ 80005c4: f001 fdbb bl 800213e
+ HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn);
+ 80005c8: 202f movs r0, #47 @ 0x2f
+ 80005ca: f001 fdd4 bl 8002176
+ /* DMA2_Stream2_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA2_Stream2_IRQn, 0, 0);
+ 80005ce: 2200 movs r2, #0
+ 80005d0: 2100 movs r1, #0
+ 80005d2: 203a movs r0, #58 @ 0x3a
+ 80005d4: f001 fdb3 bl 800213e
+ HAL_NVIC_EnableIRQ(DMA2_Stream2_IRQn);
+ 80005d8: 203a movs r0, #58 @ 0x3a
+ 80005da: f001 fdcc bl 8002176
+ /* DMA2_Stream7_IRQn interrupt configuration */
+ HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 0, 0);
+ 80005de: 2200 movs r2, #0
+ 80005e0: 2100 movs r1, #0
+ 80005e2: 2046 movs r0, #70 @ 0x46
+ 80005e4: f001 fdab bl 800213e
+ HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn);
+ 80005e8: 2046 movs r0, #70 @ 0x46
+ 80005ea: f001 fdc4 bl 8002176
+
+}
+ 80005ee: bf00 nop
+ 80005f0: 3708 adds r7, #8
+ 80005f2: 46bd mov sp, r7
+ 80005f4: bd80 pop {r7, pc}
+ 80005f6: bf00 nop
+ 80005f8: 40023800 .word 0x40023800
+
+080005fc :
+ * Output
+ * EVENT_OUT
+ * EXTI
+*/
+void MX_GPIO_Init(void)
+{
+ 80005fc: b580 push {r7, lr}
+ 80005fe: b08a sub sp, #40 @ 0x28
+ 8000600: af00 add r7, sp, #0
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ 8000602: f107 0314 add.w r3, r7, #20
+ 8000606: 2200 movs r2, #0
+ 8000608: 601a str r2, [r3, #0]
+ 800060a: 605a str r2, [r3, #4]
+ 800060c: 609a str r2, [r3, #8]
+ 800060e: 60da str r2, [r3, #12]
+ 8000610: 611a str r2, [r3, #16]
+
+ /* GPIO Ports Clock Enable */
+ __HAL_RCC_GPIOH_CLK_ENABLE();
+ 8000612: 2300 movs r3, #0
+ 8000614: 613b str r3, [r7, #16]
+ 8000616: 4b45 ldr r3, [pc, #276] @ (800072c )
+ 8000618: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800061a: 4a44 ldr r2, [pc, #272] @ (800072c )
+ 800061c: f043 0380 orr.w r3, r3, #128 @ 0x80
+ 8000620: 6313 str r3, [r2, #48] @ 0x30
+ 8000622: 4b42 ldr r3, [pc, #264] @ (800072c )
+ 8000624: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000626: f003 0380 and.w r3, r3, #128 @ 0x80
+ 800062a: 613b str r3, [r7, #16]
+ 800062c: 693b ldr r3, [r7, #16]
+ __HAL_RCC_GPIOA_CLK_ENABLE();
+ 800062e: 2300 movs r3, #0
+ 8000630: 60fb str r3, [r7, #12]
+ 8000632: 4b3e ldr r3, [pc, #248] @ (800072c )
+ 8000634: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000636: 4a3d ldr r2, [pc, #244] @ (800072c )
+ 8000638: f043 0301 orr.w r3, r3, #1
+ 800063c: 6313 str r3, [r2, #48] @ 0x30
+ 800063e: 4b3b ldr r3, [pc, #236] @ (800072c )
+ 8000640: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000642: f003 0301 and.w r3, r3, #1
+ 8000646: 60fb str r3, [r7, #12]
+ 8000648: 68fb ldr r3, [r7, #12]
+ __HAL_RCC_GPIOC_CLK_ENABLE();
+ 800064a: 2300 movs r3, #0
+ 800064c: 60bb str r3, [r7, #8]
+ 800064e: 4b37 ldr r3, [pc, #220] @ (800072c )
+ 8000650: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000652: 4a36 ldr r2, [pc, #216] @ (800072c )
+ 8000654: f043 0304 orr.w r3, r3, #4
+ 8000658: 6313 str r3, [r2, #48] @ 0x30
+ 800065a: 4b34 ldr r3, [pc, #208] @ (800072c )
+ 800065c: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800065e: f003 0304 and.w r3, r3, #4
+ 8000662: 60bb str r3, [r7, #8]
+ 8000664: 68bb ldr r3, [r7, #8]
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ 8000666: 2300 movs r3, #0
+ 8000668: 607b str r3, [r7, #4]
+ 800066a: 4b30 ldr r3, [pc, #192] @ (800072c )
+ 800066c: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800066e: 4a2f ldr r2, [pc, #188] @ (800072c )
+ 8000670: f043 0302 orr.w r3, r3, #2
+ 8000674: 6313 str r3, [r2, #48] @ 0x30
+ 8000676: 4b2d ldr r3, [pc, #180] @ (800072c )
+ 8000678: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800067a: f003 0302 and.w r3, r3, #2
+ 800067e: 607b str r3, [r7, #4]
+ 8000680: 687b ldr r3, [r7, #4]
+ __HAL_RCC_GPIOD_CLK_ENABLE();
+ 8000682: 2300 movs r3, #0
+ 8000684: 603b str r3, [r7, #0]
+ 8000686: 4b29 ldr r3, [pc, #164] @ (800072c )
+ 8000688: 6b1b ldr r3, [r3, #48] @ 0x30
+ 800068a: 4a28 ldr r2, [pc, #160] @ (800072c )
+ 800068c: f043 0308 orr.w r3, r3, #8
+ 8000690: 6313 str r3, [r2, #48] @ 0x30
+ 8000692: 4b26 ldr r3, [pc, #152] @ (800072c )
+ 8000694: 6b1b ldr r3, [r3, #48] @ 0x30
+ 8000696: f003 0308 and.w r3, r3, #8
+ 800069a: 603b str r3, [r7, #0]
+ 800069c: 683b ldr r3, [r7, #0]
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9, GPIO_PIN_RESET);
+ 800069e: 2200 movs r2, #0
+ 80006a0: f44f 7170 mov.w r1, #960 @ 0x3c0
+ 80006a4: 4822 ldr r0, [pc, #136] @ (8000730 )
+ 80006a6: f002 fb2f bl 8002d08
+
+ /*Configure GPIO pin Output Level */
+ HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);
+ 80006aa: 2200 movs r2, #0
+ 80006ac: f44f 7180 mov.w r1, #256 @ 0x100
+ 80006b0: 4820 ldr r0, [pc, #128] @ (8000734 )
+ 80006b2: f002 fb29 bl 8002d08
+
+ /*Configure GPIO pins : PC4 PC5 */
+ GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
+ 80006b6: 2330 movs r3, #48 @ 0x30
+ 80006b8: 617b str r3, [r7, #20]
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ 80006ba: 2300 movs r3, #0
+ 80006bc: 61bb str r3, [r7, #24]
+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
+ 80006be: 2302 movs r3, #2
+ 80006c0: 61fb str r3, [r7, #28]
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ 80006c2: f107 0314 add.w r3, r7, #20
+ 80006c6: 4619 mov r1, r3
+ 80006c8: 4819 ldr r0, [pc, #100] @ (8000730 )
+ 80006ca: f002 f971 bl 80029b0
+
+ /*Configure GPIO pins : PB0 PB1 PB2 PB10 */
+ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_10;
+ 80006ce: f240 4307 movw r3, #1031 @ 0x407
+ 80006d2: 617b str r3, [r7, #20]
+ GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
+ 80006d4: 2300 movs r3, #0
+ 80006d6: 61bb str r3, [r7, #24]
+ GPIO_InitStruct.Pull = GPIO_PULLDOWN;
+ 80006d8: 2302 movs r3, #2
+ 80006da: 61fb str r3, [r7, #28]
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ 80006dc: f107 0314 add.w r3, r7, #20
+ 80006e0: 4619 mov r1, r3
+ 80006e2: 4815 ldr r0, [pc, #84] @ (8000738 )
+ 80006e4: f002 f964 bl 80029b0
+
+ /*Configure GPIO pins : PC6 PC7 PC8 PC9 */
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9;
+ 80006e8: f44f 7370 mov.w r3, #960 @ 0x3c0
+ 80006ec: 617b str r3, [r7, #20]
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ 80006ee: 2301 movs r3, #1
+ 80006f0: 61bb str r3, [r7, #24]
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ 80006f2: 2300 movs r3, #0
+ 80006f4: 61fb str r3, [r7, #28]
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ 80006f6: 2300 movs r3, #0
+ 80006f8: 623b str r3, [r7, #32]
+ HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+ 80006fa: f107 0314 add.w r3, r7, #20
+ 80006fe: 4619 mov r1, r3
+ 8000700: 480b ldr r0, [pc, #44] @ (8000730 )
+ 8000702: f002 f955 bl 80029b0
+
+ /*Configure GPIO pin : PA8 */
+ GPIO_InitStruct.Pin = GPIO_PIN_8;
+ 8000706: f44f 7380 mov.w r3, #256 @ 0x100
+ 800070a: 617b str r3, [r7, #20]
+ GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+ 800070c: 2301 movs r3, #1
+ 800070e: 61bb str r3, [r7, #24]
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ 8000710: 2300 movs r3, #0
+ 8000712: 61fb str r3, [r7, #28]
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+ 8000714: 2300 movs r3, #0
+ 8000716: 623b str r3, [r7, #32]
+ HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+ 8000718: f107 0314 add.w r3, r7, #20
+ 800071c: 4619 mov r1, r3
+ 800071e: 4805 ldr r0, [pc, #20] @ (8000734 )
+ 8000720: f002 f946 bl 80029b0
+
+}
+ 8000724: bf00 nop
+ 8000726: 3728 adds r7, #40 @ 0x28
+ 8000728: 46bd mov sp, r7
+ 800072a: bd80 pop {r7, pc}
+ 800072c: 40023800 .word 0x40023800
+ 8000730: 40020800 .word 0x40020800
+ 8000734: 40020000 .word 0x40020000
+ 8000738: 40020400 .word 0x40020400
+
+0800073c :
+
+I2C_HandleTypeDef hi2c1;
+
+/* I2C1 init function */
+void MX_I2C1_Init(void)
+{
+ 800073c: b580 push {r7, lr}
+ 800073e: af00 add r7, sp, #0
+ /* USER CODE END I2C1_Init 0 */
+
+ /* USER CODE BEGIN I2C1_Init 1 */
+
+ /* USER CODE END I2C1_Init 1 */
+ hi2c1.Instance = I2C1;
+ 8000740: 4b12 ldr r3, [pc, #72] @ (800078c )
+ 8000742: 4a13 ldr r2, [pc, #76] @ (8000790 )
+ 8000744: 601a str r2, [r3, #0]
+ hi2c1.Init.ClockSpeed = 100000;
+ 8000746: 4b11 ldr r3, [pc, #68] @ (800078c )
+ 8000748: 4a12 ldr r2, [pc, #72] @ (8000794 )
+ 800074a: 605a str r2, [r3, #4]
+ hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
+ 800074c: 4b0f ldr r3, [pc, #60] @ (800078c )
+ 800074e: 2200 movs r2, #0
+ 8000750: 609a str r2, [r3, #8]
+ hi2c1.Init.OwnAddress1 = 0;
+ 8000752: 4b0e ldr r3, [pc, #56] @ (800078c )
+ 8000754: 2200 movs r2, #0
+ 8000756: 60da str r2, [r3, #12]
+ hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
+ 8000758: 4b0c ldr r3, [pc, #48] @ (800078c )
+ 800075a: f44f 4280 mov.w r2, #16384 @ 0x4000
+ 800075e: 611a str r2, [r3, #16]
+ hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
+ 8000760: 4b0a ldr r3, [pc, #40] @ (800078c )
+ 8000762: 2200 movs r2, #0
+ 8000764: 615a str r2, [r3, #20]
+ hi2c1.Init.OwnAddress2 = 0;
+ 8000766: 4b09 ldr r3, [pc, #36] @ (800078c )
+ 8000768: 2200 movs r2, #0
+ 800076a: 619a str r2, [r3, #24]
+ hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
+ 800076c: 4b07 ldr r3, [pc, #28] @ (800078c )
+ 800076e: 2200 movs r2, #0
+ 8000770: 61da str r2, [r3, #28]
+ hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
+ 8000772: 4b06 ldr r3, [pc, #24] @ (800078c )
+ 8000774: 2200 movs r2, #0
+ 8000776: 621a str r2, [r3, #32]
+ if (HAL_I2C_Init(&hi2c1) != HAL_OK)
+ 8000778: 4804 ldr r0, [pc, #16] @ (800078c )
+ 800077a: f002 fadf bl 8002d3c
+ 800077e: 4603 mov r3, r0
+ 8000780: 2b00 cmp r3, #0
+ 8000782: d001 beq.n 8000788
+ {
+ Error_Handler();
+ 8000784: f000 fd60 bl 8001248
+ }
+ /* USER CODE BEGIN I2C1_Init 2 */
+
+ /* USER CODE END I2C1_Init 2 */
+
+}
+ 8000788: bf00 nop
+ 800078a: bd80 pop {r7, pc}
+ 800078c: 200001bc .word 0x200001bc
+ 8000790: 40005400 .word 0x40005400
+ 8000794: 000186a0 .word 0x000186a0
+
+08000798 :
+
+void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
+{
+ 8000798: b580 push {r7, lr}
+ 800079a: b08a sub sp, #40 @ 0x28
+ 800079c: af00 add r7, sp, #0
+ 800079e: 6078 str r0, [r7, #4]
+
+ GPIO_InitTypeDef GPIO_InitStruct = {0};
+ 80007a0: f107 0314 add.w r3, r7, #20
+ 80007a4: 2200 movs r2, #0
+ 80007a6: 601a str r2, [r3, #0]
+ 80007a8: 605a str r2, [r3, #4]
+ 80007aa: 609a str r2, [r3, #8]
+ 80007ac: 60da str r2, [r3, #12]
+ 80007ae: 611a str r2, [r3, #16]
+ if(i2cHandle->Instance==I2C1)
+ 80007b0: 687b ldr r3, [r7, #4]
+ 80007b2: 681b ldr r3, [r3, #0]
+ 80007b4: 4a19 ldr r2, [pc, #100] @ (800081c )
+ 80007b6: 4293 cmp r3, r2
+ 80007b8: d12b bne.n 8000812
+ {
+ /* USER CODE BEGIN I2C1_MspInit 0 */
+
+ /* USER CODE END I2C1_MspInit 0 */
+
+ __HAL_RCC_GPIOB_CLK_ENABLE();
+ 80007ba: 2300 movs r3, #0
+ 80007bc: 613b str r3, [r7, #16]
+ 80007be: 4b18 ldr r3, [pc, #96] @ (8000820 )
+ 80007c0: 6b1b ldr r3, [r3, #48] @ 0x30
+ 80007c2: 4a17 ldr r2, [pc, #92] @ (8000820 )
+ 80007c4: f043 0302 orr.w r3, r3, #2
+ 80007c8: 6313 str r3, [r2, #48] @ 0x30
+ 80007ca: 4b15 ldr r3, [pc, #84] @ (8000820 )
+ 80007cc: 6b1b ldr r3, [r3, #48] @ 0x30
+ 80007ce: f003 0302 and.w r3, r3, #2
+ 80007d2: 613b str r3, [r7, #16]
+ 80007d4: 693b ldr r3, [r7, #16]
+ /**I2C1 GPIO Configuration
+ PB6 ------> I2C1_SCL
+ PB7 ------> I2C1_SDA
+ */
+ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+ 80007d6: 23c0 movs r3, #192 @ 0xc0
+ 80007d8: 617b str r3, [r7, #20]
+ GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
+ 80007da: 2312 movs r3, #18
+ 80007dc: 61bb str r3, [r7, #24]
+ GPIO_InitStruct.Pull = GPIO_NOPULL;
+ 80007de: 2300 movs r3, #0
+ 80007e0: 61fb str r3, [r7, #28]
+ GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+ 80007e2: 2303 movs r3, #3
+ 80007e4: 623b str r3, [r7, #32]
+ GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
+ 80007e6: 2304 movs r3, #4
+ 80007e8: 627b str r3, [r7, #36] @ 0x24
+ HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ 80007ea: f107 0314 add.w r3, r7, #20
+ 80007ee: 4619 mov r1, r3
+ 80007f0: 480c ldr r0, [pc, #48] @ (8000824 )
+ 80007f2: f002 f8dd bl 80029b0
+
+ /* I2C1 clock enable */
+ __HAL_RCC_I2C1_CLK_ENABLE();
+ 80007f6: 2300 movs r3, #0
+ 80007f8: 60fb str r3, [r7, #12]
+ 80007fa: 4b09 ldr r3, [pc, #36] @ (8000820 )
+ 80007fc: 6c1b ldr r3, [r3, #64] @ 0x40
+ 80007fe: 4a08 ldr r2, [pc, #32] @ (8000820 )
+ 8000800: f443 1300 orr.w r3, r3, #2097152 @ 0x200000
+ 8000804: 6413 str r3, [r2, #64] @ 0x40
+ 8000806: 4b06 ldr r3, [pc, #24] @ (8000820 )
+ 8000808: 6c1b ldr r3, [r3, #64] @ 0x40
+ 800080a: f403 1300 and.w r3, r3, #2097152 @ 0x200000
+ 800080e: 60fb str r3, [r7, #12]
+ 8000810: 68fb ldr r3, [r7, #12]
+ /* USER CODE BEGIN I2C1_MspInit 1 */
+
+ /* USER CODE END I2C1_MspInit 1 */
+ }
+}
+ 8000812: bf00 nop
+ 8000814: 3728 adds r7, #40 @ 0x28
+ 8000816: 46bd mov sp, r7
+ 8000818: bd80 pop {r7, pc}
+ 800081a: bf00 nop
+ 800081c: 40005400 .word 0x40005400
+ 8000820: 40023800 .word 0x40023800
+ 8000824: 40020400 .word 0x40020400
+
+08000828 :
+ volatile uint8_t tail; // accessed in ISR
+ volatile uint8_t count; // optional, only if needed
+} PacketQueue;
+
+// Initialize
+void pq_init(PacketQueue *q){
+ 8000828: b480 push {r7}
+ 800082a: b083 sub sp, #12
+ 800082c: af00 add r7, sp, #0
+ 800082e: 6078 str r0, [r7, #4]
+ q->head = 0;
+ 8000830: 687b ldr r3, [r7, #4]
+ 8000832: 2200 movs r2, #0
+ 8000834: f883 2180 strb.w r2, [r3, #384] @ 0x180
+ q->tail = 0;
+ 8000838: 687b ldr r3, [r7, #4]
+ 800083a: 2200 movs r2, #0
+ 800083c: f883 2181 strb.w r2, [r3, #385] @ 0x181
+ q->count = 0;
+ 8000840: 687b ldr r3, [r7, #4]
+ 8000842: 2200 movs r2, #0
+ 8000844: f883 2182 strb.w r2, [r3, #386] @ 0x182
+}
+ 8000848: bf00 nop
+ 800084a: 370c adds r7, #12
+ 800084c: 46bd mov sp, r7
+ 800084e: f85d 7b04 ldr.w r7, [sp], #4
+ 8000852: 4770 bx lr
+
+08000854 :
+
+// Called from ISR
+bool pq_push(PacketQueue *q, const uint8_t packet[PACKET_SIZE]){
+ 8000854: b580 push {r7, lr}
+ 8000856: b084 sub sp, #16
+ 8000858: af00 add r7, sp, #0
+ 800085a: 6078 str r0, [r7, #4]
+ 800085c: 6039 str r1, [r7, #0]
+ uint8_t nextTail = (q->tail + 1) % QUEUE_CAPACITY;
+ 800085e: 687b ldr r3, [r7, #4]
+ 8000860: f893 3181 ldrb.w r3, [r3, #385] @ 0x181
+ 8000864: b2db uxtb r3, r3
+ 8000866: 3301 adds r3, #1
+ 8000868: 425a negs r2, r3
+ 800086a: f003 031f and.w r3, r3, #31
+ 800086e: f002 021f and.w r2, r2, #31
+ 8000872: bf58 it pl
+ 8000874: 4253 negpl r3, r2
+ 8000876: 73fb strb r3, [r7, #15]
+ if(nextTail == q->head) return false; // queue full
+ 8000878: 687b ldr r3, [r7, #4]
+ 800087a: f893 3180 ldrb.w r3, [r3, #384] @ 0x180
+ 800087e: b2db uxtb r3, r3
+ 8000880: 7bfa ldrb r2, [r7, #15]
+ 8000882: 429a cmp r2, r3
+ 8000884: d101 bne.n 800088a
+ 8000886: 2300 movs r3, #0
+ 8000888: e014 b.n 80008b4
+
+ memcpy(q->data[q->tail], packet, PACKET_SIZE);
+ 800088a: 687b ldr r3, [r7, #4]
+ 800088c: f893 3181 ldrb.w r3, [r3, #385] @ 0x181
+ 8000890: b2db uxtb r3, r3
+ 8000892: 461a mov r2, r3
+ 8000894: 4613 mov r3, r2
+ 8000896: 005b lsls r3, r3, #1
+ 8000898: 4413 add r3, r2
+ 800089a: 009b lsls r3, r3, #2
+ 800089c: 687a ldr r2, [r7, #4]
+ 800089e: 4413 add r3, r2
+ 80008a0: 220c movs r2, #12
+ 80008a2: 6839 ldr r1, [r7, #0]
+ 80008a4: 4618 mov r0, r3
+ 80008a6: f00a fd7f bl 800b3a8
+ q->tail = nextTail;
+ 80008aa: 687b ldr r3, [r7, #4]
+ 80008ac: 7bfa ldrb r2, [r7, #15]
+ 80008ae: f883 2181 strb.w r2, [r3, #385] @ 0x181
+ return true;
+ 80008b2: 2301 movs r3, #1
+}
+ 80008b4: 4618 mov r0, r3
+ 80008b6: 3710 adds r7, #16
+ 80008b8: 46bd mov sp, r7
+ 80008ba: bd80 pop {r7, pc}
+
+080008bc :
+
+// Called from main
+bool pq_pop(PacketQueue *q, uint8_t out_packet[PACKET_SIZE]){
+ 80008bc: b580 push {r7, lr}
+ 80008be: b082 sub sp, #8
+ 80008c0: af00 add r7, sp, #0
+ 80008c2: 6078 str r0, [r7, #4]
+ 80008c4: 6039 str r1, [r7, #0]
+ if(q->head == q->tail) return false; // queue empty
+ 80008c6: 687b ldr r3, [r7, #4]
+ 80008c8: f893 3180 ldrb.w r3, [r3, #384] @ 0x180
+ 80008cc: b2da uxtb r2, r3
+ 80008ce: 687b ldr r3, [r7, #4]
+ 80008d0: f893 3181 ldrb.w r3, [r3, #385] @ 0x181
+ 80008d4: b2db uxtb r3, r3
+ 80008d6: 429a cmp r2, r3
+ 80008d8: d101 bne.n 80008de
+ 80008da: 2300 movs r3, #0
+ 80008dc: e020 b.n 8000920
+
+ memcpy(out_packet, q->data[q->head], PACKET_SIZE);
+ 80008de: 687b ldr r3, [r7, #4]
+ 80008e0: f893 3180 ldrb.w r3, [r3, #384] @ 0x180
+ 80008e4: b2db uxtb r3, r3
+ 80008e6: 461a mov r2, r3
+ 80008e8: 4613 mov r3, r2
+ 80008ea: 005b lsls r3, r3, #1
+ 80008ec: 4413 add r3, r2
+ 80008ee: 009b lsls r3, r3, #2
+ 80008f0: 687a ldr r2, [r7, #4]
+ 80008f2: 4413 add r3, r2
+ 80008f4: 220c movs r2, #12
+ 80008f6: 4619 mov r1, r3
+ 80008f8: 6838 ldr r0, [r7, #0]
+ 80008fa: f00a fd55 bl 800b3a8
+ q->head = (q->head + 1) % QUEUE_CAPACITY;
+ 80008fe: 687b ldr r3, [r7, #4]
+ 8000900: f893 3180 ldrb.w r3, [r3, #384] @ 0x180
+ 8000904: b2db uxtb r3, r3
+ 8000906: 3301 adds r3, #1
+ 8000908: 425a negs r2, r3
+ 800090a: f003 031f and.w r3, r3, #31
+ 800090e: f002 021f and.w r2, r2, #31
+ 8000912: bf58 it pl
+ 8000914: 4253 negpl r3, r2
+ 8000916: b2da uxtb r2, r3
+ 8000918: 687b ldr r3, [r7, #4]
+ 800091a: f883 2180 strb.w r2, [r3, #384] @ 0x180
+ return true;
+ 800091e: 2301 movs r3, #1
+}
+ 8000920: 4618 mov r0, r3
+ 8000922: 3708 adds r7, #8
+ 8000924: 46bd mov sp, r7
+ 8000926: bd80 pop {r7, pc}
+
+08000928 :
+/**
+ * @brief The application entry point.
+ * @retval int
+ */
+int main(void)
+{
+ 8000928: b580 push {r7, lr}
+ 800092a: b088 sub sp, #32
+ 800092c: af00 add r7, sp, #0
+ /* USER CODE END 1 */
+
+ /* MCU Configuration--------------------------------------------------------*/
+
+ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
+ HAL_Init();
+ 800092e: f001 fa95 bl 8001e5c
+ /* USER CODE BEGIN Init */
+
+ /* USER CODE END Init */
+
+ /* Configure the system clock */
+ SystemClock_Config();
+ 8000932: f000 f97b bl 8000c2c
+ /* USER CODE BEGIN SysInit */
+
+ /* USER CODE END SysInit */
+
+ /* Initialize all configured peripherals */
+ MX_GPIO_Init();
+ 8000936: f7ff fe61 bl 80005fc
+ MX_DMA_Init();MX_PWM_Init();
+ 800093a: f7ff fdf9 bl 8000530
+ 800093e: f000 fc89 bl 8001254
+ MX_TIM2_Init();
+ 8000942: f000 fdab bl 800149c
+ MX_TIM3_Init();
+ 8000946: f000 fe01 bl 800154c
+ MX_UART4_Init();
+ 800094a: f000 fef3 bl 8001734
+ MX_UART5_Init();
+ 800094e: f000 ff1b bl 8001788
+ MX_USART1_UART_Init();
+ 8000952: f000 ff43 bl 80017dc
+ MX_USART2_UART_Init();
+ 8000956: f000 ff6b bl 8001830
+ MX_I2C1_Init();
+ 800095a: f7ff feef bl 800073c
+ MX_USB_DEVICE_Init();
+ 800095e: f00a f849 bl 800a9f4
+ MX_PWM_Init();
+ 8000962: f000 fc77 bl 8001254
+ /* USER CODE BEGIN 2 */
+
+ //Enable UART RX DMA for all ports
+ HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage));
+ 8000966: 2210 movs r2, #16
+ 8000968: 4958 ldr r1, [pc, #352] @ (8000acc )
+ 800096a: 4859 ldr r0, [pc, #356] @ (8000ad0 )
+ 800096c: f005 fe48 bl 8006600
+ HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage));
+ 8000970: 2210 movs r2, #16
+ 8000972: 4958 ldr r1, [pc, #352] @ (8000ad4 )
+ 8000974: 4858 ldr r0, [pc, #352] @ (8000ad8 )
+ 8000976: f005 fe43 bl 8006600
+ HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage));
+ 800097a: 2210 movs r2, #16
+ 800097c: 4957 ldr r1, [pc, #348] @ (8000adc )
+ 800097e: 4858 ldr r0, [pc, #352] @ (8000ae0 )
+ 8000980: f005 fe3e bl 8006600
+ HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage));
+ 8000984: 2210 movs r2, #16
+ 8000986: 4957 ldr r1, [pc, #348] @ (8000ae4 )
+ 8000988: 4857 ldr r0, [pc, #348] @ (8000ae8 )
+ 800098a: f005 fe39 bl 8006600
+
+ // Start TIM3 encoder (PA6/PA7) so we can read encoder delta
+ HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
+ 800098e: 213c movs r1, #60 @ 0x3c
+ 8000990: 4856 ldr r0, [pc, #344] @ (8000aec )
+ 8000992: f005 f8c5 bl 8005b20
+ LAST_ENCODER_COUNT = __HAL_TIM_GET_COUNTER(&htim3);
+ 8000996: 4b55 ldr r3, [pc, #340] @ (8000aec )
+ 8000998: 681b ldr r3, [r3, #0]
+ 800099a: 6a5b ldr r3, [r3, #36] @ 0x24
+ 800099c: 461a mov r2, r3
+ 800099e: 4b54 ldr r3, [pc, #336] @ (8000af0 )
+ 80009a0: 601a str r2, [r3, #0]
+
+ //Prealloc Kestate matrix
+ memset(KEYSTATE, 0, sizeof(KEYSTATE));
+ 80009a2: 221e movs r2, #30
+ 80009a4: 2100 movs r1, #0
+ 80009a6: 4853 ldr r0, [pc, #332] @ (8000af4 )
+ 80009a8: f00a fcd2 bl 800b350
+ pq_init(&huart1q);
+ 80009ac: 4852 ldr r0, [pc, #328] @ (8000af8 )
+ 80009ae: f7ff ff3b bl 8000828
+ pq_init(&huart2q);
+ 80009b2: 4852 ldr r0, [pc, #328] @ (8000afc )
+ 80009b4: f7ff ff38 bl 8000828
+ pq_init(&huart4q);
+ 80009b8: 4851 ldr r0, [pc, #324] @ (8000b00 )
+ 80009ba: f7ff ff35 bl 8000828
+ pq_init(&huart5q);
+ 80009be: 4851 ldr r0, [pc, #324] @ (8000b04 )
+ 80009c0: f7ff ff32 bl 8000828
+
+ PWM_Start();
+ 80009c4: f000 fc74 bl 80012b0
+
+ /* Infinite loop */
+ /* USER CODE BEGIN WHILE */
+ while (1)
+ {
+ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67);
+ 80009c8: 4b4f ldr r3, [pc, #316] @ (8000b08 )
+ 80009ca: 681b ldr r3, [r3, #0]
+ 80009cc: 2243 movs r2, #67 @ 0x43
+ 80009ce: 635a str r2, [r3, #52] @ 0x34
+ switch (MODE){
+ 80009d0: 4b4e ldr r3, [pc, #312] @ (8000b0c )
+ 80009d2: 781b ldrb r3, [r3, #0]
+ 80009d4: b2db uxtb r3, r3
+ 80009d6: 2b02 cmp r3, #2
+ 80009d8: d006 beq.n 80009e8
+ 80009da: 2b02 cmp r3, #2
+ 80009dc: dc6e bgt.n 8000abc
+ 80009de: 2b00 cmp r3, #0
+ 80009e0: d027 beq.n 8000a32
+ 80009e2: 2b01 cmp r3, #1
+ 80009e4: d05c beq.n 8000aa0
+ encoderProcess();
+ USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT));
+ break;
+
+ default:
+ break;
+ 80009e6: e069 b.n 8000abc
+ KEYSTATE_CHANGED_FLAG = 1;
+ 80009e8: 4b49 ldr r3, [pc, #292] @ (8000b10 )
+ 80009ea: 2201 movs r2, #1
+ 80009ec: 701a strb r2, [r3, #0]
+ resetReport();
+ 80009ee: f000 fc1f bl 8001230
+ matrixScan();
+ 80009f2: f000 fb47 bl 8001084
+ mergeChild();
+ 80009f6: f000 f895 bl 8000b24
+ encoderProcess();
+ 80009fa: f000 fbbb bl 8001174
+ if(KEYSTATE_CHANGED_FLAG == 1){
+ 80009fe: 4b44 ldr r3, [pc, #272] @ (8000b10 )
+ 8000a00: 781b ldrb r3, [r3, #0]
+ 8000a02: 2b01 cmp r3, #1
+ 8000a04: d15c bne.n 8000ac0
+ UARTREPORT.DEPTH = DEPTH;
+ 8000a06: 4b43 ldr r3, [pc, #268] @ (8000b14 )
+ 8000a08: 881b ldrh r3, [r3, #0]
+ 8000a0a: 823b strh r3, [r7, #16]
+ UARTREPORT.TYPE = 0xEE;
+ 8000a0c: 23ee movs r3, #238 @ 0xee
+ 8000a0e: 827b strh r3, [r7, #18]
+ memcpy(UARTREPORT.KEYPRESS, REPORT.KEYPRESS, sizeof(UARTREPORT.KEYPRESS));
+ 8000a10: 4a41 ldr r2, [pc, #260] @ (8000b18 )
+ 8000a12: f107 0314 add.w r3, r7, #20
+ 8000a16: 3202 adds r2, #2
+ 8000a18: 6810 ldr r0, [r2, #0]
+ 8000a1a: 6851 ldr r1, [r2, #4]
+ 8000a1c: 6892 ldr r2, [r2, #8]
+ 8000a1e: c307 stmia r3!, {r0, r1, r2}
+ HAL_UART_Transmit_DMA(PARENT, (uint8_t*)&UARTREPORT, sizeof(UARTREPORT));
+ 8000a20: 4b3e ldr r3, [pc, #248] @ (8000b1c )
+ 8000a22: 681b ldr r3, [r3, #0]
+ 8000a24: f107 0110 add.w r1, r7, #16
+ 8000a28: 2210 movs r2, #16
+ 8000a2a: 4618 mov r0, r3
+ 8000a2c: f005 fd6c bl 8006508
+ break;
+ 8000a30: e046 b.n 8000ac0
+ if(hUsbDeviceFS.dev_state == USBD_STATE_CONFIGURED){
+ 8000a32: 4b3b ldr r3, [pc, #236] @ (8000b20 )
+ 8000a34: f893 329c ldrb.w r3, [r3, #668] @ 0x29c
+ 8000a38: b2db uxtb r3, r3
+ 8000a3a: 2b03 cmp r3, #3
+ 8000a3c: d106 bne.n 8000a4c
+ MODE = MODE_MAINBOARD;
+ 8000a3e: 4b33 ldr r3, [pc, #204] @ (8000b0c )
+ 8000a40: 2201 movs r2, #1
+ 8000a42: 701a strb r2, [r3, #0]
+ DEPTH = 0;
+ 8000a44: 4b33 ldr r3, [pc, #204] @ (8000b14 )
+ 8000a46: 2200 movs r2, #0
+ 8000a48: 801a strh r2, [r3, #0]
+ break;
+ 8000a4a: e03a b.n 8000ac2
+ REQ.DEPTH = 0;
+ 8000a4c: 2300 movs r3, #0
+ 8000a4e: 803b strh r3, [r7, #0]
+ REQ.TYPE = 0xFF; //Message code for request is 0xFF
+ 8000a50: 23ff movs r3, #255 @ 0xff
+ 8000a52: 807b strh r3, [r7, #2]
+ memset(REQ.KEYPRESS, 0, sizeof(REQ.KEYPRESS));
+ 8000a54: 463b mov r3, r7
+ 8000a56: 3304 adds r3, #4
+ 8000a58: 220c movs r2, #12
+ 8000a5a: 2100 movs r1, #0
+ 8000a5c: 4618 mov r0, r3
+ 8000a5e: f00a fc77 bl 800b350
+ HAL_UART_Transmit_DMA(&huart1, (uint8_t*)&REQ, sizeof(REQ));
+ 8000a62: 463b mov r3, r7
+ 8000a64: 2210 movs r2, #16
+ 8000a66: 4619 mov r1, r3
+ 8000a68: 4819 ldr r0, [pc, #100] @ (8000ad0 )
+ 8000a6a: f005 fd4d bl 8006508
+ HAL_UART_Transmit_DMA(&huart2, (uint8_t*)&REQ, sizeof(REQ));
+ 8000a6e: 463b mov r3, r7
+ 8000a70: 2210 movs r2, #16
+ 8000a72: 4619 mov r1, r3
+ 8000a74: 4818 ldr r0, [pc, #96] @ (8000ad8 )
+ 8000a76: f005 fd47 bl 8006508
+ HAL_UART_Transmit_DMA(&huart4, (uint8_t*)&REQ, sizeof(REQ));
+ 8000a7a: 463b mov r3, r7
+ 8000a7c: 2210 movs r2, #16
+ 8000a7e: 4619 mov r1, r3
+ 8000a80: 4817 ldr r0, [pc, #92] @ (8000ae0 )
+ 8000a82: f005 fd41 bl 8006508
+ HAL_UART_Transmit_DMA(&huart5, (uint8_t*)&REQ, sizeof(REQ));
+ 8000a86: 463b mov r3, r7
+ 8000a88: 2210 movs r2, #16
+ 8000a8a: 4619 mov r1, r3
+ 8000a8c: 4816 ldr r0, [pc, #88] @ (8000ae8 )
+ 8000a8e: f005 fd3b bl 8006508
+ HAL_Delay(500);
+ 8000a92: f44f 70fa mov.w r0, #500 @ 0x1f4
+ 8000a96: f001 fa53 bl 8001f40
+ findBestParent(); //So true...
+ 8000a9a: f000 f9db bl 8000e54
+ break;
+ 8000a9e: e010 b.n 8000ac2
+ resetReport();
+ 8000aa0: f000 fbc6 bl 8001230
+ matrixScan();//Something related to this making the key stick. Likely due to race conditions
+ 8000aa4: f000 faee bl 8001084
+ mergeChild();
+ 8000aa8: f000 f83c bl 8000b24
+ encoderProcess();
+ 8000aac: f000 fb62 bl 8001174
+ USBD_HID_SendReport(&hUsbDeviceFS, (uint8_t*)&REPORT, sizeof(REPORT));
+ 8000ab0: 220e movs r2, #14
+ 8000ab2: 4919 ldr r1, [pc, #100] @ (8000b18 )
+ 8000ab4: 481a ldr r0, [pc, #104] @ (8000b20 )
+ 8000ab6: f008 fbd1 bl 800925c
+ break;
+ 8000aba: e002 b.n 8000ac2
+ break;
+ 8000abc: bf00 nop
+ 8000abe: e000 b.n 8000ac2
+ break;
+ 8000ac0: bf00 nop
+ }
+
+ HAL_Delay(20);
+ 8000ac2: 2014 movs r0, #20
+ 8000ac4: f001 fa3c bl 8001f40
+ __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 67);
+ 8000ac8: e77e b.n 80009c8
+ 8000aca: bf00 nop
+ 8000acc: 20000230 .word 0x20000230
+ 8000ad0: 200009f0 .word 0x200009f0
+ 8000ad4: 20000240 .word 0x20000240
+ 8000ad8: 20000a38 .word 0x20000a38
+ 8000adc: 20000250 .word 0x20000250
+ 8000ae0: 20000960 .word 0x20000960
+ 8000ae4: 20000220 .word 0x20000220
+ 8000ae8: 200009a8 .word 0x200009a8
+ 8000aec: 20000918 .word 0x20000918
+ 8000af0: 2000028c .word 0x2000028c
+ 8000af4: 2000026c .word 0x2000026c
+ 8000af8: 200002c0 .word 0x200002c0
+ 8000afc: 20000444 .word 0x20000444
+ 8000b00: 200005c8 .word 0x200005c8
+ 8000b04: 2000074c .word 0x2000074c
+ 8000b08: 200008d0 .word 0x200008d0
+ 8000b0c: 2000028a .word 0x2000028a
+ 8000b10: 20000268 .word 0x20000268
+ 8000b14: 20000260 .word 0x20000260
+ 8000b18: 20000210 .word 0x20000210
+ 8000b1c: 20000264 .word 0x20000264
+ 8000b20: 20000d88 .word 0x20000d88
+
+08000b24 :
+ /* USER CODE BEGIN 3 */
+ }
+ /* USER CODE END 3 */
+}
+
+void mergeChild(){
+ 8000b24: b590 push {r4, r7, lr}
+ 8000b26: b087 sub sp, #28
+ 8000b28: af00 add r7, sp, #0
+ uint8_t packet[12];
+ if (pq_pop(&huart1q, packet)) {
+ 8000b2a: 1d3b adds r3, r7, #4
+ 8000b2c: 4619 mov r1, r3
+ 8000b2e: 4838 ldr r0, [pc, #224] @ (8000c10 )
+ 8000b30: f7ff fec4 bl 80008bc
+ 8000b34: 4603 mov r3, r0
+ 8000b36: 2b00 cmp r3, #0
+ 8000b38: d008 beq.n 8000b4c
+ memcpy(UART_KEYSTATE[1], packet, 12);
+ 8000b3a: 4b36 ldr r3, [pc, #216] @ (8000c14 )
+ 8000b3c: 330c adds r3, #12
+ 8000b3e: 1d3a adds r2, r7, #4
+ 8000b40: ca07 ldmia r2, {r0, r1, r2}
+ 8000b42: e883 0007 stmia.w r3, {r0, r1, r2}
+ KEYSTATE_CHANGED_FLAG = 1;
+ 8000b46: 4b34 ldr r3, [pc, #208] @ (8000c18 )
+ 8000b48: 2201 movs r2, #1
+ 8000b4a: 701a strb r2, [r3, #0]
+ }
+ if (pq_pop(&huart2q, packet)) {
+ 8000b4c: 1d3b adds r3, r7, #4
+ 8000b4e: 4619 mov r1, r3
+ 8000b50: 4832 ldr r0, [pc, #200] @ (8000c1c )
+ 8000b52: f7ff feb3 bl 80008bc
+ 8000b56: 4603 mov r3, r0
+ 8000b58: 2b00 cmp r3, #0
+ 8000b5a: d008 beq.n 8000b6e
+ memcpy(UART_KEYSTATE[2], packet, 12);
+ 8000b5c: 4b2d ldr r3, [pc, #180] @ (8000c14 )
+ 8000b5e: 3318 adds r3, #24
+ 8000b60: 1d3a adds r2, r7, #4
+ 8000b62: ca07 ldmia r2, {r0, r1, r2}
+ 8000b64: e883 0007 stmia.w r3, {r0, r1, r2}
+ KEYSTATE_CHANGED_FLAG = 1;
+ 8000b68: 4b2b ldr r3, [pc, #172] @ (8000c18 )
+ 8000b6a: 2201 movs r2, #1
+ 8000b6c: 701a strb r2, [r3, #0]
+ }
+ if (pq_pop(&huart4q, packet)) {
+ 8000b6e: 1d3b adds r3, r7, #4
+ 8000b70: 4619 mov r1, r3
+ 8000b72: 482b ldr r0, [pc, #172] @ (8000c20 )
+ 8000b74: f7ff fea2 bl 80008bc
+ 8000b78: 4603 mov r3, r0
+ 8000b7a: 2b00 cmp r3, #0
+ 8000b7c: d008 beq.n 8000b90
+ memcpy(UART_KEYSTATE[3], packet, 12);
+ 8000b7e: 4b25 ldr r3, [pc, #148] @ (8000c14 )
+ 8000b80: 3324 adds r3, #36 @ 0x24
+ 8000b82: 1d3a adds r2, r7, #4
+ 8000b84: ca07 ldmia r2, {r0, r1, r2}
+ 8000b86: e883 0007 stmia.w r3, {r0, r1, r2}
+ KEYSTATE_CHANGED_FLAG = 1;
+ 8000b8a: 4b23 ldr r3, [pc, #140] @ (8000c18 )
+ 8000b8c: 2201 movs r2, #1
+ 8000b8e: 701a strb r2, [r3, #0]
+ }
+ if (pq_pop(&huart5q, packet)) {
+ 8000b90: 1d3b adds r3, r7, #4
+ 8000b92: 4619 mov r1, r3
+ 8000b94: 4823 ldr r0, [pc, #140] @ (8000c24 )
+ 8000b96: f7ff fe91 bl 80008bc
+ 8000b9a: 4603 mov r3, r0
+ 8000b9c: 2b00 cmp r3, #0
+ 8000b9e: d009 beq.n 8000bb4
+ memcpy(UART_KEYSTATE[0], packet, 12);
+ 8000ba0: 4b1c ldr r3, [pc, #112] @ (8000c14 )
+ 8000ba2: 461c mov r4, r3
+ 8000ba4: 1d3b adds r3, r7, #4
+ 8000ba6: e893 0007 ldmia.w r3, {r0, r1, r2}
+ 8000baa: e884 0007 stmia.w r4, {r0, r1, r2}
+ KEYSTATE_CHANGED_FLAG = 1;
+ 8000bae: 4b1a ldr r3, [pc, #104] @ (8000c18 )
+ 8000bb0: 2201 movs r2, #1
+ 8000bb2: 701a strb r2, [r3, #0]
+ }
+ for(int i = 0; i < 4; i++){
+ 8000bb4: 2300 movs r3, #0
+ 8000bb6: 617b str r3, [r7, #20]
+ 8000bb8: e022 b.n 8000c00
+ for(int j = 0; j < 12; j++){
+ 8000bba: 2300 movs r3, #0
+ 8000bbc: 613b str r3, [r7, #16]
+ 8000bbe: e019 b.n 8000bf4
+ REPORT.KEYPRESS[j] |= UART_KEYSTATE[i][j];
+ 8000bc0: 4a19 ldr r2, [pc, #100] @ (8000c28 )
+ 8000bc2: 693b ldr r3, [r7, #16]
+ 8000bc4: 4413 add r3, r2
+ 8000bc6: 3302 adds r3, #2
+ 8000bc8: 7819 ldrb r1, [r3, #0]
+ 8000bca: 4812 ldr r0, [pc, #72] @ (8000c14 )
+ 8000bcc: 697a ldr r2, [r7, #20]
+ 8000bce: 4613 mov r3, r2
+ 8000bd0: 005b lsls r3, r3, #1
+ 8000bd2: 4413 add r3, r2
+ 8000bd4: 009b lsls r3, r3, #2
+ 8000bd6: 18c2 adds r2, r0, r3
+ 8000bd8: 693b ldr r3, [r7, #16]
+ 8000bda: 4413 add r3, r2
+ 8000bdc: 781b ldrb r3, [r3, #0]
+ 8000bde: 430b orrs r3, r1
+ 8000be0: b2d9 uxtb r1, r3
+ 8000be2: 4a11 ldr r2, [pc, #68] @ (8000c28 )
+ 8000be4: 693b ldr r3, [r7, #16]
+ 8000be6: 4413 add r3, r2
+ 8000be8: 3302 adds r3, #2
+ 8000bea: 460a mov r2, r1
+ 8000bec: 701a strb r2, [r3, #0]
+ for(int j = 0; j < 12; j++){
+ 8000bee: 693b ldr r3, [r7, #16]
+ 8000bf0: 3301 adds r3, #1
+ 8000bf2: 613b str r3, [r7, #16]
+ 8000bf4: 693b ldr r3, [r7, #16]
+ 8000bf6: 2b0b cmp r3, #11
+ 8000bf8: dde2 ble.n 8000bc0
+ for(int i = 0; i < 4; i++){
+ 8000bfa: 697b ldr r3, [r7, #20]
+ 8000bfc: 3301 adds r3, #1
+ 8000bfe: 617b str r3, [r7, #20]
+ 8000c00: 697b ldr r3, [r7, #20]
+ 8000c02: 2b03 cmp r3, #3
+ 8000c04: ddd9 ble.n 8000bba
+ }
+ }
+}
+ 8000c06: bf00 nop
+ 8000c08: bf00 nop
+ 8000c0a: 371c adds r7, #28
+ 8000c0c: 46bd mov sp, r7
+ 8000c0e: bd90 pop {r4, r7, pc}
+ 8000c10: 200002c0 .word 0x200002c0
+ 8000c14: 20000290 .word 0x20000290
+ 8000c18: 20000268 .word 0x20000268
+ 8000c1c: 20000444 .word 0x20000444
+ 8000c20: 200005c8 .word 0x200005c8
+ 8000c24: 2000074c .word 0x2000074c
+ 8000c28: 20000210 .word 0x20000210
+
+08000c2c :
+/**
+ * @brief System Clock Configuration
+ * @retval None
+ */
+void SystemClock_Config(void)
+{
+ 8000c2c: b580 push {r7, lr}
+ 8000c2e: b094 sub sp, #80 @ 0x50
+ 8000c30: af00 add r7, sp, #0
+ RCC_OscInitTypeDef RCC_OscInitStruct = {0};
+ 8000c32: f107 031c add.w r3, r7, #28
+ 8000c36: 2234 movs r2, #52 @ 0x34
+ 8000c38: 2100 movs r1, #0
+ 8000c3a: 4618 mov r0, r3
+ 8000c3c: f00a fb88 bl 800b350
+ RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
+ 8000c40: f107 0308 add.w r3, r7, #8
+ 8000c44: 2200 movs r2, #0
+ 8000c46: 601a str r2, [r3, #0]
+ 8000c48: 605a str r2, [r3, #4]
+ 8000c4a: 609a str r2, [r3, #8]
+ 8000c4c: 60da str r2, [r3, #12]
+ 8000c4e: 611a str r2, [r3, #16]
+
+ /** Configure the main internal regulator out put voltage
+ */
+ __HAL_RCC_PWR_CLK_ENABLE();
+ 8000c50: 2300 movs r3, #0
+ 8000c52: 607b str r3, [r7, #4]
+ 8000c54: 4b29 ldr r3, [pc, #164] @ (8000cfc )
+ 8000c56: 6c1b ldr r3, [r3, #64] @ 0x40
+ 8000c58: 4a28 ldr r2, [pc, #160] @ (8000cfc )
+ 8000c5a: f043 5380 orr.w r3, r3, #268435456 @ 0x10000000
+ 8000c5e: 6413 str r3, [r2, #64] @ 0x40
+ 8000c60: 4b26 ldr r3, [pc, #152] @ (8000cfc )
+ 8000c62: 6c1b ldr r3, [r3, #64] @ 0x40
+ 8000c64: f003 5380 and.w r3, r3, #268435456 @ 0x10000000
+ 8000c68: 607b str r3, [r7, #4]
+ 8000c6a: 687b ldr r3, [r7, #4]
+ __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3);
+ 8000c6c: 2300 movs r3, #0
+ 8000c6e: 603b str r3, [r7, #0]
+ 8000c70: 4b23 ldr r3, [pc, #140] @ (8000d00 )
+ 8000c72: 681b ldr r3, [r3, #0]
+ 8000c74: f423 4340 bic.w r3, r3, #49152 @ 0xc000
+ 8000c78: 4a21 ldr r2, [pc, #132] @ (8000d00 )
+ 8000c7a: f443 4380 orr.w r3, r3, #16384 @ 0x4000
+ 8000c7e: 6013 str r3, [r2, #0]
+ 8000c80: 4b1f ldr r3, [pc, #124] @ (8000d00 )
+ 8000c82: 681b ldr r3, [r3, #0]
+ 8000c84: f403 4340 and.w r3, r3, #49152 @ 0xc000
+ 8000c88: 603b str r3, [r7, #0]
+ 8000c8a: 683b ldr r3, [r7, #0]
+
+ /** Initializes the RCC Oscillators according to the specified parameters
+ * in the RCC_OscInitTypeDef structure.
+ */
+ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
+ 8000c8c: 2301 movs r3, #1
+ 8000c8e: 61fb str r3, [r7, #28]
+ RCC_OscInitStruct.HSEState = RCC_HSE_ON;
+ 8000c90: f44f 3380 mov.w r3, #65536 @ 0x10000
+ 8000c94: 623b str r3, [r7, #32]
+ RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
+ 8000c96: 2302 movs r3, #2
+ 8000c98: 637b str r3, [r7, #52] @ 0x34
+ RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
+ 8000c9a: f44f 0380 mov.w r3, #4194304 @ 0x400000
+ 8000c9e: 63bb str r3, [r7, #56] @ 0x38
+ RCC_OscInitStruct.PLL.PLLM = 4;
+ 8000ca0: 2304 movs r3, #4
+ 8000ca2: 63fb str r3, [r7, #60] @ 0x3c
+ RCC_OscInitStruct.PLL.PLLN = 96;
+ 8000ca4: 2360 movs r3, #96 @ 0x60
+ 8000ca6: 643b str r3, [r7, #64] @ 0x40
+ RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
+ 8000ca8: 2302 movs r3, #2
+ 8000caa: 647b str r3, [r7, #68] @ 0x44
+ RCC_OscInitStruct.PLL.PLLQ = 4;
+ 8000cac: 2304 movs r3, #4
+ 8000cae: 64bb str r3, [r7, #72] @ 0x48
+ RCC_OscInitStruct.PLL.PLLR = 2;
+ 8000cb0: 2302 movs r3, #2
+ 8000cb2: 64fb str r3, [r7, #76] @ 0x4c
+ if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
+ 8000cb4: f107 031c add.w r3, r7, #28
+ 8000cb8: 4618 mov r0, r3
+ 8000cba: f004 fa7d bl 80051b8
+ 8000cbe: 4603 mov r3, r0
+ 8000cc0: 2b00 cmp r3, #0
+ 8000cc2: d001 beq.n 8000cc8
+ {
+ Error_Handler();
+ 8000cc4: f000 fac0 bl 8001248
+ }
+
+ /** Initializes the CPU, AHB and APB buses clocks
+ */
+ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
+ 8000cc8: 230f movs r3, #15
+ 8000cca: 60bb str r3, [r7, #8]
+ |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
+ RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
+ 8000ccc: 2302 movs r3, #2
+ 8000cce: 60fb str r3, [r7, #12]
+ RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
+ 8000cd0: 2380 movs r3, #128 @ 0x80
+ 8000cd2: 613b str r3, [r7, #16]
+ RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
+ 8000cd4: f44f 5380 mov.w r3, #4096 @ 0x1000
+ 8000cd8: 617b str r3, [r7, #20]
+ RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
+ 8000cda: 2300 movs r3, #0
+ 8000cdc: 61bb str r3, [r7, #24]
+
+ if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
+ 8000cde: f107 0308 add.w r3, r7, #8
+ 8000ce2: 2101 movs r1, #1
+ 8000ce4: 4618 mov r0, r3
+ 8000ce6: f003 fbf3 bl 80044d0
+ 8000cea: 4603 mov r3, r0
+ 8000cec: 2b00 cmp r3, #0
+ 8000cee: d001 beq.n 8000cf4
+ {
+ Error_Handler();
+ 8000cf0: f000 faaa bl 8001248
+ }
+}
+ 8000cf4: bf00 nop
+ 8000cf6: 3750 adds r7, #80 @ 0x50
+ 8000cf8: 46bd mov sp, r7
+ 8000cfa: bd80 pop {r7, pc}
+ 8000cfc: 40023800 .word 0x40023800
+ 8000d00: 40007000 .word 0x40007000
+
+08000d04 :
+
+/* USER CODE BEGIN 4 */
+// UART Message Requests Goes Here
+void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
+ 8000d04: b580 push {r7, lr}
+ 8000d06: b082 sub sp, #8
+ 8000d08: af00 add r7, sp, #0
+ 8000d0a: 6078 str r0, [r7, #4]
+ if (huart->Instance == USART1) {
+ 8000d0c: 687b ldr r3, [r7, #4]
+ 8000d0e: 681b ldr r3, [r3, #0]
+ 8000d10: 4a1e ldr r2, [pc, #120] @ (8000d8c )
+ 8000d12: 4293 cmp r3, r2
+ 8000d14: d109 bne.n 8000d2a
+ handleUARTMessages((uint8_t*)&RX1Msg, &huart1);
+ 8000d16: 491e ldr r1, [pc, #120] @ (8000d90 )
+ 8000d18: 481e ldr r0, [pc, #120] @ (8000d94 )
+ 8000d1a: f000 f8dd bl 8000ed8
+ HAL_UART_Receive_DMA(&huart1, (uint8_t*)&RX1Msg, sizeof(UARTMessage));
+ 8000d1e: 2210 movs r2, #16
+ 8000d20: 491c ldr r1, [pc, #112] @ (8000d94 )
+ 8000d22: 481b ldr r0, [pc, #108] @ (8000d90 )
+ 8000d24: f005 fc6c bl 8006600
+ }
+ else if (huart->Instance == UART5) {
+ handleUARTMessages((uint8_t*)&RX5Msg, &huart5);
+ HAL_UART_Receive_DMA(&huart5, (uint8_t*)&RX5Msg, sizeof(UARTMessage));
+ }
+}
+ 8000d28: e02b b.n 8000d82
+ else if (huart->Instance == USART2) {
+ 8000d2a: 687b ldr r3, [r7, #4]
+ 8000d2c: 681b ldr r3, [r3, #0]
+ 8000d2e: 4a1a ldr r2, [pc, #104] @ (8000d98 )
+ 8000d30: 4293 cmp r3, r2
+ 8000d32: d109 bne.n 8000d48
+ handleUARTMessages((uint8_t*)&RX2Msg, &huart2);
+ 8000d34: 4919 ldr r1, [pc, #100] @ (8000d9c )
+ 8000d36: 481a ldr r0, [pc, #104] @ (8000da0 )
+ 8000d38: f000 f8ce bl 8000ed8
+ HAL_UART_Receive_DMA(&huart2, (uint8_t*)&RX2Msg, sizeof(UARTMessage));
+ 8000d3c: 2210 movs r2, #16
+ 8000d3e: 4918 ldr r1, [pc, #96] @ (8000da0 )
+ 8000d40: 4816 ldr r0, [pc, #88] @ (8000d9c )
+ 8000d42: f005 fc5d bl 8006600
+}
+ 8000d46: e01c b.n 8000d82
+ else if (huart->Instance == UART4) {
+ 8000d48: 687b ldr r3, [r7, #4]
+ 8000d4a: 681b ldr r3, [r3, #0]
+ 8000d4c: 4a15 ldr r2, [pc, #84] @ (8000da4 )
+ 8000d4e: 4293 cmp r3, r2
+ 8000d50: d109 bne.n 8000d66
+ handleUARTMessages((uint8_t*)&RX4Msg, &huart4);
+ 8000d52: 4915 ldr r1, [pc, #84] @ (8000da8 )
+ 8000d54: 4815 ldr r0, [pc, #84] @ (8000dac )
+ 8000d56: f000 f8bf bl 8000ed8
+ HAL_UART_Receive_DMA(&huart4, (uint8_t*)&RX4Msg, sizeof(UARTMessage));
+ 8000d5a: 2210 movs r2, #16
+ 8000d5c: 4913 ldr r1, [pc, #76] @ (8000dac )
+ 8000d5e: 4812 ldr r0, [pc, #72] @ (8000da8 )
+ 8000d60: f005 fc4e bl 8006600
+}
+ 8000d64: e00d b.n 8000d82
+ else if (huart->Instance == UART5) {
+ 8000d66: 687b ldr r3, [r7, #4]
+ 8000d68: 681b ldr r3, [r3, #0]
+ 8000d6a: 4a11 ldr r2, [pc, #68] @ (8000db0 )
+ 8000d6c: 4293 cmp r3, r2
+ 8000d6e: d108 bne.n 8000d82