diff --git a/java_tools/ConfigDefinition.jar b/java_tools/ConfigDefinition.jar index 92c35d5e5d..975933b356 100644 Binary files a/java_tools/ConfigDefinition.jar and b/java_tools/ConfigDefinition.jar differ diff --git a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java index c527a8252e..584de7cb60 100644 --- a/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java +++ b/java_tools/configuration_definition/src/com/rusefi/ConfigDefinition.java @@ -411,6 +411,7 @@ public class ConfigDefinition { SystemOut.println(data); Objects.requireNonNull(data, "data"); for (Map pin : data) { + ArrayList> thisPinList = new ArrayList<>(); Object pinId = pin.get("id"); Object pinClass = pin.get("class"); Object pinName = pin.get("ts_name"); @@ -423,22 +424,36 @@ public class ConfigDefinition { throw new IllegalStateException("Expected multiple classes for " + pinIds); for (int i = 0; i < pinIds.size(); i++) { String id = pinIds.get(i); - Map thisPin = new HashMap<>(); - thisPin.put("id", id); - thisPin.put("ts_name", pinName); - thisPin.put("class", ((ArrayList) pinClass).get(i)); - listPins.add(thisPin); + addPinToList(listPins, thisPinList, id, pinName, ((ArrayList) pinClass).get(i)); } } else if (pinId instanceof String) { - Map thisPin = new HashMap<>(); - thisPin.put("id", pinId); - thisPin.put("ts_name", pinName); - thisPin.put("class", pinClass); - listPins.add(thisPin); + if (((String) pinId).length() == 0) { + throw new IllegalStateException("Unexpected empty ID field"); + } + addPinToList(listPins, thisPinList, pinId, pinName, pinClass); } else { - throw new IllegalStateException("Unexpected type of id field: " + pinId.getClass().getSimpleName()); + throw new IllegalStateException("Unexpected type of ID field: " + pinId.getClass().getSimpleName()); + } + listPins.addAll(thisPinList); + } + } + + private static void addPinToList(ArrayList> listPins, ArrayList> thisPinList, Object id, Object pinName, Object pinClass) { +/* + This doesn't work as expected because it's possible that a board has multiple connector pins connected to the same MCU pin. + https://github.com/rusefi/rusefi/issues/2897 + https://github.com/rusefi/rusefi/issues/2925 + for (int i = 0; i < listPins.size(); i++) { + if (id.equals(listPins.get(i).get("id"))) { + throw new IllegalStateException("ID used multiple times: " + id); } } +*/ + Map thisPin = new HashMap<>(); + thisPin.put("id", id); + thisPin.put("ts_name", pinName); + thisPin.put("class", pinClass); + thisPinList.add(thisPin); } private static void registerPins(ArrayList> listPins, VariableRegistry registry, ReaderState state) { @@ -452,12 +467,6 @@ public class ConfigDefinition { names.put("switch_inputs", new ArrayList<>()); for (int i = 0; i < listPins.size(); i++) { String id = (String) listPins.get(i).get("id"); - for (int ii = i + 1; ii < listPins.size(); ii++) { - if (id.equals(listPins.get(ii).get("id"))) { - // todo: re-enable once we fix https://github.com/rusefi/rusefi/issues/2897 - //throw new IllegalStateException("ID used multiple times: " + id); - } - } String className = (String) listPins.get(i).get("class"); ArrayList classList = names.get(className); if (classList == null) {