diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 7ccee527..e4e283b5 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,7 +2,7 @@ AndrOBD - V1.3.11 + V1.3.12 © 2015 fr3ts0n Translation by fr3ts0n Android OBD vehicle diagnostics app for ELM327 bluetooth adapter @@ -181,6 +181,8 @@ period of time while the ECU recalibrates itself. disabled enabled Allow adaptive timing handling in ELM drivers? + Reset on NRC + Reset ELM adapter on NRC error? Select ECU address … Disconnect Reset last pre-selections diff --git a/res/xml/settings.xml b/res/xml/settings.xml index be6ec620..ea3ea36a 100644 --- a/res/xml/settings.xml +++ b/res/xml/settings.xml @@ -126,6 +126,13 @@ android:title="@string/min_elm_timeout" /> + + diff --git a/src/com/fr3ts0n/ecu/gui/androbd/MainActivity.java b/src/com/fr3ts0n/ecu/gui/androbd/MainActivity.java index 91ed6801..9e2e670b 100644 --- a/src/com/fr3ts0n/ecu/gui/androbd/MainActivity.java +++ b/src/com/fr3ts0n/ecu/gui/androbd/MainActivity.java @@ -123,6 +123,7 @@ public enum PRESELECT public static final String MEASURE_SYSTEM = "measure_system"; public static final String NIGHT_MODE = "night_mode"; public static final String ELM_ADAPTIVE_TIMING = "elm_adaptive_timing"; + public static final String ELM_RESET_ON_NRC = "elm_reset_on_nrc"; public static final String PREF_USE_LAST = "USE_LAST_SETTINGS"; /** @@ -247,12 +248,14 @@ public void onNothingSelected(AdapterView parent) */ private MODE mode = MODE.OFFLINE; + /** empty string set as default parameter*/ + static final Set emptyStringSet = new HashSet(); + /** * Check if restore of specified preselection is wanted from settings * @param preselect specified preselect * @return flag if preselection shall be restored */ - static final Set emptyStringSet = new HashSet(); boolean istRestoreWanted(PRESELECT preselect) { return prefs.getStringSet(PREF_USE_LAST, emptyStringSet).contains(preselect.toString()); @@ -416,6 +419,11 @@ public void handleMessage(Message msg) case MESSAGE_OBD_NRC: // reset OBD mode to prevent infinite error loop setObdService(ObdProt.OBD_SVC_NONE, getText(R.string.obd_error)); + // if elm should be reset on NRC, then do it now + if(prefs.getBoolean(ELM_RESET_ON_NRC, false)) + { + mCommService.elm.reset(); + } // show error dialog ... evt = (PropertyChangeEvent) msg.obj; String nrcMessage = (String)evt.getNewValue(); diff --git a/src/com/fr3ts0n/ecu/prot/obd/ObdProt.java b/src/com/fr3ts0n/ecu/prot/obd/ObdProt.java index 4070264e..a14e8f52 100755 --- a/src/com/fr3ts0n/ecu/prot/obd/ObdProt.java +++ b/src/com/fr3ts0n/ecu/prot/obd/ObdProt.java @@ -504,6 +504,8 @@ public synchronized int handleTelegram(char[] buffer) String error = String.format(nrc.toString(svc)); // log error log.error(error); + // switch off any active service + setService(OBD_SVC_NONE, true); // notify change listeners firePropertyChange(new PropertyChangeEvent(this, PROP_NRC, null, error)); // handling finished @@ -676,6 +678,8 @@ public int getService() */ public void reset() { + // switch off any active service + setService(OBD_SVC_NONE, true); // clear command queue cmdQueue.clear(); // clear supported PIDs