diff --git a/firmware/controllers/settings.cpp b/firmware/controllers/settings.cpp
index e78a36cd0f..c9f44081f5 100644
--- a/firmware/controllers/settings.cpp
+++ b/firmware/controllers/settings.cpp
@@ -408,7 +408,7 @@ static void printTPSInfo(void) {
return;
}
- GPIO_TypeDef* port = getAdcChannelPort(engineConfiguration->tpsAdcChannel);
+ stm32_gpio_t* port = getAdcChannelPort(engineConfiguration->tpsAdcChannel);
int pin = getAdcChannelPin(engineConfiguration->tpsAdcChannel);
scheduleMsg(&logger, "tps min %d/max %d v=%f @%s%d", engineConfiguration->tpsMin, engineConfiguration->tpsMax,
diff --git a/firmware/global.h b/firmware/global.h
index 53fb1a3851..2cd1f1d299 100644
--- a/firmware/global.h
+++ b/firmware/global.h
@@ -57,6 +57,8 @@ typedef unsigned int time_t;
typedef VirtualTimer virtual_timer_t;
typedef EventListener event_listener_t;
typedef Thread thread_t;
+typedef GPIO_TypeDef stm32_gpio_t;
+
#define THD_WORKING_AREA WORKING_AREA
#define THD_FUNCTION(tname, arg) void tname(void *arg)
diff --git a/firmware/hw_layer/adc_inputs.cpp b/firmware/hw_layer/adc_inputs.cpp
index a9dc6401c0..a13a4b4c55 100644
--- a/firmware/hw_layer/adc_inputs.cpp
+++ b/firmware/hw_layer/adc_inputs.cpp
@@ -267,7 +267,7 @@ adc_channel_e getAdcChannel(brain_pin_e pin) {
}
}
-GPIO_TypeDef* getAdcChannelPort(adc_channel_e hwChannel) {
+stm32_gpio_t* getAdcChannelPort(adc_channel_e hwChannel) {
// todo: replace this with an array :)
switch (hwChannel) {
case ADC_CHANNEL_IN0:
@@ -360,7 +360,7 @@ int getAdcChannelPin(adc_channel_e hwChannel) {
}
static void initAdcHwChannel(adc_channel_e hwChannel) {
- GPIO_TypeDef* port = getAdcChannelPort(hwChannel);
+ stm32_gpio_t* port = getAdcChannelPort(hwChannel);
int pin = getAdcChannelPin(hwChannel);
initAdcPin(port, pin, "hw");
@@ -427,7 +427,7 @@ static void printFullAdcReport(void) {
appendMsgPrefix(&logger);
adc_channel_e hwIndex = slowAdc.getAdcHardwareIndexByInternalIndex(index);
- GPIO_TypeDef* port = getAdcChannelPort(hwIndex);
+ stm32_gpio_t* port = getAdcChannelPort(hwIndex);
int pin = getAdcChannelPin(hwIndex);
int adcValue = slowAdc.getAdcValueByIndex(index);
diff --git a/firmware/hw_layer/mmc_card.cpp b/firmware/hw_layer/mmc_card.cpp
index 7224f87c8e..89d80e4bb4 100644
--- a/firmware/hw_layer/mmc_card.cpp
+++ b/firmware/hw_layer/mmc_card.cpp
@@ -283,12 +283,7 @@ static void MMCmount(void) {
}
}
-#if defined __GNUC__
-__attribute__((noreturn)) static msg_t MMCmonThread(void)
-#else
-static msg_t MMCmonThread(void)
-#endif
-{
+static THD_FUNCTION(MMCmonThread, arg) {
chRegSetThreadName("MMC_Monitor");
while (true) {
diff --git a/firmware/hw_layer/neo6m.cpp b/firmware/hw_layer/neo6m.cpp
index 1ac04db967..6efdc7077e 100644
--- a/firmware/hw_layer/neo6m.cpp
+++ b/firmware/hw_layer/neo6m.cpp
@@ -77,7 +77,7 @@ static void onGpsMessage(char *buffer) {
// we do not want this on stack, right?
static char gps_str[GPS_MAX_STRING];
-static msg_t GpsThreadEntryPoint(void *arg) {
+static THD_FUNCTION(GpsThreadEntryPoint, arg) {
(void) arg;
chRegSetThreadName("GPS thread");
@@ -99,9 +99,6 @@ static msg_t GpsThreadEntryPoint(void *arg) {
gps_str[count++] = charbuf;
}
}
-#if defined __GNUC__
- return 0;
-#endif
}
void initGps(void) {
@@ -115,7 +112,7 @@ void initGps(void) {
mySetPadMode2("GPS rx", boardConfiguration->gps_rx_pin, PAL_MODE_ALTERNATE(7));
// todo: add a thread which would save location. If the GPS 5Hz - we should save the location each 200 ms
- chThdCreateStatic(gpsThreadStack, sizeof(gpsThreadStack), LOWPRIO, GpsThreadEntryPoint, NULL);
+ chThdCreateStatic(gpsThreadStack, sizeof(gpsThreadStack), LOWPRIO, (tfunc_t)GpsThreadEntryPoint, NULL);
addConsoleAction("gpsinfo", &printGpsInfo);
}
diff --git a/firmware/hw_layer/pin_repository.cpp b/firmware/hw_layer/pin_repository.cpp
index c40e945665..de906d8170 100644
--- a/firmware/hw_layer/pin_repository.cpp
+++ b/firmware/hw_layer/pin_repository.cpp
@@ -23,7 +23,7 @@ static int initialized = FALSE;
static LoggingWithStorage logger("pin repos");
static int totalPinsUsed = 0;
-static GPIO_TypeDef* ports[7] = {GPIOA,
+static stm32_gpio_t* ports[7] = {GPIOA,
GPIOB,
GPIOC,
GPIOD,
@@ -35,7 +35,7 @@ static GPIO_TypeDef* ports[7] = {GPIOA,
/**
* @deprecated - use hwPortname() instead
*/
-const char *portname(GPIO_TypeDef* GPIOx) {
+const char *portname(stm32_gpio_t* GPIOx) {
if (GPIOx == GPIOA)
return "PA";
if (GPIOx == GPIOB)
@@ -55,7 +55,7 @@ const char *portname(GPIO_TypeDef* GPIOx) {
return "unknown";
}
-static int getPortIndex(GPIO_TypeDef* port) {
+static int getPortIndex(stm32_gpio_t* port) {
if (port == GPIOA)
return 0;
if (port == GPIOB)
@@ -83,7 +83,7 @@ static void reportPins(void) {
const char *name = PIN_USED[i];
int portIndex = i / PORT_SIZE;
int pin = i % PORT_SIZE;
- GPIO_TypeDef* port = ports[portIndex];
+ stm32_gpio_t* port = ports[portIndex];
if (name != NULL) {
scheduleMsg(&logger, "pin %s%d: %s", portname(port), pin, name);
}
@@ -125,7 +125,7 @@ const char *hwPortname(brain_pin_e brainPin) {
if (brainPin == GPIO_INVALID) {
return "INVALID";
}
- GPIO_TypeDef *hwPort = getHwPort(brainPin);
+ stm32_gpio_t *hwPort = getHwPort(brainPin);
if (hwPort == GPIO_NULL) {
return "NONE";
}
diff --git a/firmware/hw_layer/pin_repository.h b/firmware/hw_layer/pin_repository.h
index e2c1739619..b24b2ff157 100644
--- a/firmware/hw_layer/pin_repository.h
+++ b/firmware/hw_layer/pin_repository.h
@@ -18,7 +18,7 @@
#ifdef __cplusplus
#include "efiGpio.h"
// does not exactly belong here, but that works better for tests
-void outputPinRegister(const char *msg, OutputPin *output, GPIO_TypeDef *port, uint32_t pin);
+void outputPinRegister(const char *msg, OutputPin *output, stm32_gpio_t *port, uint32_t pin);
#endif /* __cplusplus */
#define PORT_SIZE 16
@@ -29,12 +29,12 @@ void mySetPadMode(const char *msg, ioportid_t port, ioportmask_t pin, iomode_t m
const char *hwPortname(brain_pin_e brainPin);
const char * getPinFunction(brain_input_pin_e brainPin);
void mySetPadMode2(const char *msg, brain_pin_e pin, iomode_t mode);
-const char *portname(GPIO_TypeDef* GPIOx);
+const char *portname(stm32_gpio_t* GPIOx);
void unmarkPin(brain_pin_e brainPin);
iomode_t getInputMode(pin_input_mode_e mode);
void efiIcuStart(ICUDriver *icup, const ICUConfig *config);
ioportmask_t getHwPin(brain_pin_e brainPin);
-GPIO_TypeDef * getHwPort(brain_pin_e brainPin);
+stm32_gpio_t * getHwPort(brain_pin_e brainPin);
#endif /* PIN_REPOSITORY_H_ */
diff --git a/java_console/rusefi.xml b/java_console/rusefi.xml
index 1746c17ddd..346adb8687 100644
--- a/java_console/rusefi.xml
+++ b/java_console/rusefi.xml
@@ -110,7 +110,7 @@
category="Fuel"
storageaddress="1a18" sizex="16"
storagetype="float" endian="big">
-