auto-sync

This commit is contained in:
rusEfi 2016-01-15 23:01:43 -05:00
parent 1bc72b1fd5
commit a1afc46a13
11 changed files with 95 additions and 45 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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);

View File

@ -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) {

View File

@ -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);
}

View File

@ -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";
}

View File

@ -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_ */

View File

@ -110,7 +110,7 @@
category="Fuel"
storageaddress="1a18" sizex="16"
storagetype="float" endian="big">
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="19d8" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
@ -119,7 +119,7 @@
<table type="2D" name="Intake air temperature-based extra idle air" storageaddress="1b98"
sizex="16" storagetype="float" endian="big">
<scaling units="Target Boost (psia) Compensation (%)" expression="x" to_byte="x" format="0.00"
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="1b58" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
@ -127,5 +127,14 @@
</table>
<table type="2D" name="Engine Noise" storageaddress="7a0"
sizex="8" storagetype="float" endian="big">
<scaling units="Volts" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="7c0" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
</rom>
</roms>

View File

@ -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

View File

@ -38,25 +38,7 @@ public class IniFileModel {
State state = State.SKIPPING;
while ((line = d.readLine()) != null) {
LinkedList<String> 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<String> 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<String> 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<String> 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<String> 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 == ',';
}
}

View File

@ -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));
}
}