From a1afc46a1346d6a16c989bd9f8584b7c145f444b Mon Sep 17 00:00:00 2001 From: rusEfi Date: Fri, 15 Jan 2016 23:01:43 -0500 Subject: [PATCH] auto-sync --- firmware/controllers/settings.cpp | 2 +- firmware/global.h | 2 + firmware/hw_layer/adc_inputs.cpp | 6 +- firmware/hw_layer/mmc_card.cpp | 7 +- firmware/hw_layer/neo6m.cpp | 7 +- firmware/hw_layer/pin_repository.cpp | 10 +-- firmware/hw_layer/pin_repository.h | 6 +- java_console/rusefi.xml | 13 +++- .../ui/src/com/rusefi/ui/FuelTunePane.java | 1 + .../com/rusefi/ui/config/IniFileModel.java | 69 +++++++++++++------ .../ui/config/test/IniFileModelTest.java | 17 +++++ 11 files changed, 95 insertions(+), 45 deletions(-) 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"> - @@ -119,7 +119,7 @@
-
@@ -127,5 +127,14 @@
+ + +
+ +
+ + diff --git a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java index 9a52ffcf62..faec766f63 100644 --- a/java_console/ui/src/com/rusefi/ui/FuelTunePane.java +++ b/java_console/ui/src/com/rusefi/ui/FuelTunePane.java @@ -102,6 +102,7 @@ public class FuelTunePane { synchronized (incomingDataPoints) { for (FuelDataPoint point : incomingDataPoints) data.add(point.asDataOnline()); + incomingDataPoints.clear(); } // todo: move this away from AWT thread diff --git a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java index 76c6ea26fa..c0dac853ca 100644 --- a/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java +++ b/java_console/ui/src/com/rusefi/ui/config/IniFileModel.java @@ -38,25 +38,7 @@ public class IniFileModel { State state = State.SKIPPING; while ((line = d.readLine()) != null) { - LinkedList list = new LinkedList<>(Arrays.asList(line.split("[\t =,]"))); - - trim(list); - - if (list.isEmpty()) - continue; - String first = list.getFirst(); - - if ("dialog".equals(first)) { - list.removeFirst(); - state = State.DIALOG; - trim(list); - String keyword = list.removeFirst(); - trim(list); - String name = list.isEmpty() ? null : list.removeFirst(); - - System.out.println("Dialog " + keyword + ": " + name); - - } + handleLine(line); } @@ -65,6 +47,49 @@ public class IniFileModel { } } + private void handleLine(String line) { + try { + LinkedList list = new LinkedList<>(Arrays.asList(split(line))); + + trim(list); + + if (list.isEmpty()) + return; + String first = list.getFirst(); + + if ("dialog".equals(first)) { + handleDialog(list); + + } else if ("field".equals(first)) { + handleField(list); + } + } catch (RuntimeException e) { + throw new IllegalStateException("While [" + line + "]", e); + } + } + + private void handleField(LinkedList list) { + list.removeFirst(); // "field" + + String label = list.isEmpty() ? "" : list.removeFirst(); + + String name = list.isEmpty() ? null : list.removeFirst(); + + System.out.println("Field label=[" + label + "] : name=[" + name + "]"); + } + + private void handleDialog(LinkedList list) { + State state; + list.removeFirst(); // "dialog" + state = State.DIALOG; +// trim(list); + String keyword = list.removeFirst(); +// trim(list); + String name = list.isEmpty() ? null : list.removeFirst(); + + System.out.println("Dialog key=" + keyword + ": name=[" + name + "]"); + } + private void trim(LinkedList list) { while (!list.isEmpty() && list.getFirst().isEmpty()) list.removeFirst(); @@ -81,7 +106,7 @@ public class IniFileModel { StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); - if (c == '\"' || c == ' ' && !inQuote) { + if (c == '\"' || isWhitespace(c) && !inQuote) { if (c == '\"') inQuote = !inQuote; if (!inQuote && sb.length() > 0) { @@ -97,4 +122,8 @@ public class IniFileModel { return strings.toArray(new String[strings.size()]); } + private static boolean isWhitespace(int c) { + return c == ' ' || c == '\t' || c == '=' || c == ','; + } + } diff --git a/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java b/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java index 3c0a059982..0917c20a23 100644 --- a/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java +++ b/java_console/ui/src/com/rusefi/ui/config/test/IniFileModelTest.java @@ -3,6 +3,8 @@ package com.rusefi.ui.config.test; import com.rusefi.ui.config.IniFileModel; import org.junit.Test; +import java.util.Arrays; + import static org.junit.Assert.assertEquals; /** @@ -29,4 +31,19 @@ public class IniFileModelTest { assertEquals(s.length, 2); } } + + @Test + public void testQuotedTokens() { + { + String[] s = IniFileModel.split("\"hel lo\""); + assertEquals(s.length, 1); + } + } + + @Test + public void testRealLine() { + String[] s = IniFileModel.split("\tdialog = engineChars,\t\"Base Engine Settings\""); + assertEquals(s.length, 3); + System.out.println(Arrays.toString(s)); + } }