ECUPULSE HOME SUPPORT PRIVACY GET IT
MANUAL

EcuPulse User Manual

APPLIES TO · ECUPULSE FOR ANDROID 2.0.0 (GOOGLE PLAY RELEASE)
UPDATED · SEPTEMBER 8, 2026

EcuPulse is a free Subaru telemetry logger and diagnostics tool with an optional Wear OS companion. It communicates through a compatible OBDLink/STN adapter, a Tactrix USB cable or, on Subarus with a K-line, a K-line (KKL) USB cable, displays available ECU channels, records sessions and highlights configured events. Channel availability depends on the ECU, firmware, definitions and adapter. Alarms and unflagged logs do not establish that an engine or tune is safe. This manual describes the intended Play workflows; public release remains subject to the release audit and physical validation.

EcuPulse does not flash or edit a tune. Explicit diagnostic actions can clear codes or reset ECU learning and readiness. Save diagnostic evidence before using them. Set up the app while parked, let a passenger handle the device on the road, and perform acceleration tests only on a closed course.

CONTENTS

Before You Start

What you need

What EcuPulse reads that generic OBD apps cannot

With matching SSM definitions, EcuPulse can read channels such as feedback knock correction (FBKC), fine learning knock correction (FLKC), Dynamic Advance Multiplier (DAM) or Ignition Advance Multiplier (IAM), knock counters, fuel trims, A/F learning and boost target. The learned FLKC table needs its own supported definition and read operation. These are possible capabilities, not a universal channel list: a supported connection can still lack particular channels. See the Glossary at the end for what each one means.

Storage and optional synchronization

There is no EcuPulse account, analytics SDK or developer telemetry backend. Recordings are stored on your device; optional Wear synchronization can use Google's encrypted cloud relay, and Android can back up or transfer preferences, including saved snapshots. Export important logs before uninstalling; CSV files and imported definitions are excluded from automatic backup. See the full privacy policy.

First Launch

The welcome tour

The first time EcuPulse opens it plays a six-page tour: what the app does, the two worlds of DRIVE and GARAGE (with the ⌂ GARAGE button that leaves Drive), how a pull records itself, video with telemetry burned in and where to find it in Drive, a permissions primer, and a CONNECT MY CAR button that takes you to the connect screen. SKIP leaves it at any time; replay it later from SETUP ▸ ABOUT ▸ HELP. After the tour, each screen shows a one-time hint card the first time you open it. RESET FIRST-VISIT HINTS in the same place brings them back.

Permissions, and why each one is asked

Permissions are requested for the feature that uses them. Denial limits that feature: Bluetooth telemetry needs nearby-device access, video needs camera access, recorded sound and voice need microphone access, and GPS comparison needs precise location. Timing and CSV logging do not require camera permission.

PermissionWhyWhen asked
Nearby devices (Bluetooth)Talk to your paired OBD adapter. No adapter, no data.The tour's GRANT chip, or the first visit to CONNECT
NotificationsShow the ongoing notification Android requires while a log keeps running with the screen offWhen your first pull records
MicrophoneVoice commands (recognized on the device, never stored or sent) and sound in your own videosWhen you turn on voice, or start a video with REC AUDIO on
CameraThe video viewfinder and optional recordingWhen you open the viewfinder, or use START RUN with run video on
Location (GPS)Verify performance runs against GPS speed; choose Precise, approximate location cannot verify a run. No route is saved, nothing is uploadedThe first time you tap START RUN

Pair the adapter first

EcuPulse never scans for Bluetooth devices. Pair your OBDLink once in Android's Bluetooth settings, with the adapter plugged into the car's OBD port and the ignition on, and it then appears on the app's CONNECT screen. The adapter card lists paired devices whose names look like STN adapters (OBDLink, STN, MX+ and similar); if nothing matches, it lists every paired device with a NO NAME MATCH hint so an unusually named adapter can still be picked. With no adapter paired at all, the screen reads NO ADAPTER YET. and offers OPEN BLUETOOTH SETTINGS.

A Tactrix Openport 2.0 needs no pairing: plug it into the car and into your phone with a USB-OTG cable, allow Android's USB access prompt, and the app starts connecting by itself the moment the cable is attached.

A K-line (KKL) cable is never opened by itself, because the same USB chips are found in wideband gauge cables and other gadgets. Plug it into the car and into your phone with a USB-OTG cable and it appears in the USB card on CONNECT as K-LINE CABLE · SUBARU SSM. EcuPulse recognises a cable by its USB-serial chip, such as FTDI, CH340, CP210x or PL2303. If Android asks which app to open when you plug it in, choosing EcuPulse only brings up CONNECT. Tap the cable and allow Android's USB access prompt; Android asks again after every replug. The cable talks SSM on the K-line only, whatever the SSM TRANSPORT setting says. It has no CAN link to read a VIN from, so the vehicle card shows no VIN and safety limits use the unidentified profile. For the same reason, a car you already set up through an OBDLink or Tactrix appears as a separate car on the cable, with its own car setup and limits; your existing car and its settings come back the next time you connect through that adapter. Trouble codes read over SSM; OBD-II readiness is not available on this cable. The 4800-baud K-line also sets the polling rate, as it does for K-line on any adapter.

An adapter EcuPulse does not recognise, such as one of the many Openport 2.0 copies, can still be tried. So can any other USB device with a serial port that is not a cable's USB-serial chip: an Openport talks to the phone through a serial port of its own, so EcuPulse cannot tell a copy from, say, an Arduino without asking it. Plug it in; if Android asks which app to open, choosing EcuPulse brings up CONNECT and connects nothing. The adapter is listed in the USB card as TAP TO TRY AS A TACTRIX, with its USB ID. Tap it and allow Android's USB access prompt. EcuPulse first sends the adapter the Tactrix greeting, and nothing goes to the car unless it answers. If it answers, EcuPulse connects through it as a Tactrix, lists it as TACTRIX-COMPATIBLE from then on, and connects by itself when it is plugged in, as with a Tactrix. If it does not, the connect stops with THIS ADAPTER DID NOT ANSWER AS A TACTRIX OPENPORT and the adapter's ID; send that ID to support@ecupulse.com. EcuPulse never changes an adapter's firmware. An Openport 2.0 in the middle of a firmware update is listed as OPENPORT 2.0 IN FIRMWARE-UPDATE MODE; EcuPulse can use it once the update in EcuFlash finishes. Any other USB device, such as a storage stick, is listed with its ID as NOT AN ADAPTER ECUPULSE CAN USE.

Connect

Open CONNECT and tap your adapter. The link ladder climbs through SCANNING, CONNECTING, HANDSHAKE (SSM init and the ROM ID read) and STREAMING, where it shows the live sample rate. The vehicle card then fills in with the car's name, ROM ID, VIN, a parameter count, and a knock badge:

BadgeMeaning
KNOCK: FULL SSMMatching enhanced knock definitions are available; still check that the channels you need supply live data
KNOCK: ROM NOT IN DEFSNo exact matching enhanced definition is available; import a trusted definition for this specific ROM or use the available base channels
KNOCK: NOT ON THIS ROMKnock channels are not available through the current definition and connection

A HOLD TO DISCONNECT control (hold for two seconds) appears while connected.

AUTO checks the supported transport paths, including CAN on applicable older CAN-patched Subarus. The displayed vehicle year comes from the VIN; enhanced parameter addresses follow the ECU's ROM identity. A donor ROM can therefore have a different year from the car. When the connection is lost or replaced, Drive clears its old readings, loop state and traces until fresh data arrives.

The OBSERVED CHANNELS list combines proven compatibility aliases into one physical-source row and names the aliases. Channels with different addresses or storage widths remain separate even when their labels are similar. An alias row does not mean the ECU is polled twice.

The car setup wizard

The first time a car connects, EcuPulse opens the car setup wizard so the thresholds, alarms and gear detection fit your car rather than a generic Subaru. SKIP FOR NOW in the header postpones it; you can come back to it any time.

  1. CAR: the profile name (pre-filled, editable), the VIN and ROM ID as read from the ECU, and your units: PSI or BAR, °F or °C, AFR or λ. The VIN arrives first; CAL / ROM ID reads READING… until the ECU answers, or NOT READ with the reason if the connection fails, in which case retry from CONNECT.
  2. GEAR: the platform (AUTO, TURBO EJ, TURBO FA or NA), the transmission (AUTO, 5MT, STI 6MT, WRX 6MT or CVT) so the dash can show the current gear, the vehicle weight and the tire size. If the ECU reports a VIN the weight is pre-filled from the model's curb weight plus a driver allowance; correct it to your car's real weight, since the dyno estimate and performance runs use it. Enter the tire size from the sidewall (for example 245/40R18) or a measured rolling circumference in millimetres; the virtual dyno uses it for road speed (see Virtual dyno). Leave it blank to use the ECU's road speed.
  3. BOOST (turbo platforms only): the fuel-cut ceiling, the over-target caution margin and the boost band, each with a RESET to the ROM default.
  4. LIMITS: redline and shift RPM, the WOT AFR target range, and the caution and danger thresholds for AFR, FBKC, FLKC, DAM, intake temperature, injector duty and coolant, pre-filled from the ROM profile. Rows that do not apply to your platform are hidden.
  5. ALARMS: the built-in alarm rules for your platform, seeded from the limits you just set, each with a plain-language summary and an on/off toggle.
  6. DONE: a summary of what will be written, a RUNNING A WIDEBAND? toggle that opens the wideband wizard right after, and FINISH SETUP.

Rerun the wizard any time from SETUP ▸ CAR SETUP, or from the RE-RUN CAR SETUP button on the vehicle card. If you re-flash the ECU and its calibration ID changes, EcuPulse notices on the next connect and offers to review the platform, limits and alarms for the new ROM; choose Later and it stays quiet until the ID changes again.

Units and defaults. A fresh installation defaults to imperial units and AFR: the dash uses psi, °F and mph. Metric switches the dash to bar, °C and km/h; the pressure and temperature selectors share that metric/imperial choice. AFR versus lambda is a separate preference. Generic OBD metric pressure can be kPa, and log/review channels retain their recorded units: read each label rather than assuming every screen or imported CSV uses the dash units. The app's AFR/lambda conversion uses a gasoline-equivalent 14.7:1 scale. Profile thresholds are reference settings, not limits measured from your tune; check their provenance and suitability for the actual car.

Getting Around

EcuPulse has two worlds.

Next to the rail sit the car chip (your car's name, or NO CAR; tap it to go to CONNECT) and the connection dot with the live polling rate, for example 9.8 HZ. From DRIVE, the amber-outlined ⌂ GARAGE button at the bottom left of the dash returns to the garage screen you last used. The system back button returns to DRIVE from anywhere in the garage; from DRIVE it leaves the app, and while a pull is recording it asks for a second press first.

If an alarm fires while the link is not live, the banner is prefixed [STALE], [RECONNECTING] or [DISCONNECTED] so it is never mistaken for a current reading.

Landscape and portrait are separately designed layouts rather than one layout squeezed to fit, so rotate the device to whichever suits the mount.

DRIVE: The Live Dash

Reading the dash

The bottom rail

The Drive controls include the ⌂ GARAGE button, connection status and live Hz, a MIC chip when voice commands are on, the preset picker, EDIT, the VIDEO/DASH shortcut, a separate STOP VIDEO action during video recording, START LOG/STOP LOG, and MARK. Narrow screens keep the Video shortcut visible beside a scrollable navigation row.

Presets and pages

STREET PULL is the only built-in preset, showing RPM, boost, AFR, knock and heat readings. Tap the preset name to choose a saved dashboard or create a named copy with New preset. Use EDIT to customize gauges and add up to three gauge pages per orientation. Custom presets can be renamed or deleted; customized older presets are preserved on upgrade. Swipe through the gauge pages to reach Video after the last page, or tap the visible VIDEO shortcut. DASH returns to the previous gauge page.

Editing the dash

Tap EDIT (or long-press the preset name) to open the gauge editor for the current preset.

Lighting modes

The dash has day, night and sun palettes. In AUTO (the default) it follows the ambient light sensor: night below about 10 lux, sun above about 8,000 lux, with a few seconds' hold so it does not flicker under streetlights. Pin DAY, NIGHT or SUN in SETUP ▸ APPEARANCE.

Alarms on the dash

When a rule fires, a banner floods across the top of the dash with the rule name and the offending value: amber for a medium or low rule, pulsing red for a high one. Tap it, or say SILENCE, to silence it. Rules that are silenced but still unsafe dock in a static red ribbon below the banner until their values return to safe. See Alarms for the rules themselves.

Recording Data

Tap START LOG on Drive or in Logs to record your selected parameters continuously from that moment. STOP LOG saves it. Throttle lift and finishing a performance run do not stop a log you started yourself. The recorder runs app-wide, so it keeps capturing with any screen open or the screen off. Starting a data log does not start video.

Automatic pull recording is an optional throttle-triggered flow:

If the connection is interrupted mid-pull, the recorder seals what it has and flags the interruption LOST. A separate watchdog also seals a recording after about five seconds without fresh frames; reconnecting does not splice a later session into that pull.

Each saved pull is auto-flagged so you know at a glance whether it needs eyes. The pull list shows the flags as word chips; the review chart shows them as letters.

List chipChartMeaning
2 KNKKKnock: FBKC pulled timing to −1.4° or beyond. Red when the pull reached your danger threshold, amber otherwise
1 LEANLAFR crossed the lean-danger threshold while the analysis load gate was met (throttle at least 90% and boost above 5 psi). This gate does not read commanded open-loop status
OVEROOverboost: boost ran past the target band for at least a quarter second
CUTCBoost reached the configured fuel-cut reference. The flag does not prove that the ECU actually cut fuel
GAPGAn inter-row interval exceeded the larger of 1.5 seconds and three times the log's median interval
LOST×Signal lost: the adapter dropped and the pull was sealed early

Interruptions and timed logs. Connection loss, missing frames or a recording failure can end a manual log. A custom trigger's timed log stops after its configured duration.

Background and automatic recording. A manual log continues with the screen off; Android shows an EcuPulse is logging notification. If automatic pulls are armed, Drive shows Auto pulls paused while logging while the continuous log captures the same driving data. Stopping the log restores the saved automatic-pull setting after the saved confirmation. There is one data recording at a time. Older Cruise/BG files remain available in Logs with their original names.

Markers. Tap MARK, press the mapped hardware button, say MARK, or double-tap the watch to drop a marker into the current log. Saved markers show as neutral M chips in review and as chapters in a video recorded with the pull. Open ⋮ (Review details) ▸ Saved markers for their labels and exact timestamps. Selecting a marker switches to the full log on the time axis and places the cursor on the nearest plotted sample; the saved timestamp stays unchanged. This list also works with TalkBack and keyboard navigation.

Trigger settings. SETUP ▸ LOGGING holds the AUTOMATICALLY RECORD PULLS switch, the trigger window (START and STOP throttle percentages), and the LOG PARAMETERS list with presets you can load and save. The pre-buffer is a fixed three seconds. The only trigger channel is throttle position.

LOGS: Browsing and Reviewing

The list

The header counts your logs, newest first. Each row has a colored edge bar and up to three flag chips colored by the worst severity (or neutral NO FLAGS; missing or unlogged channels cannot be assessed), its name, a meta line with the source, length, parameter count and time, and a peak line such as PK 19.2 PSI · 6,700 RPM · AFR 11.4. A recording still being analyzed reads ANALYZING… for a moment after it saves. The filter bar offers ALL, FLAGGED and TODAY. The Source picker distinguishes manual logs, automatic pulls, performance logs, timed triggers and switch triggers. Older recordings with no saved origin show Source unspecified.

New logs are named by source and date/time. Existing files retain their names, including older PULL and BG recordings and imported filenames. START LOG and STOP LOG control the same recording shown on Drive. To remove a saved log, long-press it and use HOLD TO DELETE.

Recording identity. A CSV without saved recording identity shows DATE UNKNOWN and has no recorded ROM. TODAY includes only known recording dates; import time and file modification time are not recording dates. List order alone does not establish when a historical recording was made. Without a known start, snapshots and video telemetry cannot be automatically aligned to that log by wall-clock time. Existing positive dates and ROMs in older sidecars are preserved; when their capture context is absent, the source description warns that their original provenance is unverified.

Recording context and thresholds. Open the review's ellipsis menu ▸ Review details & actions ▸ Channel quality and source, or read the recording export, for the saved source. Native recordings capture context and thresholds at recording start. Review, comparison and unsealed recovery prefer that valid frozen threshold snapshot, then the recording's preserved legacy ROM profile, then generic defaults. Each comparison log resolves its own references. Current vehicle limits are never substituted into an older ROM-only recording. A preserved legacy profile still does not prove which limits applied at the time; unknown imports use generic references, which do not identify or validate the historical tune.

Review

Review is the flagship screen. The X axis is RPM by default whenever the pull has a real full-throttle window, so pulls line up run to run instead of drifting with launch timing; switch to TIME to see events in order.

Parameters. Logged numeric channels are available for review; missing cells mean unavailable, not zero. Unknown channel roles or units may prevent threshold assessment even when a trace can be drawn. Tap ▸ PARAMS under the chart for a row per logged channel with a checkbox, its color and its recorded value at the cursor, and use the view chips (KNOCK, FUEL, BOOST, ALL) to switch sets. + SAVE keeps your own selection as a view; long-press a saved view to delete it. The choice sticks between pulls. Inspect data-quality and coverage notes: repeated rows do not prove each ECU channel was freshly sampled, and display reduction is not the raw CSV cadence.

Scrubbing. Drag anywhere on the chart to move the cursor. The panel shows each visible channel at that point with its min, max and average over the wide-open-throttle window and the delta against the ghost. ▶ replays the pull in real time, ‹ and › step one sample, and A sets a range mark so the panel reports the span from A to the cursor. The amber band under the scrub bar is the WOT window.

WOT ONLY and FULL LOG. WOT only trims everything to the full-throttle window (throttle at or above 90%), which is useful context for comparing loaded operation. Full log shows the whole recording. A log with no full-throttle window offers only FULL LOG, so it can never be mislabeled.

Ghost. The next-older pull is drawn as a faint second trace with deltas in the panel; select two pulls in the list (long-press ▸ SELECT FOR COMPARE) to ghost any pair. In TIME mode a GHOST OFFSET nudge (−, RESET, +, in half-second steps up to ten seconds) lines up an imported log that shares no trigger clock with yours.

Flag chips. The flags appear as small squares along the top of the chart at the moment they happened: K knock, L lean, O overboost, C fuel cut, G data gap, × signal lost. Tap one to jump the cursor there.

Knock map. An 8 by 5 grid of RPM against load, counting knock events over the WOT window, where an event is the feedback knock correction stepping half a degree or more further into retard between two samples. Amber cells saw one or two events; red cells saw three or more, and the line below reads, for example, 4 KNOCK EVENTS OVER 312 SAMPLES. Repeated correction at similar RPM and load deserves investigation with your tuner; it does not by itself distinguish combustion knock from noise or a mechanical cause.

⇪ CSV in the header shares a recording ZIP containing the unchanged raw CSV, its existing metadata sidecar when available, and a readable context manifest. Use the ellipsis menu's Review details & actions for review information, including Channel quality and source. Rotating the device keeps the review mode, axis, filter, ghost offset, cursor, scatter/table channel choices and bin count.

HEALTH: ECU Learning State

HEALTH displays the available current learning and correction channels, plus observations accumulated during the live session. It cannot reconstruct unrecorded driving history. Live cards update while connected; the learned table requires an explicit read. Disconnected, the screen dims and reads NO DATA — CONNECT AN ADAPTER.

A cell whose channel has not resolved yet reads AWAITING DATA.

SNAPS: Event Snapshots

Snapshots preserve available configured readings around an event, even without a pull recording. The trace window is two seconds before and one second after the trigger, on a 100 ms trace grid. That grid does not establish a 10 Hz ECU sampling rate. Up to eight relevant channels receive traces, including the trigger channel; the value grid contains the captured configured readings. Missing history, interrupted capture or storage limits can shorten or omit traces.

EcuPulse keeps the ten most recent snapshots; older ones roll off. Alarm rules with the snapshot action also land here.

PERF: Runs, Timers and the Virtual Dyno

Performance runs

A Performance Run starts timing and a linked pull from one button, with optional phone video. Record video with run is off by default. Enable it explicitly before starting if you want a clip; your saved choice is retained. The option is locked while a run is active. Configure the overlay and microphone in VIDEO.

  1. Tap START RUN (the car must still be connected when permission prompts finish). The app requests location for GPS comparison, and camera/microphone only when the selected video/audio options need them. Permission requests are tracked separately, so enabling video after a GPS-only run can still request camera access. A run can proceed without camera or GPS; missing microphone access means no recorded audio. GPS comparison requires valid fixes and does not certify elapsed time.
  2. Stage. Bring the car to a complete stop. After half a second at standstill the run is ready and the screen says LAUNCH WHEN READY; the button reads CANCEL until you launch. If you never stop, for example when staging a rolling 60 to 130, the rolling benchmarks arm on their own after thirty seconds (RANGES ARMED).
  3. Launch. The clock starts at the first movement. The run cell shows the live clock, the current gear and a callout for each split as it lands (for example 1/4 MI 12.59 @ 103 MPH), the ladder builds a row per split below it, and a knock event flashes the cell.
  4. Finish. The run ends by itself a second and a half after the quarter mile, when you have been slowing for a second past the 60-ft mark, or after two minutes; STOP RUN ends it early. It saves as a run file with a timeslip image. Only qualifying valid results update the bests board; interrupted runs are not valid bests.

The linked log and optional clip are available from the saved run when recording succeeded. If a continuous manual log is already active, it keeps running and the performance result saves independently; the full-drive log is not presented as a run-specific log or used for whole-drive peak statistics in that run. Video failure does not invalidate timing by itself. AUTO REC WITH PULL does not override the Performance video choice while a run is active. After completion or cancellation, automatic pulls can again start configured automatic video.

The timeslip

GPS is read only while a run is in progress and the app is on screen. Backgrounding the app or losing the connection interrupts the run; saved partial results carry that status and do not become valid bests. Coordinates and route are never saved: derived comparison information is kept on the run. The run remains associated with its starting car profile.

Run history and bests

RUNS · THIS CAR shows the best 0 to 60, the best quarter mile with its trap speed and the best 60 to 130 for the current car profile, above a list of recent runs. Tap a run for its detail: the timeslip image, ⇪ SHARE SLIP, ▶ OPEN VIDEO, ≡ OPEN LOG (opens the pull in review) and HOLD TO DELETE RUN.

Timers

The simple timers on the same screen are independent of runs. Tap ARM TIMERS and the 0 to 60, quarter mile and 60 to 130 cells read ARMED · AWAITING LAUNCH until the car launches, then hold their results until RESET. They use the ECU's wheel speed.

Virtual dyno

START PULL RECORDING opens a capture window for the dyno section; this control does not itself create a CSV log. While it is open, make a wide-open-throttle pull in one gear (third is typical) from low to high RPM, then tap STOP PULL RECORDING. The curve updates while you record.

Only part of the window counts. The dyno takes the longest sweep in a single gear during which the throttle stayed at or above the automatic-pull START threshold in SETUP ▸ LOGGING (90% by default, never below 50%). Idle, cruise, the lift, coasting and gear changes are left out. An RPM step the sweep skipped at a slow polling rate is simply not plotted; it is never filled in from an off-throttle reading. If the window held no such pull, the chart says so and the previous peak stays.

The PEAK WHP cell, the chart caption and the PEAK WHP row under LEGACY TIMERS · LAST SAVED all show the same figure. The cell's subtext and the method chip name the method that produced it:

Road speed. For the acceleration method road speed matters about twice as much as weight: a speed that reads 3% low gives a figure about 6% low. The speed chip under the chart names the source:

Changing the tire size, gearbox or GPS check re-runs the last pull recorded since the app started with the new inputs, and updates the saved peak. The result is wheel power under road load. Chassis dynos read differently from it and from each other: an inertia dyno such as a Dynojet often shows 10% or more above a load dyno for the same car.

Torque is derived from the power and RPM in both cases. The feature does not measure the car's drag, its driveline loss or the airflow calibration.

With plausible ECU barometric pressure and intake temperature, the app applies a correction formula referenced to 990 mbar and 25 °C. The chip displays its factor, for example 3,395 LB · SAE J1349 ×1.03; without both inputs it reads UNCORRECTED. The UI's SAE label does not establish SAE J1349 test compliance or equivalence to a dyno shop's result. Humidity is ignored and IAT stands in for ambient temperature; heat soak can over-correct. No fixed accuracy is established. Use the estimate as qualified context when comparing similarly recorded runs.

CODES: Trouble Codes and Readiness

CODES reads diagnostic trouble codes using the supported SSM or standard OBD-II path for the current connection.

EcuPulse reads codes natively over SSM first and falls back to the adapter's standard OBD-II path if that read fails. When the SSM read finds no stored code, the app also checks the standard OBD-II list and shows codes from both, so a reading of no codes takes a few seconds longer. A K-line (KKL) cable has no standard OBD-II path, so on one the SSM read stands alone: an empty stored list there says so instead of showing a green all-clear, and if the check engine light is on, read codes with an OBD-II adapter. When neither can answer, the screen says the read or clear is not available on this connection rather than showing a false all-clear; readiness in particular needs the generic OBD-II path.

VIDEO: Telemetry on Video

Record track video on the phone with live telemetry burned into the picture. Video needs Android 10 or newer: on Android 8.1 and 9, Drive has no VIDEO button or page, and Performance runs have no video option.

Burned-in capture targets 720p and configures a 30 fps encoder; actual delivered frame rate can be lower and is not guaranteed. Clean clips use the camera's HD setting. Videos are saved to your device's media library in a Movies/EcuPulse album, so they appear in your gallery app as well.

Video requires the app to remain in the foreground. Going Home or locking the screen ends capture; CSV logging has its own background lifetime. Check RECORDINGS after interruption: a usable partial clip may be saved, while absent or invalid output is reported as a failure. Wait for saving to finish before assuming a clip exists. Opening the gallery releases an idle preview camera; an active recording retains ownership while you navigate within the app.

RECORDINGS lists every clip with a thumbnail, its date, length and size, and a chip counting its alarms or marks. Tap one to play it: chapter chips along the top jump to two seconds before each event, and SHARE and HOLD TO DELETE are on the same screen.

ALARMS: Rules That Yell

Alarms are headless rules that watch the live stream whether or not the dash is on screen.

How an alarm behaves

  1. Fires. The banner floods the top of the dash, the strip and the offending cell flood, a tone or your own sound plays, and a HIGH rule also speaks its phrase. Depending on the rule it drops a marker into the log, captures a snapshot and buzzes the watch.
  2. Silenced. Tap the banner, say SILENCE, or tap the watch. A latching rule becomes LATCHED: a static ribbon on the dash and a count in the strip, so you know it happened even after the value recovers.
  3. Clears. The latch releases only when the value returns to safe. That is the point: a knock that came and went is still a knock you need to chase. If the channel drops out instead of recovering, the alarm holds.
  4. Re-triggers if the value worsens while latched, by more than the rule's worsen step.

Severity

SeveritySound
HIGHTone or custom sound, plus the voice phrase when voice is on
MEDA shorter tone or custom sound; never spoken
LOWVisual only, by design

Latching, the log marker, the snapshot and the watch haptic are per-rule choices at any severity.

The default rules

The car setup wizard seeds rules for your platform from your limits: knock (HIGH, latching), lean under boost (HIGH, latching, turbo cars only: judged only on AFR readings taken while boost is above 5 psi, and only once they have stayed lean for a second, so one lean reading at tip-in does not set it off), coolant hot (HIGH, latching), overboost (MED, one psi below the fuel cut), intake heat soak (MED), injector duty (MED), and battery low (LOW, ships disabled). Rules you write yourself are never touched by a reseed.

The rule editor

Open ALARMS for the ledger, grouped HIGH, MED, LOW, each row with its arm toggle, name, a plain-language condition line and LATCH and VOICE chips. Tap a rule to edit it, or + NEW RULE.

SETUP

SETUP is search-first: type in SEARCH SETTINGS to filter the sections by name or description. The sections:

DimeMod channels. On a normal SSM CAN or K-line connection, EcuPulse automatically checks for supported DimeMod 2.4 build 0 firmware and verifies its channel descriptor using read-only requests. Standard telemetry starts while discovery proceeds. Enabled channels appear after verification; VIN year is not used to guess their addresses. ECU DEFINITIONS shows discovery status and an optional ROM-import fallback. Importing a file does not flash the ECU or bypass verification, and the app retains descriptor information rather than the full ROM file. Other DimeMod versions and hybrid passive-CAN discovery are not covered by this implementation. Discovery can miss an unfamiliar layout; a connection or plausible value alone does not establish support. Unavailable, disabled or stale DimeMod inputs are withheld.

Wideband AFR

A correctly installed and calibrated wideband adds useful mixture evidence under load. Select the controller output and verify it against the gauge; an in-range value alone cannot verify wiring or scaling. SETUP ▸ WIDEBAND enables the selected source; select OFF to disable it.

  1. SOURCE: where the gauge's signal comes from. REAR O2 is the usual Subaru setup, the gauge's analog output wired into the rear O2 sensor input the ECU already reads; TGV reads it from a TGV (tumble generator valve) position sensor input instead: pick LEFT or RIGHT for the side you wired. The ECU reads a TGV input in 0.02 V steps, about 0.05 AFR, coarser than the O2 inputs, and if your ECU does not report that input, CHECK shows no signal. FRONT O2 and OTHER (any ECU parameter) cover other wiring; SERIAL reads the gauge's own data stream through a USB-serial cable into the phone, with a PROTOCOL (AEM UEGO, Innovate LC-2 or MTX-L, PLX, generic ASCII) and BAUD setting. A serial gauge runs alongside the Bluetooth ECU link.
  2. SCALING (analog sources only): use the controller's documented output curve, not the oxygen sensor model. Supported presets include the original AEM X-Series 30-0300 valid output range, UEGO 30-4110, factory Innovate output 1, PLX and factory linear Zeitronix. Programmable or different controller versions require their own calibration. Bosch LSU sensors alone do not provide a universal analog curve; Link CAN Lambda and Haltech CAN controllers are not analog presets. An unverified NGK Powerdex preset is disabled; use a documented CUSTOM slope and offset when appropriate.
  3. CHECK: inspect the live pin voltage, computed AFR and gauge status. IN RANGE means only a plausible numeric range; independently compare with the physical gauge. Warm-up, fault and stale serial frames are withheld. Stock front-sensor AFR is not a substitute for verifying the controller output under load.

For SERIAL, choose CONNECT USB GAUGE and the correct adapter port, then grant USB permission. DISCONNECT closes it; changing source or switching wideband off also closes the gauge link. The ECU and wideband cannot own the same USB device. AEM CAN decoding is not a live USB-CAN connection feature. AFR is represented on a gasoline-equivalent 14.7:1 basis; lambda is fuel independent. Changing tank fuel does not change a gauge's encoded output scale.

Once enabled, WIDEBAND AFR and its lambda twin are available as channels, and AFR displays or analysis that prefer a wideband can use them. An analog source's ECU input is read whenever wideband is on, whether or not that channel is on a gauge or in the log list. Check the actual dash selection, log parameter list and alarm conditions; enabling a source does not rewrite old CSVs or replace every explicitly selected stock channel. Review needs the wideband values to have been recorded. Missing or stale wideband data is not evidence of a safe mixture.

Formulas

SETUP ▸ FORMULAS defines calculated parameters. Give the formula a name and unit, then build it from the PARAMETERS chips (one per channel the ECU is streaming, so connect first) and the FUNCTIONS chips: + − × ÷, parentheses, abs, min, max, deriv (rate of change per second) and smooth (a trailing average over the seconds you give it). A formula can reference another formula. Live validation re-evaluates on every keystroke and reads = 14.700, SYNTAX ERROR, or CHECK NAMES / MISSING LIVE VALUE. Malformed expressions cannot be saved. A syntactically valid expression may still lack live inputs; missing values are not replaced with zero. Saved formulas can be selected for dash cells, logging and alarm rules, and reviewed when logged; tap one to edit it, ✕ to delete it.

Car profiles

SETUP ▸ CAR PROFILES snapshots settings such as alarms, transmission, weight and tire size, dash layouts, logging parameters, appearance, units and protocol, and loads another profile while the car is disconnected. Threshold and platform edits remain in their own storage; use VEHICLE & PROTOCOL ▸ EXPORT PROFILE or IMPORT PROFILE to transfer those limits separately.

Limits belong to a vehicle and ROM. Two cars with different VINs keep separate USER limits even when they run the same ROM. Learning or losing the ASCII CAL name on an unchanged ROM does not select another set of limits. A genuinely different ROM has its own set. When no valid VIN is available, the app uses a separate unidentified profile for the available ROM/CAL; it cannot distinguish two physical cars with the same reported IDs in that state. Unidentified edits do not become a known car's limits automatically. Export/import them explicitly if they should move to an identified car.

Earlier saved limits with a matching recorded VIN and ROM migrate into missing vehicle entries. Existing USER values, explicit not-applicable values and resets are kept; conflicting entries remain listed for review. If an older profile has no recorded owner, REVIEW EARLIER LIMITS shows the saved choices. Select Use for this vehicle only after checking that they belong to this car and tune, or Keep separate to leave them preserved. Assigning an older profile does not authorize copying it automatically to another VIN or ROM.

Voice and Hardware Buttons

Both are ways to run the app without taking your eyes off the road. SETUP ▸ VOICE & CONTROLS has one switch for each: VOICE COMMANDS (off by default) and HARDWARE BUTTONS (on by default).

Voice commands

Recognition runs entirely on the device: the audio is never stored and never sent anywhere, and on a device without an on-device recognizer voice simply stays off. Android 11 and older have no on-device recognizer, so voice needs Android 12 or newer. Listening is active only while the DRIVE screen is showing and pauses while the app itself is speaking. The MIC chip in the dash rail shows the state: green while listening, dim while paused, MIC N/A when the device has no on-device recognizer, and a red MIC! when the microphone permission is missing (tap it to grant).

SayDoes
START LOG (or START LOGGING) / STOP LOGStart or stop a manual log
MARKDrop a marker into the current log
NEXT PAGEMove to the next dash page
SILENCESilence the active alarm (a latching rule latches)
STATUSSpeaks a short status: DAM, boost, intake and coolant temperatures and the A/F trim, whichever are live

Hardware buttons

On DRIVE, the phone's buttons drive the app, which also works from a steering-wheel or media remote: hold volume up for about half a second to start or stop a log, press volume down to drop a marker, and press media next to change dash page. The map is fixed, and on the dash the volume keys belong to the app, so a short tap does not change the volume. The log button is ignored while no car is connected.

Wear OS Companion

The companion is for Wear OS 3 or newer. Pair the watch to the phone using the watch manufacturer's supported companion app, then install EcuPulse's watch app when available through Play. Live readings need the phone app running and connected to the car. Its settings live on the phone under SETUP ▸ WEAR OS: SYNC TO WATCH (off by default) sends telemetry to the watch, WATCH REMOTE (on by default) accepts gestures from it. The watch relays phone data and commands; it does not independently connect to the ECU or verify a reading.

Your Files

WhatWhere
LogsApp storage, one CSV per recording (ecupulse_log_20260902_193045.csv) with a .meta.json sidecar carrying its name, peaks, flags, markers and available recording identity/context. Share from LOGS
Performance runs and timeslipsApp storage, one run file and one slip image per run. Share the slip from the run's detail
VideosYour media library, Movies/EcuPulse, visible to your gallery app
Snapshots, alarm rules, presets, settingsApp storage
Threshold and car profile exportsWherever you choose in the file picker when you export

Recording files use the app's folder under Android/data/com.ecupulse.app/files/ (pulls under Documents/EcuPulse/, runs under Documents/EcuPulse/runs/, slips under Pictures/EcuPulse/slips/). Preferences and some records use separate app-managed storage. Android may restrict direct folder access; use the share and export controls. Uninstalling removes app-owned data, so export important recordings and profiles first. Videos in the media library remain separate from app-owned storage.

Troubleshooting

My adapter is not listed on CONNECT. Bluetooth adapters must be paired in Android's Bluetooth settings first; the app does not scan. If it is paired and still missing, check that Bluetooth is on and that the app has the nearby-devices permission. If it is listed under NO NAME MATCH, it may not be an STN-based adapter: EcuPulse is built for OBDLink MX+, LX and similar, and the Tactrix Openport 2.0, and ELM327 clones cannot keep up with SSM. Every USB device plugged in through a USB-OTG cable is listed in the USB card: a cable built on a USB-serial chip as a K-line cable, any other adapter or serial device as TAP TO TRY AS A TACTRIX, and anything else with its ID as NOT AN ADAPTER ECUPULSE CAN USE. If Android does not offer EcuPulse when you plug an adapter in, open CONNECT yourself. If the adapter is missing from the list, check that the phone supports USB OTG, that the OTG cable carries data, and that the wideband gauge isn't using the cable: a cable the gauge holds is left off the list. The phone must also power the cable: if the cable has a light that comes on when it is plugged into a computer but stays dark on the phone, the phone has not switched it on, and Android cannot see it. Some phones cut power to some cables. A powered USB hub between the phone and the cable usually fixes that, or try a different cable.

The link climbs to HANDSHAKE and stops. The ECU may not have answered the SSM initialization. Check that the ignition is on, the adapter is powered, and no other app is holding it. On a Subaru without a CAN bus (most models before 2008) a pause of about five seconds before the handshake is normal: the VIN check runs on the same wire as SSM, and the ECU only answers SSM once that check has timed out. AUTO can try another supported transport; if detection keeps choosing incorrectly, use SETUP ▸ VEHICLE & PROTOCOL ▸ SSM TRANSPORT. With no matching enhanced definition, only supported base channels may remain available. A basic connection does not validate enhanced channel addresses.

A K-line cable stops with an error. NO SIGNAL ON THE K-LINE means not even the cable's own echo came back: the cable is not plugged into the car's OBD port, which powers it even with the ignition off, or the USB device is not a K-line cable. THE ECU DID NOT ANSWER ON THE K-LINE means the line works but the ECU stayed silent: turn the ignition on, and note that the BRZ and 2015 and later Subarus have no K-line. A cable built on an uncommon USB chip may also fail here; an FTDI-based cable is the safer choice.

The data went grey and the rail says STALE. No frame has arrived for a few seconds (two to eight, scaled to how fast your transport normally delivers). The app re-initializes silently and never shows a popup. A Bluetooth link then walks the retry ladder, 1, 2, 4 and 8 seconds and then every 8 seconds indefinitely, and the ladder shows the attempt count; a Tactrix or K-line cable link restarts its polling in place a few times and then disconnects, and USB never reconnects on its own, so reconnect it by hand or replug the cable (a K-line cable then needs a tap on CONNECT). If a Bluetooth adapter never recovers, power-cycle it.

The polling rate is low. Bandwidth is shared across the requested channels. The CONNECT rate is measured stream delivery; individual channels can update more slowly. Transport estimates are planning figures, not guaranteed vehicle rates. Reduce optional log channels and inspect CSV timestamps and missing values. Priority polling cannot guarantee that safety channels never slow down.

The knock badge says ROM NOT IN DEFS. Play requires an exact enhanced definition for your ROM. Import a trusted matching RomRaider logger XML under SETUP ▸ ECU DEFINITIONS, then reconnect and verify channels. Plausible values at a neighboring RAM address do not identify a channel, so sibling borrowing and discovery are excluded from Play. Base channels may remain available.

No knock or DAM cells. Check the exact ROM definition, available channels and transport limitations on the vehicle card. Naturally aspirated does not by itself mean an ECU has no knock control; it means boost-specific assumptions and rules may not apply. An unavailable channel cannot be assessed.

The pull never triggers. The trigger is throttle above 90% by default; a partial-throttle run does not count. Check AUTOMATICALLY RECORD PULLS and the window in SETUP ▸ LOGGING, and confirm the throttle channel reads correctly on the dash. Use START LOG for a manual log meanwhile.

Wideband CHECK shows NO SIGNAL. A pin voltage of — V means no reading is arriving from the ECU input: connect to the car first, then check the SOURCE matches the wire you used. A voltage with no AFR means the controller's output is outside its preset's valid range (the AEM X-Series sits below 0.5 V while it warms up and above 4.5 V on a sensor fault), or the selected controller has no analog preset.

Wideband reads nonsense. Rerun the wizard's CHECK step and verify the input, controller's documented output curve and physical gauge reading. Wrong wiring or scaling can still produce plausible in-range numbers; the app's numeric range check does not prove calibration.

Voice does nothing. Voice listens only on the DRIVE screen and only with VOICE COMMANDS on and the microphone permission granted. Devices without an on-device speech recognizer show MIC N/A and cannot use voice; the buttons still work.

The watch shows no readings. Live values need the phone app running and connected to the car, SYNC TO WATCH on under SETUP ▸ WEAR OS, and the watch paired to this phone with EcuPulse installed on it. DISCONNECTED or NO DATA is expected when no vehicle data is available.

Something is wrong and I want to report it. SETUP ▸ DIAGNOSTICS ▸ REPORT A BUG opens an email with your app version, source revision, candidate identifier, device, Android version and ROM ID filled in. Add the car's year and model, the adapter, what happened versus what you expected, screenshots, and, if a value or flag looks wrong, the pull's exported CSV.

Glossary

Support

Email support@ecupulse.com for bugs, feedback and feature requests, or use SETUP ▸ DIAGNOSTICS ▸ REPORT A BUG for an email pre-filled with your build details. The FAQ is at ecupulse.com/support.

EcuPulse is not affiliated with Subaru Corporation. Product names are trademarks of their respective owners and are used for compatibility reference only. Tune at your own risk, on a closed course.

↑ BACK TO TOP
© 2026 ECUPULSE INSTRUMENTS · NOT AFFILIATED WITH SUBARU CORP · TUNE AT YOUR OWN RISK, ON A CLOSED COURSE HOME SUPPORT PRIVACY