Index: ctrl/firmware/Main/CubeMX/Core/Inc/main.h
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Inc/main.h	(revision 57)
+++ ctrl/firmware/Main/CubeMX/Core/Inc/main.h	(revision 58)
@@ -60,4 +60,12 @@
 #define TX1_LED_Pin GPIO_PIN_6
 #define TX1_LED_GPIO_Port GPIOE
+#define POWER_4V_EN_Pin GPIO_PIN_15
+#define POWER_4V_EN_GPIO_Port GPIOF
+#define POWER_5V_EN_Pin GPIO_PIN_0
+#define POWER_5V_EN_GPIO_Port GPIOG
+#define POWER_10V_EN_Pin GPIO_PIN_1
+#define POWER_10V_EN_GPIO_Port GPIOG
+#define POWER_15V_EN_Pin GPIO_PIN_7
+#define POWER_15V_EN_GPIO_Port GPIOE
 #define SPI4_NSS_DISPLAY_Pin GPIO_PIN_11
 #define SPI4_NSS_DISPLAY_GPIO_Port GPIOE
Index: ctrl/firmware/Main/CubeMX/Core/Src/app_threadx.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/app_threadx.c	(revision 57)
+++ ctrl/firmware/Main/CubeMX/Core/Src/app_threadx.c	(revision 58)
@@ -52,5 +52,5 @@
 /* USER CODE BEGIN PV */
 
-TX_THREAD       scan_keys_thread_ptr;
+TX_THREAD scan_keys_thread_ptr;
 
 /* USER CODE END PV */
@@ -86,5 +86,5 @@
 						pointer, MAIN_THREAD_STACK_SIZE_BYTES, TX_MAX_PRIORITIES-1, TX_MAX_PRIORITIES-1,
 						TX_NO_TIME_SLICE, TX_AUTO_START);
-  if (ret != TX_SUCCESS) { printf("Cannot create MainThread!\n"); return ret; }
+  if (ret != TX_SUCCESS) { printf("Cannot create Scan Keys Thread!\n"); return ret; }
 
   /* USER CODE END App_ThreadX_Init */
Index: ctrl/firmware/Main/CubeMX/Core/Src/gpio.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/gpio.c	(revision 57)
+++ ctrl/firmware/Main/CubeMX/Core/Src/gpio.c	(revision 58)
@@ -58,25 +58,28 @@
 
   /*Configure GPIO pin Output Level */
-  HAL_GPIO_WritePin(GPIOE, TX1_LED_Pin|PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin, GPIO_PIN_RESET);
+  HAL_GPIO_WritePin(GPIOE, TX1_LED_Pin|POWER_15V_EN_Pin|PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(POWER_4V_EN_GPIO_Port, POWER_4V_EN_Pin, GPIO_PIN_RESET);
+
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOG, POWER_5V_EN_Pin|POWER_10V_EN_Pin|ERROR_LED_Pin|CHARGE_LED_Pin
+                          |RX2_LED_Pin|RX1_LED_Pin|TX2_LED_Pin, GPIO_PIN_RESET);
 
   /*Configure GPIO pin Output Level */
   HAL_GPIO_WritePin(OUTPUT_ON_LED_GPIO_Port, OUTPUT_ON_LED_Pin, GPIO_PIN_RESET);
 
-  /*Configure GPIO pin Output Level */
-  HAL_GPIO_WritePin(GPIOG, ERROR_LED_Pin|CHARGE_LED_Pin|RX2_LED_Pin|RX1_LED_Pin
-                          |TX2_LED_Pin, GPIO_PIN_RESET);
-
   /*Configure GPIO pins : PE2 PE3 PE4 PE5
-                           PE7 PE8 PE9 PE10
-                           PE0 PE1 */
+                           PE8 PE9 PE10 PE0
+                           PE1 */
   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
-                          |GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10
-                          |GPIO_PIN_0|GPIO_PIN_1;
+                          |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_0
+                          |GPIO_PIN_1;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
   HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
 
-  /*Configure GPIO pins : TX1_LED_Pin PWM_DISPLAY_LIGHT_Pin RST_DISPLAY_Pin */
-  GPIO_InitStruct.Pin = TX1_LED_Pin|PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin;
+  /*Configure GPIO pins : TX1_LED_Pin POWER_15V_EN_Pin PWM_DISPLAY_LIGHT_Pin RST_DISPLAY_Pin */
+  GPIO_InitStruct.Pin = TX1_LED_Pin|POWER_15V_EN_Pin|PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin;
   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -97,9 +100,9 @@
                            PF4 PF5 PF6 PF7
                            PF8 PF9 PF10 PF11
-                           PF12 PF13 PF14 PF15 */
+                           PF12 PF13 PF14 */
   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
                           |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
-                          |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+                          |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -130,12 +133,18 @@
   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
 
-  /*Configure GPIO pins : PG0 PG1 PG2 PG3
-                           PG4 PG5 PG6 PG7
-                           PG8 PG14 PG15 */
-  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
-                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
-                          |GPIO_PIN_8|GPIO_PIN_14|GPIO_PIN_15;
-  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  /*Configure GPIO pin : POWER_4V_EN_Pin */
+  GPIO_InitStruct.Pin = POWER_4V_EN_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(POWER_4V_EN_GPIO_Port, &GPIO_InitStruct);
+
+  /*Configure GPIO pins : POWER_5V_EN_Pin POWER_10V_EN_Pin ERROR_LED_Pin CHARGE_LED_Pin
+                           RX2_LED_Pin RX1_LED_Pin TX2_LED_Pin */
+  GPIO_InitStruct.Pin = POWER_5V_EN_Pin|POWER_10V_EN_Pin|ERROR_LED_Pin|CHARGE_LED_Pin
+                          |RX2_LED_Pin|RX1_LED_Pin|TX2_LED_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
   HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
 
@@ -152,4 +161,14 @@
   HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
 
+  /*Configure GPIO pins : PG2 PG3 PG4 PG5
+                           PG6 PG7 PG8 PG14
+                           PG15 */
+  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
+                          |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_14
+                          |GPIO_PIN_15;
+  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
+
   /*Configure GPIO pin : SD_DETECT_Pin */
   GPIO_InitStruct.Pin = SD_DETECT_Pin;
@@ -165,13 +184,4 @@
   HAL_GPIO_Init(OUTPUT_ON_LED_GPIO_Port, &GPIO_InitStruct);
 
-  /*Configure GPIO pins : ERROR_LED_Pin CHARGE_LED_Pin RX2_LED_Pin RX1_LED_Pin
-                           TX2_LED_Pin */
-  GPIO_InitStruct.Pin = ERROR_LED_Pin|CHARGE_LED_Pin|RX2_LED_Pin|RX1_LED_Pin
-                          |TX2_LED_Pin;
-  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
-  GPIO_InitStruct.Pull = GPIO_NOPULL;
-  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
-  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
-
 }
 
Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 57)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 58)
@@ -49,34 +49,38 @@
 Mcu.Pin0=PE6
 Mcu.Pin1=PC14-OSC32_IN
-Mcu.Pin10=PC8
-Mcu.Pin11=PC9
-Mcu.Pin12=PA8
-Mcu.Pin13=PA13(JTMS/SWDIO)
-Mcu.Pin14=PA14(JTCK/SWCLK)
-Mcu.Pin15=PC10
-Mcu.Pin16=PC11
-Mcu.Pin17=PC12
-Mcu.Pin18=PD2
-Mcu.Pin19=PD7
+Mcu.Pin10=PE12
+Mcu.Pin11=PE13
+Mcu.Pin12=PE14
+Mcu.Pin13=PE15
+Mcu.Pin14=PC8
+Mcu.Pin15=PC9
+Mcu.Pin16=PA8
+Mcu.Pin17=PA13(JTMS/SWDIO)
+Mcu.Pin18=PA14(JTCK/SWCLK)
+Mcu.Pin19=PC10
 Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=PG9
-Mcu.Pin21=PG10
-Mcu.Pin22=PG11
-Mcu.Pin23=PG12
-Mcu.Pin24=PG13
-Mcu.Pin25=VP_RTC_VS_RTC_Activate
-Mcu.Pin26=VP_SYS_VS_tim7
-Mcu.Pin27=VP_MEMORYMAP_VS_MEMORYMAP
-Mcu.Pin28=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.4.0_3.3.0
-Mcu.Pin29=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_FileOoSystemJjFileX_6.4.0_3.3.0
+Mcu.Pin20=PC11
+Mcu.Pin21=PC12
+Mcu.Pin22=PD2
+Mcu.Pin23=PD7
+Mcu.Pin24=PG9
+Mcu.Pin25=PG10
+Mcu.Pin26=PG11
+Mcu.Pin27=PG12
+Mcu.Pin28=PG13
+Mcu.Pin29=VP_RTC_VS_RTC_Activate
 Mcu.Pin3=PH0-OSC_IN
-Mcu.Pin30=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_FileOoSystemJjInterfaces_3.3.0_3.3.0
+Mcu.Pin30=VP_SYS_VS_tim7
+Mcu.Pin31=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin32=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_RTOSJjThreadX_6.4.0_3.3.0
+Mcu.Pin33=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_FileOoSystemJjFileX_6.4.0_3.3.0
+Mcu.Pin34=VP_STMicroelectronics.X-CUBE-AZRTOS-H7_VS_FileOoSystemJjInterfaces_3.3.0_3.3.0
 Mcu.Pin4=PH1-OSC_OUT
-Mcu.Pin5=PE11
-Mcu.Pin6=PE12
-Mcu.Pin7=PE13
-Mcu.Pin8=PE14
-Mcu.Pin9=PE15
-Mcu.PinsNb=31
+Mcu.Pin5=PF15
+Mcu.Pin6=PG0
+Mcu.Pin7=PG1
+Mcu.Pin8=PE7
+Mcu.Pin9=PE11
+Mcu.PinsNb=35
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
 Mcu.ThirdPartyNb=1
@@ -163,4 +167,20 @@
 PE6.Locked=true
 PE6.Signal=GPIO_Output
+PE7.GPIOParameters=GPIO_Label
+PE7.GPIO_Label=POWER_15V_EN
+PE7.Locked=true
+PE7.Signal=GPIO_Output
+PF15.GPIOParameters=GPIO_Label
+PF15.GPIO_Label=POWER_4V_EN
+PF15.Locked=true
+PF15.Signal=GPIO_Output
+PG0.GPIOParameters=GPIO_Label
+PG0.GPIO_Label=POWER_5V_EN
+PG0.Locked=true
+PG0.Signal=GPIO_Output
+PG1.GPIOParameters=GPIO_Label
+PG1.GPIO_Label=POWER_10V_EN
+PG1.Locked=true
+PG1.Signal=GPIO_Output
 PG10.GPIOParameters=GPIO_Label
 PG10.GPIO_Label=CHARGE_LED
