Skip to content
Kristoffer Smith edited this page May 26, 2015 · 8 revisions

The Settings Screen (v0.9)

Tap on the app's notification in the Android status bar to enter the settings screen.

notification expanded

settings screen

settings screen scrolled to bottom

Options

Items in this section are tappable action buttons. The descriptions are self-explanatory.

General Settings

Automatic Launch

Allows the app to launch or close automatically when bluetooth is enabled or disabled.

ELM327 Interface Device

Turn on bluetooth and pair with your ELM327 based OBD2 adapter before attempting to choose the device here.

Interface Startup Commands

Enter the ELM327 AT commands needed to configure the OBD2 adapter for your particular vehicle and monitoring scenario. End each command with a semicolon. It is recommended to begin with the commands: ATWS; ATL0; ATE0;

Consult the ELM327 Datasheet for more information.

Tips:

  • Issue formatting commands such as ATS(0/1), ATH(0/1), or ATAL so that the monitored bus messages will be formatted as you expect even if another app changed your OBD2 adapter's default settings.

  • In most scenarios you will want to specify a protocol ATSP(#) instead of leaving it set to automatic detection.

  • If you have trouble with your OBD2 adapter sometimes not connecting, try beginning the command list with ATZ; instead of ATWS;. This will cause the adapter to do a full reset upon app startup.

  • For the simplest systems, your final command will likely be one to monitor messages sent to a specific ID with ATMR## or messages sent from a specific ID with ATMT##. You could also monitor all bus messages with ATMA, but that will likely affect performance or result in BUFFER FULL errors. Note that most newer vehicles are using CAN BUS protocols which are more complex. For those vehicles you'll probably need to set additional filters with AT commands. It's also very likely that those vehicles will require splicing into a different wire than what the diagnostic port exposes.

For more information on connecting to your specific vehicle, see this article: a complete guide to hacking your vehicle ... part 1 (hardware interface)

Interface Monitors

Configure a monitor for each bus message that you wish to listen for and respond to. The app is currently limited to a maximum of 10 monitors.

Monitor 1 Config, Monitor 2 Config, etc.

FORMAT: Bus Data | Silence Errors | Bounce Group Time | Short Group Time | Long Group Time | Long Group Watch Time | Short Group Action | Long Group Action

EXAMPLE: 3D 11 00 02 D4 | false | 120 | 30 | 100 | 300 | *BUTTON_ROOT=KEYCODE_HOME | *BUTTON_ROOT=KEYCODE_APP_SWITCH

  • Bus Data: This is the exact string to watch for in the data stream of bus messages coming from the vehicle via the ELM327 interface. Determining what bus messages are broadcast when the specific event you are wanting to respond to occurs is the most difficult part of using this application. For more information on how to sleuth these messages out (besides Googling), see this article: a complete guide to hacking your vehicle ... part 2 (interpreting the data)

  • Silence Errors: Should be the word true or false. A value of true prevents any error pop-up messages when attempting the actions (so set to false normally).

The idea behind the next few Group Time values is that bus messages often repeat, and you may want to deal with those repeats as a group instead of every single instance. This may happen with physical buttons when they are held down, pressed several times, or even due to unwanted contact bounce. There are likely other scenarios that result in repeating messages as well. If each Group Time value is zero, then every single message will be responded to with the Short Group Action.

  • Bounce Group Time: Should be zero or a positive integer. This is how long in milliseconds to ignore any repeating bus messages once an action has been taken. Usually used to ignore contact bounce, but you might also just want to limit how often an action can re-occur.

  • Short Group Time: Should be zero or a positive integer. This is the minimum time in milliseconds to group together repeating bus messages as a short event. Each time a short event is encountered, the Short Group Action will be performed.

  • Long Group Time: Should be zero or a positive integer. This is the minimum time in milliseconds to group together repeating bus messages as a long event. Each time a long event is encountered, the Long Group Action will be performed.

  • Long Group Watch Time: Should be zero if not using long events, or else a positive integer greater than the Long Group Time value. This is the maximum time in milliseconds to wait to find a long event. Note that the larger this value is, the slower the response will be for identifying short events as well (i.e. the decision on whether an event is long or short can't be made until this time limit expires).

  • Short Group Action & Long Group Action: These are strings representing what actions to take for this monitor. The Short Group Action is required; the Long Group Action is optional. Possible values:

  • *ALERT= - Shows a popup alert (Android Toast) with the message specified after the equal sign. Use this during troubleshooting to verify your monitors are being detected reliably, then move on to specifying the action you really want to accomplish. Example: *ALERT=Button #2 was pressed!

  • *VOLUME=UP or *VOLUME=DOWN - Increases/Decreases the system volume.

  • *VOLUME_HIDDEN=UP or *VOLUME_HIDDEN=DOWN - Same as above but does not show the volume slider dialog during the change.

  • *MEDIA_BUTTON= - Attempts to simulate a hardware media button without requiring root privileges. This may not always work as intended, if you have root access then just use *BUTTON_ROOT= instead. Specify which button using one of the Android KEYCODE_MEDIA_* constants after the equal sign. Example: *MEDIA_BUTTON=KEYCODE_MEDIA_PLAY_PAUSE

  • *BUTTON_ROOT= - Attempts to simulate a hardware button but requires root privileges. Specify which button using any of the Android KEYCODE_* constants after the equal sign. Example: *BUTTON_ROOT=KEYCODE_HOME

  • *INTENT= - Sends a basic implicit intent. This is often used for things like "call this number" or "open this URL". The Android system will respond with the appropriate app or an app-chooser dialog. Specify which intent after the equal sign as the value of any Android ACTION_* constant. Optionally specify URI data to pass with the intent by appending a double asterisk ** and then the data. Example: *INTENT=android.intent.action.VIEW**http://google.com

  • *LAST_APP - Added in v0.9, will attempt to switch to most recent app other than what is showing (like ALT+TAB shortcut on a PC). Currently only works in versions of Android prior to Lollipop! Example: *LAST_APP

  • *TASKER= - Attempts to execute a Tasker task. Specify the task name after the equal sign. Optionally specify an additional value to pass to the task by appending a double asterisk ** and then the value. You can specify as many values as needed by adding more double asterisks ** and values. Within the Tasker task the values will appear as local variables %par1, %par2, etc. Example: *TASKER=Play a playlist**Dubstep Mixes**004

  • any shell command - Any text that doesn't start with one of the above tokens will will be executed as a shell command. If your command requires root privileges then simply prefix it with su -c . Example: su -c am start -n com.android.settings/com.android.settings.Settings

Be sure to check out the Configuration Samples page for ideas and to share your own config!

Advanced

Debug Terminal

Navigates to the Debug Terminal screen.