Transmission Control

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Transmission Control

TM16 FAQ

Supported Transmissions

The TCM has been designed to be as universally applicable as possible. In much the same way that an aftermarket engine management system doesn’t really know what engine it’s running, the TCM is never explicitly set to run a specific transmission. There’s no “Select your transmission” option anywhere. Instead, each applicable input, output and sub system is configured on a case by case basis to build a full configuration. Different transmissions will use different combinations of sub systems.

The TCM’s firmware is fully configurable in every aspect, with almost nothing hidden behind presets or obfuscated away from the tuner. This means that it is theoretically possible to control most modern transmissions, once you have physical control of the hardware (in some cases this will involve removing and bypassing mechatronics units).

Building a transmission config from scratch is a complex task that requires significant knowledge of all systems involved, but it is very much possible.

We are testing and building applications specific configurations in-house which will dramatically speed up the process of commissioning and tuning your transmission. Below is a list of the transmission that we’re focussing on. If you transmission isn’t in the list, that doesn’t mean it cannot be supported, it just means you might have to attempt it yourself.

Transmission Development Status

TransmissionTypeStatusBase CalNotes
ZF 8HPMulti-clutchSupportedIncluded
Nissan GR6DCTSupportedIncluded
Getrag GS7DCTSupportedIncluded
Porsche PDKDCTPlannedTBA
VW DQ500DCTPlannedTBA
Tremec TR-9080DCTPlannedTBA
Audi DL800DCTPlannedTBA
GM 6L80EMulti-clutchPlannedTBA
Ford 6R80Multi-clutchPlannedTBA
Ford 10R80Multi-clutchPlannedTBA

Supported ECU Platforms

The TM16 integrates seamlessly via CAN with all Emtron ECU’s, allowing for fully torque modelled shifting and down shift rev-matching with minimal setup complexity. This is by far the best way to achieve an OEM quality driving experience.

Additionally, the TCM also has a two fully open and configurable CAN bus nodes, meaning that users can send and receive any data required in any format to integrate almost any third party ECU. The level of control available is ultimately up to the ECU in question and will vary from extremely crude to fully featured depending on the ECU in question.

Critical signals such as Engine Speed and Pedal Position can also be inputted via physically wired inputs.

Integrating a third party ECU requires a solid understanding of all the systems in use, as well as a solid understanding of CAN bus communications.

The engine ECU must be capable of modelling and reporting accurate engine torque as well as abiding by torque reduction requests and meeting down shift rev match targets.
Usage outside of the Emtron ecosystem is provided as is. It is up to the end user to determine if a platform can be used and how to do so. Emtron cannot provide technical support for third party systems.

CAN Integrations

As well as a fully user definable CAN bus, the TCM does have some preset CAN data sets which are always being added to over time.

Available CAN Presets

PresetDirectionNote
Emtron Transmission ControlRx & TxEmtron torque modelled CAN integration
Nissan R35 GTR TCMRx & TxBuild Package
BMW F-Series ShifterRx & Tx

Shifter Inputs

The TCM can use a wide variety of shifters including CAN bus, analog, digital switch arrays, individual switches, CAN keypads, or combinations of any of the aforementioned input types.

For more information on Shifter Inputs and Drive Modes, refer here.

Drive Modes and Map Switching

Shift tables can be switched using inputs from CAN bus, rotary switches, fixed switches, sensor input and user logic.

Table axes can be set to any one of over 1500 channels allowing a virtually limitless amount of flexibility.

Output Current Control vs Duty Cycle

The majority of transmission related output functions generate a target current setpoint in amps, rather than a fixed PWM duty cycle.

When a solenoid is commanded to draw a certain current, it’s physical position is extremely consistent, resulting in a stable and repeatable position regardless of system voltage and temperature variables. If a fixed duty cycle were used, the transmission may work well one moment, and poorly the next.

Every TCM output pin can be used in current control mode, including auxiliary outputs.

User Functions can be configured to output either a traditional PWM waveform, or a current setpoint.

Solenoid Dither Current

A small dither current waveform is superimposed over the current setpoint. This keeps the solenoid in a permanent state of micro-motion, helping overcome stiction and increasing solenoid value response.

Dither is available on Solenoid Outputs 1-16. Available on firmware v0.31 and above.

Unused Solenoid Output Pins

Unused solenoid output pins can be used as auxiliary outputs for any purpose, including User Functions.

Solenoid pins have a maximum PWM frequency of 20 KHz.

Unused Input Pins

Unused analog and digital input pins can be used as general purpose inputs.

Analog input pin voltages are measured at all times.

Digital input pin voltage, frequency, duty cycle, pulse width, period, and level are measured at all times.

Pin channels are free to be transmitted via CAN, effectively turning the TCM input an input expander.

Copyright © 2026 Emtron Australia Pty Ltd

Getting Started

Wiring

Read and follow the wiring information here. It’s very important that the TCM is powered correctly.


Mandatory Engine & Driver Inputs

The following inputs MUST be configured for normal transmission operation. Input’s can be sourced from physical inputs or CAN data.

When used with an Emtron ECU, simply enable the Emtron Transmission Control Rx/Tx data streams.

For more info on Emtron ECU Integration, see here.

Engine Speed

Engine RPM from the engine ECU is required.

Engine Torque

Torque data is used extensively by numerous sub systems and must be accurate. The ability of the TCM to control clutch pressures during a shift begins and ends with accurate input torque data.

Both of the following torque inputs are required:

Engine Torque (Available): The amount of engine torque available if no reductions were in place.

Engine Torque (Supplied): The amount of torque that is actually being supplied, inclusive of active reductions such as ignition retards and fuel or ignition cuts.

Torque should be positive when the engine is accelerating and negative when the engine is decelerating (or being driven by the driveline).

Pedal & Throttle Position

Pedal position represents the drivers intention and is more useful in most cases than throttle position, which is often manipulated by engine control sub systems.

In the case of a cable throttle (NOT RECOMMENDED), the Pedal Position input function will be OFF. Sub systems that require Pedal Position will fall back to looking for Throttle Position automatically. This excludes any table axes using Pedal Position, which will be required to be changed manually.

Pedal Position: Driver pedal position demand.

Throttle Position: Engine throttle position or throttle area demand.

Brake Switch

A switch that shows ON when the brake is applied. This is used by systems such as Takeup and DCT Gear Pre-selection.

Shift Control Inputs

A combination of inputs that allow the selection of drive modes and gears, such as:

  • Shifter Position
  • Up/Down shift switches
  • Drive mode request buttons or switches

For more info on drive modes see here.


Additional Engine Inputs

The following inputs are recommended to improve the quality of transmission management:

  • Engine Idle Target Speed
  • Engine Idle Status (On/Off)
  • Overrun Fuel Cut Status (On/Off)
  • Engine Temperature

Mandatory Transmission Inputs

These inputs vary based on the transmission in question but most transmissions will require:

  • Input Shaft Speed
  • Output Shaft Speed
  • Transmission Fluid Temperature

Dual Clutch Transmissions will also require:

  • Clutch Speeds
  • Shift Fork Positions

TCM to ECU Output Signals

At the bare minimum, the engine ECU needs to know when to reduce torque (cut) and when to rev-match (blip). Ideally the engine ECU should be listening to torque limit data so that during a shift (or any other time) the TCM is in control of the amount of torque supplied by the engine.

There are many runtime channels generated by the TCM that can be transmitted via CAN or output physically by User Functions driving output pins.

Useful runtime channels include:

  • Gear: The currently engaged gear.
  • Next Gear: Shows the gear that will be shifted into. When not shifting Next Gear will show the same as Gear.
  • Previous Gear: Shows the gear that is being shifted out of. When not shifting Previous Gear will show the same as Gear.
  • Up Shift Request: Normally Off (0). Transitions to On (1) for the entire duration of an up shift.
  • Down Shift Request: Normally Off (0). Transitions to On (1) for the entire duration of a down shift.
  • Up Shift Torque Limit Status: Normally Off (0). Transitions to On (1) while an up shift torque limit is in place.
  • Up Shift Torque Limit: When no limit is in place, this channel will hold the Torque Limit Off value as configured (Eg: 6000nm). During an up shift torque limit, it will show the final torque limit value as requested by the TCM.
  • Down Shift Rev Match Status: Normally Off (0). Transitions to On (1) while a down shift rev match is being requested.
  • Rev Match Target: Normally 0 RPM. During a rev-match request the desired target RPM is shown.
  • Rev Match Torque: Normally 0 NM. During a down shift rev-match request the TCM will calculate the unloaded engine torque required to lift the engine speed to the rev-match target.

Ethernet Connection

Once powered up, connect the TCM’s ethernet to your PC’s ethernet port (or USB ethernet adapter). There’s no need to set a static IP address. If you’re ethernet adapter is already setup for an Emtron ECU’s static IP, it can stay unchanged.

The initial connection will take about 5-10 seconds to establish. When the TCM is detected, TMtune will show the available devices panel. Available Device List Available Device List


Firmware

The latest TCM firmware is included with TMtune. Once detected you can select the TCM and click the Update Firmware button.

The firmware update window shows the current device firmware and lists the version available to upload (usually there will only be one). Unless the current firmware version is older than the latest version, there’s no need to update. Firmware Update Window Firmware Update Window

The update takes about 30 seconds to complete.

Transmission Specific Information

Read any documentation for your transmission if available. This list will grow over time as we develop more application specific base calibrations.

Transmission Documentation


Base Cal File

If you are using a transmission with a base cal file available, now is the time to upload the latest base cal file. The files are included with TMtune. You can either upload the file from the welcome screen or you can open the device and upload a file from the File menu.

By default, base cal files are located in Documents\Emtron\TMtune\Cal Files


Gear Ratios

Even if you’re using a base provided base calibration, it’s worth double checking the gear ratios are correct as many ratio options may exist for a given transmission.

TCM Gear Ratio Table TCM Gear Ratio Table

The correct gear ratios must also be entered into the ECU.

ECU Gear Ratio Table ECU Gear Ratio Table

The TCM generates two gear ratio runtimes:

  • Gear Ratio: the output from the gear ratio table
  • Input/Output Shaft Speed Ratio: Input shaft speed / Output Shaft Speed.

These two values should be the same when in a driving gear. This is particularly useful for validating the input and output shaft speed sensors and that you are in the gear you think you are.


CAN

Ensure communications with the engine ECU are working. Follow the Emtron ECU Integration Guide to set up the ECU.

CAN Termination

Remember to set the CAN bus termination resistor(s) on or off as required for your bus topology.

To quickly validate the state of the CAN bus, Goto the CAN tab in the F3 Runtimes window and ensure there are no errors and that the active channel counters are showing activity.

F3 CAN F3 CAN


Validating I/O

Open the device and inspect a few key the live data channels.

Press F3 to open the Runtimes window:

  • On the TCM Internal tab, ensure that ALL the power supply inputs are at battery voltage. Any that aren’t must be rectified or the TCM outputs will not work. F3 Power Supplies F3 Power Supplies
  • Use the Analog Inputs and Digital Inputs tabs to validate the state of the raw inputs. Test that the raw inputs of switches and sensors are working as expected.

Testing Solenoids

From the Config tree, navigate to Output Config > Output Pins. From there you can place each output into a test mode to validate it’s physical connection.

By putting the output into Test - Current Control mode you can command the solenoid to a desired current and check the result with the F3 Runtimes window on the Outputs tab.

The actual current draw of the solenoid should very closely match the target, as long as the solenoid isn’t saturated.

  • A solenoid that saturates at 0.5A will never draw more than that.
  • Most variable force transmission solenoids will be able to draw 1.0-1.5A.
  • Smaller on/off type solenoids will typically be well under 1.0A.
  • Just because a solenoid can draw a certain amount of current, does not mean it’s actually opening any further at maximum current. Solenoids will often hit their maximum position/stroke before current saturation.

Solenoid Test Solenoid Test

Tip

If a solenoid doesn’t draw any current while being commanded to do so in test mode, it’s probably an open circuit.

High Current Solenoids (>1.5A)

A single solenoid output pin can command up to 1.5A. Some larger solenoids such as the clutch solenoids often found in DCT transmissions have a usable current in excess of 1.5A.
Solenoid outputs must be paired to supply solenoids with up to 2.7A.

Input Sources

Under Input Config, ensure all relevant inputs are assigned to the correct source that matches the wiring and/or CAN configuration. This is particularly important if you’ve wired something different how the base cal file you’re using.

Input Sources Input Sources

Output Assignment

Under Output Config, ensure all relevant outputs are assigned to match your wiring.

Output Config Output Config


Torque

Ensure that the received engine torque data is valid and realistic. Use the following criteria to validate the torque input…

With the engine unloaded in Neutral:

  • Engine speed stable: Torque should be zero.
  • Engine accelerating: Torque should be positive.
  • Engine decelerating: Torque should be negative.

Torque figures should be verified against dyno figures. Remember that the torque given to the TCM will be flywheel torque, where-as on a chassis dyno, the figures will be wheel torque after drivetrain losses. For this reason it’s expected that the TCM’s input torque should always be higher than the dyno figures by some realistic margin to account for drivetrain losses.

Engine Inertia

A sensible value for engine inertia ensures that shifts synchronize well, with less reliance on closed loop control.

Under Vehicle Setup > Vehicle Setup enter an inertia value for the engine. You can also use the Engine Inertia Test mode to help find a useable value.

Important

Engine Inertia Test relies on accurate engine torque data to work.

Torque Limits

The most critical torque limit is the Up Shift Torque Limit. Now is a good time to make sure it has sensible values in it.

Navigate to Shift Setup > Up Shift > Up Shift Torque Limit.

Up Shift Torque Reduction Up Shift Torque Reduction

For more info of how torque reductions are applied, see here.

ECU Torque Control

Emtron ECU’s will abide by torque limits set by the TCM with very little tuning burden on the end user.

Frictional Loss

Torque is calculated by the ECU based on air mass. As long as the fuel system model is accurate the torque model will usually be very accurate. The user needs to focus primarily on validatingFrictional Loss.

When a torque reduction is requested, the ECU will use a combination of ignition retard and cut to achieve it.

Ignition Retard Scaling

The amount of retard used is calculated using the Torque Limit Ignition Retard Scaling Table. This table allows the ECU to lookup the amount of retard rquired for a given percentage of torque reduction, as well as how much torque will be reduced from a given retard value. Example:

Engine Torque (Available) = 500 Nm
Torque Limit = 300 Nm
Torque Reduction = 500 - 200 = 200 Nm
Toque Reduction % = (200 / 500) * 100 = 40%
Ignition Retard = Table Value @ 40% = 24 degrees.

Torque Limit Ignition Retard Scaling Table Torque Limit Ignition Retard Scaling Table

The Torque Limit Ignition Retard Scaling Table can be validated on the dyno by testing the torque reduction for a given global ignition trim. We have found that the above table is very useable for a wide range of applications without manual validation.

Cut Scaling

Similar to the ignition retard scaling, the amount of cut required for a given torque reduction is controlled by the Torque Limit Cut Gain Table. A value of 1.00 in this table tells the ECU that for a 50% torque reduction, it needs a 50% cut.

Torque Limit Cut Gain Table Torque Limit Cut Gain Table

TM16 Engine Cut Setup

The TM16 will transmit a Fast and Slow torque limit value to the ECU. The Fast limit is used during shifts, the Slow limit is used during sustained torque limit such as the Global Torque Limit. The ECU interprets the Fast Limit as a retard based limit, and the Slow limit as a throttle based limit. In the TM16 Menu, you can control how the ECU converts the retard based fast limit into a cut with the TCM Torque Limit Engine Cut threshold. The lower this value is, the more cutting will be used to meet the torque limit.

TM16 Engine Cut Setup TM16 Engine Cut Setup


Touch Points

Important

On every new install, you must find the clutch touch points.

The procedure for doing so is here.


Tuning

It’s common for tuners to be managing tuning the engine at the same time as the transmission. Once all the critical systems have been validated and all gears are confirmed working, you should be able to focus on the engine to get the ECU’s torque model validated.

Once you have confidence in the torque figures in the TCM, you can validate that the transmission operates correctly under load. How this looks will vary a lot depending on the transmission config.

Familiarize yourself with Multi-Clutch Shift Phases.

At this stage you should be able to:

  • Engage all forward and reverse gears.
  • Apply high torque in gear without any clutch slip.
  • Change gear without excessive flaring or harshness.

Trouble Shooting

Clutch slip in gear

  • Check the torque input is not too low.
  • Line pressure is not too low.
  • Clutch and line pressure solenoids are tracking their current targets.

Flaring on shifts

  • Check the torque input is not too low.
  • Check the Clutch Modelling
  • Check the Clutch Touch Points
  • If applicable, make sure a valid Clutch Gear Load Factor Table is in use.
  • Line pressure is high enough to support the clutch pressure.
  • Clutch and line pressure solenoids are tracking their current targets.
  • Torque reductions are being acted on by the Engine ECU.

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Wiring

Ethernet Wiring

The TCM uses 10/100Base-T Ethernet communications. It only requires 4 wires (2 pairs) to operate.

SignalMTC PinRJ45 PinColour
Rx+C203Orange/White
Rx-C216Orange
Tx+C221Green/White
Tx-C232Green
No special ethernet configuration is required. TMtune will detect the device using an IPv6 Link Local Address.

Copyright © 2026 Emtron Australia Pty Ltd

Hall Effect Inputs

Dedicated 2-Wire Hall Effect Inputs

The TCM contains 4 dedicated 2-wire hall effect inputs. These inputs are suitable for speed sensors found in many transmissions and ABS systems.

Unlike normal digital inputs, they actually provide the sensor with a regulated current source at the system’s battery voltage. When the sensing target passes the sensor, the current draw from the sensor will change. This change in current is used to determine an “edge”.

InputTCM Pin
Hall Input 1C10
Hall Input 2C11
Hall Input 3C12
Hall Input 4C13
Info

The power supply for the hall inputs is sourced from Aux 1-4 Supply (Pin C2).

Each Hall Input outputs the following data:

  • Frequency (0.5 – 20 KHz)
  • Duty Cylce (%)
  • Period (ms)
  • Pulse Width (ms)

Known Applications

  • BMW / Getrag GS7 DCT Input Shaft Speed & Clutch Speeds
  • Toyota GT86 ABS Sensors

Wiring

Sensor PinTCM Pin
Sensor Pin 1Hall Input 1-4
Sensor Pin 2GND

Note: The sensor may be grounded remotely.

Hall Input Wiring Hall Input Wiring

There’s no requirement to set arming thresholds or pulldown resistors.


Hall Inputs on DI 1-8

It’s possible to use 2-wire hall effect sensors on DI-18, and in some cases this is required.

The principle is similar but the wiring is very different. The sensor needs to be supplied with a regulated voltage (eg: 8.0V) and the signal wire goes to a digital input where it’s grounded through the internal pulldown resistor. This creates a measurable voltage that the TCM can use to measure rising and falling edges.

Known Applications

  • ZF 8HP Input Shaft Speed & Output Shaft Speed

Wiring

Sensor PinTCM Pin
Sensor Pin 18.0V
Sensor Pin 2DI 1-8 (Pulldown ON)
Important

The input pin’s pulldown resistor must be enabled and the arming thresholds set correctly.

Arming Thresholds

The high and low arming thresholds must be set correctly to detect the speed signal. You can watch the raw voltage of the digital input pin to determine the thresholds.

  • The low threshold must be ABOVE the sensor voltage at rest.
  • The high threshold must be BELOW the maximum voltage when the sensor is active.

8HP Speed Sensor Arming 8HP Speed Sensor Arming

: If the voltage is near 0V or near the 8V supply, the sensor is probably wired wrong.

Copyright © 2026 Emtron Australia Pty Ltd

Power Supply

This document outlines the correct wiring of the TCM’s power supplies and power outputs.

Power Supplies

The TCM can be used in 12V or 24V systems with a nominal supply voltage of 9-32V.

All power supply pins are protected against reverse polarity, over current, over voltage, over temperature, transients and load dumps.

Voltages are clamped internally to 35V.

Important

All power supply pins must be wired, even if you’re not using them. Eg: Don’t skip the Auxiliary Supply inputs because you don’t need to use the auxiliary outputs.

Battery Hot Supply

PinVoltageCurrent
C19-32V< 1A
Warning

This pin must be powered at all times to allow the TCM to control it’s own power supply. Failure to do so may result in data logging memory being corrupted.

When more than ~3.5V is present on the Ignition Switch pin (C6), the internal circuitry will turn on the circuits connected to pin C1 and the TCM will power up.

Once the TCM is booted, the CPU will latch the internal power switch ON. In this state, if the voltage on the Ignition Switch pin drops to 0, the TCM will remain on until the CPU completes any pending critical tasks and disables the internal power latch.

When the TCM is off, this pin does NOT draw any current.

Ignition Switch

PinVoltageCurrent
C69-32V< 3mA
Info

The Ignition Switch pin does NOT supply any power to the device. Without connecting the Battery Hot Supply pin (C1), the TCM will not power up.

The ignitions switch serves only to enable the internal power switch connected to pin C1. It’s voltage is monitored by the TCM at all times and the data is available to the user.

Auxiliary Supplies

PinVoltageCurrent
C29-32V15A max, Application Specific
C39-32V15A max, Application Specific

Pins C2 and C3 supply the half bridge drivers on Aux Output 1-8. The current draw of these inputs is determined by the total high side current of the Auxiliary outputs.

The auxiliary outputs are split into 2 banks of 4: 1-4 and 5-8. The total continuous high side current of a single bank should not exceed 15A for an extended period of time.

Auxiliary Supply pins can be supplied with constant or switched power, as long as they are always powered when the ignition switch is on. The TCM will only turn them on when the ignition switch is on.

Solenoid Supplies

PinVoltageCurrent
C49-32V15A max, Application Specific
C59-32V15A max, Application Specific

Pins C4 and C5 supply the Solenoid power output pins (B30-B33) as well as the flywheel diodes and voltage monitors of the solenoid drivers.

Solenoid Supply pins can be supplied with constant or switched power, as long as they are always powered when the ignition switch is on. The TCM will only turn them on when the Ignition switch is on.


Solenoid Power Outputs

PinSolenoidsContinuous Current
B301-47.5A
B315-87.5A
B329-127.5A
B3313-167.5A

The 4 Solenoid Power Supply Output pins are intended to supply the high side of the solenoids driven by any of the 16 Solenoid Output pins.

All supply outputs are protected against reverse polarity, short to ground, over current, over voltage, over temperature.

Ideally, you should supply the solenoids with their respective linked output. This means that in the event of a critical fault, the TCM can shut down the supply to the problem solenoid bank. Some applications will not be flexible enough to allow this. Best judgement should be used to make the system as robust as possible.

Example: ZF 8HP: There is only 1 solenoid supply pin for 9 solenoids. You can join two or more output pins to increase to total current capacity of the supply.

Note: During normal operation in a typical transmission, not all solenoids are on at the same time and not all solenoids will be commanding maximum current.

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Reference

Error Codes

Firmware Version

The following error codes are applicable to the latest firmware: v0.41.0
Other firmware versions may differ.

#CodeDescription
0OKNo Errors
1Generic
2CPU Core 1 Fault
3CPU Core 2 Fault
4Operating System Stack Overflow
5Operating System Thread Create Failed
6Operating System Thread Delete Failed
7Operating System Queue Create Failed
8SPI 0 Fault
9ADC 1 Hardware Comms Fault
10ADC 2 Hardware Comms Fault
11ADC 3 Hardware Comms Fault
12SPI 1 Fault
13IMU Hardware Comms Fault
14Digital Arming Threshold Hardware Comms Fault
15Solenoid Bank 1 Hardware Comms Fault
16Solenoid Bank 2 Hardware Comms Fault
17Solenoid Bank 3 Hardware Comms Fault
18Solenoid Bank 4 Hardware Comms Fault
19Analog Output DAC Hardware Comms Fault
20CAN 1 Hardware Fault
21CAN 1 Timeout
22CAN 1 Rx Error
23CAN 1 Tx Error
24CAN 1 Bus Off
25CAN 1 Stuff Error
26CAN 2 Hardware Fault
27CAN 2 Timeout
28CAN 2 Rx Error
29CAN 2 Tx Error
30CAN 2 Bus Off
31CAN 2 Stuff Error
32Flash Read Error
33Flash Write Error
34Flash Erase Error
35EMMC Read Error
36EMMC Write Error
37EMMC Erase Error
38Ethernet Hardware Fault
39Ethernet Timeout
40Ethernet Rx Error
41Ethernet Tx Error
42Ethernet Link Down
43IMU Hardware Fault
44IMU Initialisation Error
45IMU Read Error
46IMU Write Error
47IMU Calibration Error
48IMU Data Error
49Barometer Input Low
50Barometer Input High
51PCB Temp Sensor Low
52PCB Temp Sensor High
53Output Pin Conflict
64Main Supply Voltage Low
65Main Supply Voltage High
66Aux Bank 1 Voltage Low
67Aux Bank 1 Voltage High
68Aux Bank 2 Voltage Low
69Aux Bank 2 Voltage High
70Solenoid Bank 1 Voltage Low
71Solenoid Bank 1 Voltage High
72Solenoid Bank 2 Voltage Low
73Solenoid Bank 2 Voltage High
74Solenoid Bank 3 Voltage Low
75Solenoid Bank 3 Voltage High
76Solenoid Bank 4 Voltage Low
77Solenoid Bank 4 Voltage High
78Main Supply Under Current
79Main Supply Over Current
80Aux Bank 1 Over Current
81Aux Bank 2 Over Current
82Solenoid Bank 1 Over Current
83Solenoid Bank 2 Over Current
84Solenoid Bank 3 Over Current
85Solenoid Bank 4 Over Current
86Solenoid Output Voltage 1 Low
87Solenoid Output Voltage 1 High
88Solenoid Output Voltage 2 Low
89Solenoid Output Voltage 2 High
90Solenoid Output Voltage 3 Low
91Solenoid Output Voltage 3 High
92Solenoid Output Voltage 4 Low
93Solenoid Output Voltage 4 High
96Internal 5V0 Supply Low
97Internal 5V0 Supply High
98Internal 3V3 Supply Low
99Internal 3V3 Supply High
100Internal 1V8 Supply Low
101Internal 1V8 Supply High
102Internal 1V2 Supply Low
103Internal 1V2 Supply High
104Internal 1V0 Supply Low
105Internal 1V0 Supply High
106Internal 1V5 Supply Low
107Internal 1V5 Supply High
1085V0 Reference Supply 1 Low
1095V0 Reference Supply 1 High
1105V0 Reference Supply 2 Low
1115V0 Reference Supply 2 High
1128V0 Reference Supply Low
1138V0 Reference Supply High
114Ignition Switch Low
115Ignition Switch High
116CPU Temperature Low
117CPU Temperature High
118IMU Temperature Low
119IMU Temperature High
120PCB Temperature Low
121PCB Temperature High
122Gear Ratio Table Invalid
123Gear Solenoid Table Invalid
124Gear Clutch Table Invalid
125Takeup Clutch Table Invalid
126Clutch By Wire Clutch Table Invalid
127Gear Axis Config Invalid
128Line Pressure Sensor Low
129Line Pressure Sensor High
130Line Pressure Solenoid
131Line Pressure Control
132Clutch A Pressure Sensor Low
133Clutch A Pressure Sensor High
134Clutch A Pressure Solenoid
135Clutch A Pressure Control
136Clutch B Pressure Sensor Low
137Clutch B Pressure Sensor High
138Clutch B Pressure Solenoid
139Clutch B Pressure Control
140Clutch C Pressure Sensor Low
141Clutch C Pressure Sensor High
142Clutch C Pressure Solenoid
143Clutch C Pressure Control
144Clutch D Pressure Sensor Low
145Clutch D Pressure Sensor High
146Clutch D Pressure Solenoid
147Clutch D Pressure Control
148Clutch E Pressure Sensor Low
149Clutch E Pressure Sensor High
150Clutch E Pressure Solenoid
151Clutch E Pressure Control
152Clutch F Pressure Sensor Low
153Clutch F Pressure Sensor High
154Clutch F Pressure Solenoid
155Clutch F Pressure Control
156Clutch G Pressure Sensor Low
157Clutch G Pressure Sensor High
158Clutch G Pressure Solenoid
159Clutch G Pressure Control
160Clutch H Pressure Sensor Low
161Clutch H Pressure Sensor High
162Clutch H Pressure Solenoid
163Clutch H Pressure Control
164Axis A Pressure Sensor Low
165Axis A Pressure Sensor High
166Axis A Pressure Solenoid
167Axis A Pressure Control
168Axis B Pressure Sensor Low
169Axis B Pressure Sensor High
170Axis B Pressure Solenoid
171Axis B Pressure Control
172Transmission Fluid Temp Sensor Low
173Transmission Fluid Temp Sensor High
174Clutch A Temp Sensor Low
175Clutch A Temp Sensor High
176Clutch B Temp Sensor Low
177Clutch B Temp Sensor High
178Clutch C Temp Sensor Low
179Clutch C Temp Sensor High
180Clutch D Temp Sensor Low
181Clutch D Temp Sensor High
182Clutch E Temp Sensor Low
183Clutch E Temp Sensor High
184Clutch F Temp Sensor Low
185Clutch F Temp Sensor High
186Clutch G Temp Sensor Low
187Clutch G Temp Sensor High
188Clutch H Temp Sensor Low
189Clutch H Temp Sensor High
190Oil Level Sensor Low
191Oil Level Sensor High
192Engine Speed Input Missing
193Engine Speed Signal Error
194Engine Speed Tracking Disagreement
195Input Shaft Speed Input Missing
196Input Shaft Speed Signal Error
197Output Shaft Speed Input Missing
198Output Shaft Speed Signal Error
199Throttle Position Sensor Low
200Throttle Position Sensor High
201Throttle Position Tracking Sensor Low
202Throttle Position Tracking Sensor High
203Throttle Position Tracking Disagreement
204Throttle 2 Position Sensor Low
205Throttle 2 Position Sensor High
206Throttle 2 Position Tracking Sensor Low
207Throttle 2 Position Tracking Sensor High
208Throttle 2 Position Tracking Disagreement
209Pedal Position Sensor Low
210Pedal Position Sensor High
211Pedal Position Tracking Sensor Low
212Pedal Position Tracking Sensor High
213Pedal Position Tracking Disagreement
214Axis A Pressure Sensor Low
215Axis A Pressure Sensor High
216Axis B Pressure Sensor Low
217Axis B Pressure Sensor High
218Brake Front Pressure Sensor Low
219Brake Front Pressure Sensor High
220Brake Rear Pressure Sensor Low
221Brake Rear Pressure Sensor High
222Clutch Pedal Position Sensor Low
223Clutch Pedal Position Sensor High
224Fork 1 Position Sensor Low
225Fork 1 Position Sensor High
226Fork 1 Tracking Sensor Low
227Fork 1 Tracking Sensor High
228Fork 2 Position Sensor Low
229Fork 2 Position Sensor High
230Fork 2 Tracking Sensor Low
231Fork 2 Tracking Sensor High
232Fork 3 Position Sensor Low
233Fork 3 Position Sensor High
234Fork 3 Tracking Sensor Low
235Fork 3 Tracking Sensor High
236Fork 4 Position Sensor Low
237Fork 4 Position Sensor High
238Fork 4 Tracking Sensor Low
239Fork 4 Tracking Sensor High
240Fork 5 Position Sensor Low
241Fork 5 Position Sensor High
242Fork 5 Tracking Sensor Low
243Fork 5 Tracking Sensor High
244Fork 6 Position Sensor Low
245Fork 6 Position Sensor High
246Fork 6 Tracking Sensor Low
247Fork 6 Tracking Sensor High
248Fork 7 Position Sensor Low
249Fork 7 Position Sensor High
250Fork 7 Tracking Sensor Low
251Fork 7 Tracking Sensor High
252Fork 8 Position Sensor Low
253Fork 8 Position Sensor High
254Fork 8 Tracking Sensor Low
255Fork 8 Tracking Sensor High
256Fork 1 Position Tracking Disagreement
257Fork 2 Position Tracking Disagreement
258Fork 3 Position Tracking Disagreement
259Fork 4 Position Tracking Disagreement
260Fork 5 Position Tracking Disagreement
261Fork 6 Position Tracking Disagreement
262Fork 7 Position Tracking Disagreement
263Fork 8 Position Tracking Disagreement
264Fork 1 Shift Solenoid Table Invalid
265Fork 2 Shift Solenoid Table Invalid
266Fork 3 Shift Solenoid Table Invalid
267Fork 4 Shift Solenoid Table Invalid
268Fork 5 Shift Solenoid Table Invalid
269Fork 6 Shift Solenoid Table Invalid
270Fork 7 Shift Solenoid Table Invalid
271Fork 8 Shift Solenoid Table Invalid
272Fork Default Solenoid Table Invalid
273Fork Idle Solenoid Table Invalid
274Trans Fluid Cooler Temp Sensor Low
275Trans Fluid Cooler Temp Sensor High
276Shifter Pos Sensor Low
277Shifter Pos Sensor High
288Clutch A Slip
289Clutch B Slip
290Clutch C Slip
291Clutch D Slip
292Clutch E Slip
293Clutch F Slip
294Clutch G Slip
295Clutch H Slip
296Axis A Fault
297Axis B Fault
298Axis A Bound
299Axis B Bound
300Fork 1 Movement
301Fork 2 Movement
302Fork 3 Movement
303Fork 4 Movement
304Fork 5 Movement
305Fork 6 Movement
306Fork 7 Movement
307Fork 8 Movement
308Gear Ratio Implausible
309Clutch Gear Load Factor Table Invalid
310User Input 1 Input Low
311User Input 1 Input High
312User Input 2 Input Low
313User Input 2 Input High
314User Input 3 Input Low
315User Input 3 Input High
316User Input 4 Input Low
317User Input 4 Input High
318User Input 5 Input Low
319User Input 5 Input High
320User Input 6 Input Low
321User Input 6 Input High
322User Input 7 Input Low
323User Input 7 Input High
324User Input 8 Input Low
325User Input 8 Input High
326User Input 9 Input Low
327User Input 9 Input High
328User Input 10 Input Low
329User Input 10 Input High
330User Input 11 Input Low
331User Input 11 Input High
332User Input 12 Input Low
333User Input 12 Input High
334User Input 13 Input Low
335User Input 13 Input High
336User Input 14 Input Low
337User Input 14 Input High
338User Input 15 Input Low
339User Input 15 Input High
340User Input 16 Input Low
341User Input 16 Input High
342Transbrake Clutch Select Table Invalid
352Solenoid 1 Open Load
353Solenoid 1 Over Current
354Solenoid 1 Short To Ground
355Solenoid 1 Over Temp
356Solenoid 2 Open Load
357Solenoid 2 Over Current
358Solenoid 2 Short To Ground
359Solenoid 2 Over Temp
360Solenoid 3 Open Load
361Solenoid 3 Over Current
362Solenoid 3 Short To Ground
363Solenoid 3 Over Temp
364Solenoid 4 Open Load
365Solenoid 4 Over Current
366Solenoid 4 Short To Ground
367Solenoid 4 Over Temp
368Solenoid 5 Open Load
369Solenoid 5 Over Current
370Solenoid 5 Short To Ground
371Solenoid 5 Over Temp
372Solenoid 6 Open Load
373Solenoid 6 Over Current
374Solenoid 6 Short To Ground
375Solenoid 6 Over Temp
376Solenoid 7 Open Load
377Solenoid 7 Over Current
378Solenoid 7 Short To Ground
379Solenoid 7 Over Temp
380Solenoid 8 Open Load
381Solenoid 8 Over Current
382Solenoid 8 Short To Ground
383Solenoid 8 Over Temp
384Solenoid 9 Open Load
385Solenoid 9 Over Current
386Solenoid 9 Short To Ground
387Solenoid 9 Over Temp
388Solenoid 10 Open Load
389Solenoid 10 Over Current
390Solenoid 10 Short To Ground
391Solenoid 10 Over Temp
392Solenoid 11 Open Load
393Solenoid 11 Over Current
394Solenoid 11 Short To Ground
395Solenoid 11 Over Temp
396Solenoid 12 Open Load
397Solenoid 12 Over Current
398Solenoid 12 Short To Ground
399Solenoid 12 Over Temp
400Solenoid 13 Open Load
401Solenoid 13 Over Current
402Solenoid 13 Short To Ground
403Solenoid 13 Over Temp
404Solenoid 14 Open Load
405Solenoid 14 Over Current
406Solenoid 14 Short To Ground
407Solenoid 14 Over Temp
408Solenoid 15 Open Load
409Solenoid 15 Over Current
410Solenoid 15 Short To Ground
411Solenoid 15 Over Temp
412Solenoid 16 Open Load
413Solenoid 16 Over Current
414Solenoid 16 Short To Ground
415Solenoid 16 Over Temp
416Clutch Pedal Pressure Sensor Low
417Clutch Pedal Pressure Sensor High
418Launch Clutch Select Table Invalid
419Steering Angle Sensor Low
420Steering Angle Sensor High
421Shifter Position Matrix Table Invalid
422Shifter Position Switches Invalid
423TC Lockup Slip
424TC Lockup Config Invalid

Copyright © 2026 Emtron Australia Pty Ltd

Enumerations

Firmware Version

The following enumerations are applicable to the latest firmware: v0.41.0
Other firmware versions may differ.


Auto Shift Status

Used by Runtime(s):

  • Auto Shift Status

Enumeration:

ValueDescription
0Off
1No Shift
2Up Shift Trigger Delay
3Down Shift Trigger Delay
4Up Shift Disabled - Enable Table
5Down Shift Disabled - Enable Table
6Gear Request Hold
7Hill Ascent
8Hill Descent
9Stopped - Shifting to Initial Gear
10Up Shift Requested
11Down Shift Requested
12Kickdown

CAN Status

Used by Runtime(s):

  • CAN 1 Status
  • CAN 2 Status

Enumeration:

ValueDescription
0Off
1Active
2Active (FD)
4Active (Listen Only)
8Error

Clutch Leaning Status

Used by Runtime(s):

  • Clutch Touch Point Leaning Status
  • Clutch Adaption Status

Enumeration:

ValueDescription
0Off
1Standby
2Complete
10Error
11Conditions Not Met
12Conditions Not Met - Temp Low
13Conditions Not Met - Temp High
14Conditions Not Met - Not in Neutral
15Conditions Not Met - Input Shaft Speed Low
16Conditions Not Met - Input Shaft Speed High
17Conditions Not Met - Output Shaft Speed High
18Conditions Not Met - Brake Off
19Lockout - Torque Low
20Lockout - Torque High
21Lockout - Torque Slope High
22Lockout - Not Enough Data
23Lockout - Clutch By Wire
24Lockout - No Sync
25Lockout - Torque Intervention
100Started
101Learning - Clutch A
102Learning - Clutch B
103Learning - Clutch C
104Learning - Clutch D
105Learning - Clutch E
106Learning - Clutch F
107Learning - Clutch H
108Learning - Clutch H
110Touch Point - Reset
111Touch Point - Input Shaft Speed Baseline
112Touch Point - Stabilising
113Touch Point - Finding Touch Point

Clutches

Used by Runtime(s):

  • Active Clutch
  • Inactive Clutch
  • Clutch #

Enumeration:

ValueDescription
0None
1A
2B
3C
4D
5E
6F
7G
8H

Engine Inertia Test Status

Used by Runtime(s):

  • Engine Inertia Test Status

Enumeration:

ValueDescription
0Off
1Lockout - In Gear
2Lockout - Engine Accel Low
3Lockout - Torque Low
4Sampling…
5Done
10Error

Gear

Used by Runtime(s):

  • Gear
  • Next Gear
  • Previous Gear
  • Requested Gear
  • Selected Gear A
  • Selected Gear B

Enumeration:

ValueDescription
-2P
-1R
0N
11
22
33
44
55
66
77
88
99
1010
1111
1212

Hold Power Status

Used by Runtime(s):

  • Hold Power Status

Enumeration:

ValueDescription
0OFF
1ON
2Shutdown Delay
3Hold - PC Comms
4Hold - Waiting for Shutdown
5Hold - Logging Busy
6Hold - Storing

IMU Status

Used by Runtime(s):

  • IMU Status

Enumeration:

ValueDescription
0Off
1Hardware Error
2Running
3Calibrating

Input Status

Used by Runtime(s):

  • Digital Input 1 Status
  • Digital Input 2 Status
  • Digital Input 3 Status
  • Digital Input 4 Status
  • Digital Input 5 Status
  • Digital Input 6 Status
  • Digital Input 7 Status
  • Digital Input 8 Status
  • Digital Input 9 Status
  • Digital Input 10 Status
  • Digital Input 11 Status
  • Digital Input 12 Status
  • Digital Input 13 Status
  • Digital Input 14 Status
  • Digital Input 15 Status
  • Digital Input 16 Status
  • Hall Input 1 Status
  • Hall Input 2 Status
  • Hall Input 3 Status
  • Hall Input 4 Status

Enumeration:

ValueDescription
0Off
1On
2PWM

IO Level

Used by Runtime(s):

  • Digital Input 1 Level
  • Digital Input 2 Level
  • Digital Input 3 Level
  • Digital Input 4 Level
  • Digital Input 5 Level
  • Digital Input 6 Level
  • Digital Input 7 Level
  • Digital Input 8 Level
  • Digital Input 9 Level
  • Digital Input 10 Level
  • Digital Input 11 Level
  • Digital Input 12 Level
  • Digital Input 13 Level
  • Digital Input 14 Level
  • Digital Input 15 Level
  • Digital Input 16 Level
  • Hall Input 1 Level
  • Hall Input 2 Level
  • Hall Input 3 Level
  • Hall Input 4 Level

Enumeration:

ValueDescription
0Low
1High

Launch Control Status

Used by Runtime(s):

  • Launch Control Status

Enumeration:

ValueDescription
0Off
1Disarmed
2Disarmed - No Arming Config
3Disarmed - Launch Switch
4Disarmed - Brake Switch
5Disarmed - Brake Pressure
6Disarmed - User
7Disarmed - Transbrake Switch
10Armed
11Lockout - No Lockout Config
12Lockout - Output Shaft Speed
13Lockout - Drive Speed
14Lockout - Pedal Position
15Lockout - Engine Speed
16Lockout - User
17Lockout - Clutch By Wire
18Lockout - Not In Gear
20Active
21Active - Static
22Active - Preload
23Active - Moving

Logging Status

Used by Runtime(s):

  • Logging Status

Enumeration:

ValueDescription
0Off
1Initilizing
2Halted
3Uploading
4Erasing
10Disarmed - Logging Switch
11Disarmed - User
20Ready
21Armed
22Recording
23Stopping
24Full

Math Expression Status

Used by Runtime(s):

  • Math Expression 1 Status
  • Math Expression 2 Status
  • Math Expression 3 Status
  • Math Expression 4 Status
  • Math Expression 5 Status
  • Math Expression 6 Status
  • Math Expression 7 Status
  • Math Expression 8 Status
  • Math Expression 9 Status
  • Math Expression 10 Status
  • Math Expression 11 Status
  • Math Expression 12 Status
  • Math Expression 13 Status
  • Math Expression 14 Status
  • Math Expression 15 Status
  • Math Expression 16 Status

Enumeration:

ValueDescription
0Off
1OK
2Syntax Error
3Variables Error

Output Status

Used by Runtime(s):

  • Aux 1 Status
  • Aux 2 Status
  • Aux 3 Status
  • Aux 4 Status
  • Aux 5 Status
  • Aux 6 Status
  • Aux 7 Status
  • Aux 8 Status
  • Solenoid 1 Status
  • Solenoid 2 Status
  • Solenoid 3 Status
  • Solenoid 4 Status
  • Solenoid 5 Status
  • Solenoid 6 Status
  • Solenoid 7 Status
  • Solenoid 8 Status
  • Solenoid 9 Status
  • Solenoid 10 Status
  • Solenoid 11 Status
  • Solenoid 12 Status
  • Solenoid 13 Status
  • Solenoid 14 Status
  • Solenoid 15 Status
  • Solenoid 16 Status

Enumeration:

ValueDescription
0Off
1On
2On - PWM
3On - CC
4Test - PWM
5Test - CC
6On - Slave
10Error
11Open Load
12Over Current
13Short To Ground
14Over Temp
15Over Voltage
16Short To Battery
17Overload
18Retry Limit
20Master Shutdown

PID Status

Used by Runtime(s):

  • Line Pressure PID Status
  • Clutch A PID Status
  • Clutch B PID Status
  • Clutch C PID Status
  • Clutch D PID Status
  • Clutch E PID Status
  • Clutch F PID Status
  • Clutch G PID Status
  • Clutch H PID Status
  • Axis A PID Status
  • Axis B PID Status

Enumeration:

ValueDescription
0Disabled
1On
2Integral Min
3Integral Max

Preselection Status

Used by Runtime(s):

  • Preselection Status

Enumeration:

ValueDescription
0Off
1Neutral
2Down Shift
3Up Shift

Pressure Control Status

Used by Runtime(s):

  • Line Pressure Control Status
  • Clutch A Status
  • Clutch B Status
  • Clutch C Status
  • Clutch D Status
  • Clutch E Status
  • Clutch F Status
  • Clutch G Status
  • Clutch H Status
  • Axis A Pressure Control Status
  • Axis B Pressure Control Status
  • Lube Flow Pressure Status

Enumeration:

ValueDescription
0Off
1Lockout - Speed
2Lockout - User
10On
11On - Clutch Active
12On - Clutch Active (Ramp In)
13On - Clutch Inactive
14On - Takeup
15On - Clutch By Wire
16On - Launch
17On - Transbrake
18On - Touch Point Learn
19On - Shift Oncoming
20On - Shift Offgoing
21On - Shift Fork Clutch Pulse
30On - Axis Active
31On - Axis Inactive
32On - Fork Movement
33On - Shifting

Script Status

Used by Runtime(s):

  • Script 1 Status
  • Script 2 Status
  • Script 3 Status
  • Script 4 Status
  • Script 5 Status
  • Script 6 Status
  • Script 7 Status
  • Script 8 Status

Enumeration:

ValueDescription
0OK
1Stop
2End
3Error
4No Program Loaded
5Unknown Instruction
6Stack Underflow
7Stack Overflow
8Unknown Field Scope
9Call Arg Count Error
10Call Not A Function
11Called Non Callable
12Call Frame Overflow
13Native Function Not Resolved
14Division By Zero
15Pointer Out Of Bounds
16Array Index Out Of Bounds
17Invalid Script
18Unsupported Version

Shift Fork ID

Used by Runtime(s):

  • Active Gear Shift Fork
  • Preselected Gear Shift Fork
  • Moving Shift Fork

Enumeration:

ValueDescription
0-
11
22
33
44
55
66
77
88

Shift Fork Move Phase

Used by Runtime(s):

  • Shift Fork Move Phase

Enumeration:

ValueDescription
0Idle
1Approach
2Sync
3Engage
4Settle
5Back Off
6Rest
10Error

Shift Fork Stall Type

Used by Runtime(s):

  • Shift Fork Stall Type

Enumeration:

ValueDescription
0None
1Blocker Ring
2Dog Teeth
3Mechanical
4Equilibrium

Shift Fork Status

Used by Runtime(s):

  • Shift Fork 1 Status
  • Shift Fork 2 Status
  • Shift Fork 3 Status
  • Shift Fork 4 Status
  • Shift Fork 5 Status
  • Shift Fork 6 Status
  • Shift Fork 7 Status
  • Shift Fork 8 Status

Enumeration:

ValueDescription
0Off
1Low Position
2Centre Position
3High Position
4Moving Down
5Moving Up
10Error

Shift Phase

Used by Runtime(s):

  • Shift Phase

Enumeration:

ValueDescription
0Waiting
1Setup
2Prefill
3Fast Fill
4Stable Fill
5Torque Transfer
6Inertial Sync
7Lock
8Complete
9Cancelled
10Error

Shift Request Status

Used by Runtime(s):

  • Shift Request Status

Enumeration:

ValueDescription
0-
1Park Disabled
2Park Lockout - Output Shaft Speed
3Park Lockout - Vehicle Speed
4Park Lockout - Drive Speed
5Park Lockout - Clutch Switch
6Park Lockout - Brake Switch
7Park Lockout - Brake Pressure
8Park Lockout - Clutch Pressure
9Park Lockout - Clutch Position
10Reverse Lockout - Disabled
11Reverse Lockout - Output Shaft Speed
12Reverse Lockout - Vehicle Speed
13Reverse Lockout - Drive Speed
14Reverse Lockout - Clutch Switch
15Reverse Lockout - Brake Switch
16Reverse Lockout - Brake Pressure
17Reverse Lockout - Clutch Pressure
18Reverse Lockout - Clutch Position
19Reverse Lockout - Reverse Lockout Switch
20Drive Disabled
21Drive Lockout - Output Shaft Speed
22Drive Lockout - Vehicle Speed
23Drive Lockout - Drive Speed
24Drive Lockout - Clutch Switch
25Drive Lockout - Brake Switch
26Drive Lockout - Brake Pressure
27Drive Lockout - Clutch Pressure
28Drive Lockout - Clutch Position
30Up Shift Disabled
31Up Shift Lockout - Input Shaft Speed Min
32Up Shift Lockout - Gear Max
33Up Shift Lockout - Takeup
40Down Shift Disabled
41Down Shift Lockout - Input Shaft Speed Max
42Down Shift Lockout - Gear Min
43Down Shift Lockout - Takeup

Shift Solenoid Status

Used by Runtime(s):

  • Shift Solenoid 1 Status
  • Shift Solenoid 2 Status
  • Shift Solenoid 3 Status
  • Shift Solenoid 4 Status
  • Shift Solenoid 5 Status
  • Shift Solenoid 6 Status
  • Shift Solenoid 7 Status
  • Shift Solenoid 8 Status

Enumeration:

ValueDescription
0OFF
1ON
10Error

Shift Status

Used by Runtime(s):

  • Up Shift Status
  • Down Shift Status

Enumeration:

ValueDescription
0Off
1Ready
2Pending
3Shifting
4Waiting for Torque Reduction
5Waiting for Rev Match
6Shift Complete
10Error
11Error: Torque Reduction Timeout
12Error: Rev Match Timeout

Shifter Position

Used by Runtime(s):

  • Shifter Position

Enumeration:

ValueDescription
0-
1Park
2Reverse
3Neutral
4Drive
5Sport
6Manual

Solenoid Driver Status

Used by Runtime(s):

  • Solenoid Bank 1 Status
  • Solenoid Bank 2 Status
  • Solenoid Bank 3 Status
  • Solenoid Bank 4 Status

Enumeration:

ValueDescription
0Config Mode
1OK

Takeup Status

Used by Runtime(s):

  • Takeup Status

Enumeration:

ValueDescription
0Off
1Lockout - User
2Lockout - Clutch By Wire
3Lockout - Neutral/Park
4Lockout - Engine Speed
5Lockout - Transbrake
6Lockout - Launch Control
10Bleed Off
11Fast Fill
12Ready
13Active
14Exit
15Off - Driving

TC Lockup Clutch Status

Used by Runtime(s):

  • Torque Converter Lock Up Clutch Status

Enumeration:

ValueDescription
0Open
1Slip
2Sync
3Lock

Torque Converter Lockup Status

Used by Runtime(s):

  • Torque Converter Lock Up Status

Enumeration:

ValueDescription
0OFF
1On - Takeup
2On - In Gear
3On - Up Shift
4On - Down Shift
5On - Launch
6On - Dyno
7On - Fluid Temp High
10On - Override
20Lockout - User
21Lockout - Input Shaft Speed
22Lockout - Output Shaft Speed
23Lockout - Drive Speed
24Lockout - Engine Speed
25Lockout - Transbrake
26Lockout - Override
27Lockout - Park/Neutral
28Lockout - Sensor Fault
29Lockout - Slip Fault
30Lockout - Brake
31Lockout - Fluid Temp Low

Torque Limit Status

Used by Runtime(s):

  • Torque Limit Status

Enumeration:

ValueDescription
0Off
1Global
2Up Shift
3Down Shift
4Post Down Shift
5Takeup
6Takeup Shift
7Fault
8Transbrake
9Launch

Transbrake Status

Used by Runtime(s):

  • Transbrake Status

Enumeration:

ValueDescription
0Off
1Lockout - Output Shaft Speed
2Lockout - Drive Speed
3Lockout - User
4Lockout - Clutch By Wire
5Lockout - Not In Forward Gear
6Lockout - Gear Max
10Armed
11On
12Bump Cooldown
13Bump

Transmission Control Status

Used by Runtime(s):

  • Transmission Control Status

Enumeration:

ValueDescription
0Off
1Park
2Reverse
3Neutral
4Takeup
5In Gear
6Down Shift Pending
7Down Shift
8Down Shift Complete
9Up Shift Pending
10Up Shift
11Up Shift Complete

Transmission Drive Mode

Used by Runtime(s):

  • Transmission Drive Mode

Enumeration:

ValueDescription
0Off
1Park
2Reverse
3Neutral
4Drive
5Sport
6Manual

VM Status

Used by Runtime(s):

  • VM Status

Enumeration:

ValueDescription
0Off
1Stopped
2Loading
3Idle
4Running
100Error
200Error - Infinite Loop
201Infinite Loop - Script 1
202Infinite Loop - Script 2
203Infinite Loop - Script 3
204Infinite Loop - Script 4
205Infinite Loop - Script 5
206Infinite Loop - Script 6
207Infinite Loop - Script 7
208Infinite Loop - Script 8

Copyright © 2026 Emtron Australia Pty Ltd

Runtimes

Firmware Version

The following runtimes are applicable to the latest firmware: v0.41.0
Other firmware versions may differ.

RuntimeEmC DefineUnitsFactorDecimalsWritable
CPU 1 StatusRT_CPU0STATUS10
CPU 1 TemperatureRT_CPU0TEMP°C0.11
CPU 1 LoadRT_CPU0LOAD%0.11
CPU 1 Thread CountRT_CPU0THREADS10
CPU 1 Free MemoryRT_CPU0FREEMEMb10
CPU 1 Minimum MemoryRT_CPU0MINMEMb10
CPU 2 StatusRT_CPU1STATUS10
CPU 2 TemperatureRT_CPU1TEMP°C0.11
CPU 2 LoadRT_CPU1LOAD%0.11
CPU 2 Thread CountRT_CPU1THREADS10
CPU 2 Free MemoryRT_CPU1FREEMEM10
CPU 2 Minimum MemoryRT_CPU1MINMEM10
Battery VoltageRT_BATTVOLTSV0.0013
Aux 1-4 Supply VoltsRT_AUXSUPPLY1VOLTSV0.0013
Aux 5-8 Supply VoltsRT_AUXSUPPLY2VOLTSV0.0013
Solenoid 1-8 Supply VoltsRT_SOLSUPPLY1VOLTSV0.0013
Solenoid 9-16 Supply VoltsRT_SOLSUPPLY2VOLTSV0.0013
Aux 1-4 Supply CurrentRT_AUXSUPPLY1AMPSA0.0013
Aux 5-8 Supply CurrentRT_AUXSUPPLY2AMPSA0.0013
Solenoid 1-8 Supply CurrentRT_SOLSUPPLY1AMPSA0.0013
Solenoid 9-16 Supply CurrentRT_SOLSUPPLY2AMPSA0.0013
Ignition Switch VoltsRT_IGNSWVOLTSV0.0013
Ignition Switch StatusRT_IGNSWSTATUS10
Internal 5V0 SupplyRT_VCC5V0V0.0013
Internal 3V3 SupplyRT_VCC3V3V0.0013
Internal 1V8 SupplyRT_VCC1V8V0.0013
Internal 1V5 SupplyRT_VCCDDRV0.0013
Internal 1V2 SupplyRT_VCC1V2V0.0013
Internal 1V0 SupplyRT_VCC1V0V0.0013
Device StatusRT_DEVICESTATUS10
Device Current High SideRT_DEVICECURRENTHSA0.0013
Device Current Low SideRT_DEVICECURRENTLSA0.0013
Device Current TotalRT_DEVICECURRENTTOTALA0.0013
Device Power High SideRT_DEVICEPOWERHSW0.11
Device Power Low SideRT_DEVICEPOWERLSW0.11
Device Power TotalRT_DEVICEPOWERTOTALW0.11
5V0 Ref Supply 1RT_5VOUT1V0.0013
5V0 Ref Supply 2RT_5VOUT2V0.0013
8V0 Ref SupplyRT_8VOUTV0.0013
Uptime SecondsRT_UPSECSec10
Uptime MinutesRT_UPMINMin10
Uptime HoursRT_UPHOURSHrs10
Uptime DaysRT_UPDAYSDays10
Elapsed Seconds TotalRT_SECONDSSec0.0013
PCB TemperatureRT_PCBTEMP°C0.11
Hold Power StatusRT_HOLDPOWER10
Hold Power SwitchRT_HOLDPWRSW10
Constant 0RT_CONST010
Constant 1RT_CONST110
CAN 1 StatusRT_CAN0STATUS10
CAN 1 Error FlagsRT_CAN0ERRFLAGS10
CAN 1 Rx ErrorRT_CAN0RXERR10
CAN 1 Tx ErrorRT_CAN0TXERR10
CAN 1 TimeoutRT_CAN0TMOUT10
CAN 1 Rx CountRT_CAN0RXCOUNT10
CAN 1 Tx CountRT_CAN0TXCOUNT10
CAN 1 Channel 1 CounterRT_CAN0CHCOUNTER110
CAN 1 Channel 2 CounterRT_CAN0CHCOUNTER210
CAN 1 Channel 3 CounterRT_CAN0CHCOUNTER310
CAN 1 Channel 4 CounterRT_CAN0CHCOUNTER410
CAN 1 Channel 5 CounterRT_CAN0CHCOUNTER510
CAN 1 Channel 6 CounterRT_CAN0CHCOUNTER610
CAN 1 Channel 7 CounterRT_CAN0CHCOUNTER710
CAN 1 Channel 8 CounterRT_CAN0CHCOUNTER810
CAN 1 Channel 9 CounterRT_CAN0CHCOUNTER910
CAN 1 Channel 10 CounterRT_CAN0CHCOUNTER1010
CAN 1 Channel 11 CounterRT_CAN0CHCOUNTER1110
CAN 1 Channel 12 CounterRT_CAN0CHCOUNTER1210
CAN 1 Channel 13 CounterRT_CAN0CHCOUNTER1310
CAN 1 Channel 14 CounterRT_CAN0CHCOUNTER1410
CAN 1 Channel 15 CounterRT_CAN0CHCOUNTER1510
CAN 1 Channel 16 CounterRT_CAN0CHCOUNTER1610
CAN 2 StatusRT_CAN1STATUS10
CAN 2 Error FlagsRT_CAN1ERRFLAGS10
CAN 2 Rx ErrorRT_CAN1RXERR10
CAN 2 Tx ErrorRT_CAN1TXERR10
CAN 2 TimeoutRT_CAN1TMOUT10
CAN 2 Rx CountRT_CAN1RXCOUNT10
CAN 2 Tx CountRT_CAN1TXCOUNT10
CAN 2 Channel 1 CounterRT_CAN1CHCOUNTER110
CAN 2 Channel 2 CounterRT_CAN1CHCOUNTER210
CAN 2 Channel 3 CounterRT_CAN1CHCOUNTER310
CAN 2 Channel 4 CounterRT_CAN1CHCOUNTER410
CAN 2 Channel 5 CounterRT_CAN1CHCOUNTER510
CAN 2 Channel 6 CounterRT_CAN1CHCOUNTER610
CAN 2 Channel 7 CounterRT_CAN1CHCOUNTER710
CAN 2 Channel 8 CounterRT_CAN1CHCOUNTER810
CAN 2 Channel 9 CounterRT_CAN1CHCOUNTER910
CAN 2 Channel 10 CounterRT_CAN1CHCOUNTER1010
CAN 2 Channel 11 CounterRT_CAN1CHCOUNTER1110
CAN 2 Channel 12 CounterRT_CAN1CHCOUNTER1210
CAN 2 Channel 13 CounterRT_CAN1CHCOUNTER1310
CAN 2 Channel 14 CounterRT_CAN1CHCOUNTER1410
CAN 2 Channel 15 CounterRT_CAN1CHCOUNTER1510
CAN 2 Channel 16 CounterRT_CAN1CHCOUNTER1610
VM StatusRT_VMSTATUS10
Script 1 StatusRT_SCRIPT1STATUS10
Script 2 StatusRT_SCRIPT2STATUS10
Script 3 StatusRT_SCRIPT3STATUS10
Script 4 StatusRT_SCRIPT4STATUS10
Script 5 StatusRT_SCRIPT5STATUS10
Script 6 StatusRT_SCRIPT6STATUS10
Script 7 StatusRT_SCRIPT7STATUS10
Script 8 StatusRT_SCRIPT8STATUS10
Analog Input 1 VoltsRT_ANV1V0.0013
Analog Input 2 VoltsRT_ANV2V0.0013
Analog Input 3 VoltsRT_ANV3V0.0013
Analog Input 4 VoltsRT_ANV4V0.0013
Analog Input 5 VoltsRT_ANV5V0.0013
Analog Input 6 VoltsRT_ANV6V0.0013
Analog Input 7 VoltsRT_ANV7V0.0013
Analog Input 8 VoltsRT_ANV8V0.0013
Analog Input 9 VoltsRT_ANV9V0.0013
Analog Input 10 VoltsRT_ANV10V0.0013
Analog Input 11 VoltsRT_ANV11V0.0013
Analog Input 12 VoltsRT_ANV12V0.0013
Analog Input 13 VoltsRT_ANV13V0.0013
Analog Input 14 VoltsRT_ANV14V0.0013
Analog Input 15 VoltsRT_ANV15V0.0013
Analog Input 16 VoltsRT_ANV16V0.0013
Digital Input 1 StatusRT_DISTATUS110
Digital Input 2 StatusRT_DISTATUS210
Digital Input 3 StatusRT_DISTATUS310
Digital Input 4 StatusRT_DISTATUS410
Digital Input 5 StatusRT_DISTATUS510
Digital Input 6 StatusRT_DISTATUS610
Digital Input 7 StatusRT_DISTATUS710
Digital Input 8 StatusRT_DISTATUS810
Digital Input 9 StatusRT_DISTATUS910
Digital Input 10 StatusRT_DISTATUS1010
Digital Input 11 StatusRT_DISTATUS1110
Digital Input 12 StatusRT_DISTATUS1210
Digital Input 13 StatusRT_DISTATUS1310
Digital Input 14 StatusRT_DISTATUS1410
Digital Input 15 StatusRT_DISTATUS1510
Digital Input 16 StatusRT_DISTATUS1610
Hall Input 1 StatusRT_HALLSTATUS110
Hall Input 2 StatusRT_HALLSTATUS210
Hall Input 3 StatusRT_HALLSTATUS310
Hall Input 4 StatusRT_HALLSTATUS410
Digital Input 1 LevelRT_DILEVEL110
Digital Input 2 LevelRT_DILEVEL210
Digital Input 3 LevelRT_DILEVEL310
Digital Input 4 LevelRT_DILEVEL410
Digital Input 5 LevelRT_DILEVEL510
Digital Input 6 LevelRT_DILEVEL610
Digital Input 7 LevelRT_DILEVEL710
Digital Input 8 LevelRT_DILEVEL810
Digital Input 9 LevelRT_DILEVEL910
Digital Input 10 LevelRT_DILEVEL1010
Digital Input 11 LevelRT_DILEVEL1110
Digital Input 12 LevelRT_DILEVEL1210
Digital Input 13 LevelRT_DILEVEL1310
Digital Input 14 LevelRT_DILEVEL1410
Digital Input 15 LevelRT_DILEVEL1510
Digital Input 16 LevelRT_DILEVEL1610
Hall Input 1 LevelRT_HALLLEVEL110
Hall Input 2 LevelRT_HALLLEVEL210
Hall Input 3 LevelRT_HALLLEVEL310
Hall Input 4 LevelRT_HALLLEVEL410
Digital Input 1 VoltsRT_DIVOLTS1V0.0013
Digital Input 2 VoltsRT_DIVOLTS2V0.0013
Digital Input 3 VoltsRT_DIVOLTS3V0.0013
Digital Input 4 VoltsRT_DIVOLTS4V0.0013
Digital Input 5 VoltsRT_DIVOLTS5V0.0013
Digital Input 6 VoltsRT_DIVOLTS6V0.0013
Digital Input 7 VoltsRT_DIVOLTS7V0.0013
Digital Input 8 VoltsRT_DIVOLTS8V0.0013
Digital Input 9 VoltsRT_DIVOLTS9V0.0013
Digital Input 10 VoltsRT_DIVOLTS10V0.0013
Digital Input 11 VoltsRT_DIVOLTS11V0.0013
Digital Input 12 VoltsRT_DIVOLTS12V0.0013
Digital Input 13 VoltsRT_DIVOLTS13V0.0013
Digital Input 14 VoltsRT_DIVOLTS14V0.0013
Digital Input 15 VoltsRT_DIVOLTS15V0.0013
Digital Input 16 VoltsRT_DIVOLTS16V0.0013
Digital Input 1 FrequencyRT_DIFREQ1Hz0.012
Digital Input 2 FrequencyRT_DIFREQ2Hz0.012
Digital Input 3 FrequencyRT_DIFREQ3Hz0.012
Digital Input 4 FrequencyRT_DIFREQ4Hz0.012
Digital Input 5 FrequencyRT_DIFREQ5Hz0.012
Digital Input 6 FrequencyRT_DIFREQ6Hz0.012
Digital Input 7 FrequencyRT_DIFREQ7Hz0.012
Digital Input 8 FrequencyRT_DIFREQ8Hz0.012
Digital Input 9 FrequencyRT_DIFREQ9Hz0.012
Digital Input 10 FrequencyRT_DIFREQ10Hz0.012
Digital Input 11 FrequencyRT_DIFREQ11Hz0.012
Digital Input 12 FrequencyRT_DIFREQ12Hz0.012
Digital Input 13 FrequencyRT_DIFREQ13Hz0.012
Digital Input 14 FrequencyRT_DIFREQ14Hz0.012
Digital Input 15 FrequencyRT_DIFREQ15Hz0.012
Digital Input 16 FrequencyRT_DIFREQ16Hz0.012
Hall Input 1 FrequencyRT_HALLFREQ1Hz0.012
Hall Input 2 FrequencyRT_HALLFREQ2Hz0.012
Hall Input 3 FrequencyRT_HALLFREQ3Hz0.012
Hall Input 4 FrequencyRT_HALLFREQ4Hz0.012
Digital Input 1 DutyRT_DIDUTY1%0.11
Digital Input 2 DutyRT_DIDUTY2%0.11
Digital Input 3 DutyRT_DIDUTY3%0.11
Digital Input 4 DutyRT_DIDUTY4%0.11
Digital Input 5 DutyRT_DIDUTY5%0.11
Digital Input 6 DutyRT_DIDUTY6%0.11
Digital Input 7 DutyRT_DIDUTY7%0.11
Digital Input 8 DutyRT_DIDUTY8%0.11
Digital Input 9 DutyRT_DIDUTY9%0.11
Digital Input 10 DutyRT_DIDUTY10%0.11
Digital Input 11 DutyRT_DIDUTY11%0.11
Digital Input 12 DutyRT_DIDUTY12%0.11
Digital Input 13 DutyRT_DIDUTY13%0.11
Digital Input 14 DutyRT_DIDUTY14%0.11
Digital Input 15 DutyRT_DIDUTY15%0.11
Digital Input 16 DutyRT_DIDUTY16%0.11
Hall Input 1 DutyRT_HALLDUTY1%0.11
Hall Input 2 DutyRT_HALLDUTY2%0.11
Hall Input 3 DutyRT_HALLDUTY3%0.11
Hall Input 4 DutyRT_HALLDUTY4%0.11
Digital Input 1 PeriodRT_DIPER1ms0.0013
Digital Input 2 PeriodRT_DIPER2ms0.0013
Digital Input 3 PeriodRT_DIPER3ms0.0013
Digital Input 4 PeriodRT_DIPER4ms0.0013
Digital Input 5 PeriodRT_DIPER5ms0.0013
Digital Input 6 PeriodRT_DIPER6ms0.0013
Digital Input 7 PeriodRT_DIPER7ms0.0013
Digital Input 8 PeriodRT_DIPER8ms0.0013
Digital Input 9 PeriodRT_DIPER9ms0.0013
Digital Input 10 PeriodRT_DIPER10ms0.0013
Digital Input 11 PeriodRT_DIPER11ms0.0013
Digital Input 12 PeriodRT_DIPER12ms0.0013
Digital Input 13 PeriodRT_DIPER13ms0.0013
Digital Input 14 PeriodRT_DIPER14ms0.0013
Digital Input 15 PeriodRT_DIPER15ms0.0013
Digital Input 16 PeriodRT_DIPER16ms0.0013
Hall Input 1 PeriodRT_HALLPER1ms0.0013
Hall Input 2 PeriodRT_HALLPER2ms0.0013
Hall Input 3 PeriodRT_HALLPER3ms0.0013
Hall Input 4 PeriodRT_HALLPER4ms0.0013
Digital Input 1 Pulse WidthRT_DIPW1ms0.0013
Digital Input 2 Pulse WidthRT_DIPW2ms0.0013
Digital Input 3 Pulse WidthRT_DIPW3ms0.0013
Digital Input 4 Pulse WidthRT_DIPW4ms0.0013
Digital Input 5 Pulse WidthRT_DIPW5ms0.0013
Digital Input 6 Pulse WidthRT_DIPW6ms0.0013
Digital Input 7 Pulse WidthRT_DIPW7ms0.0013
Digital Input 8 Pulse WidthRT_DIPW8ms0.0013
Digital Input 9 Pulse WidthRT_DIPW9ms0.0013
Digital Input 10 Pulse WidthRT_DIPW10ms0.0013
Digital Input 11 Pulse WidthRT_DIPW11ms0.0013
Digital Input 12 Pulse WidthRT_DIPW12ms0.0013
Digital Input 13 Pulse WidthRT_DIPW13ms0.0013
Digital Input 14 Pulse WidthRT_DIPW14ms0.0013
Digital Input 15 Pulse WidthRT_DIPW15ms0.0013
Digital Input 16 Pulse WidthRT_DIPW16ms0.0013
Hall Input 1 Pulse WidthRT_HALLPW1ms0.0013
Hall Input 2 Pulse WidthRT_HALLPW2ms0.0013
Hall Input 3 Pulse WidthRT_HALLPW3ms0.0013
Hall Input 4 Pulse WidthRT_HALLPW4ms0.0013
Digital Input 1 Threshold LowRT_DI1THLOWV0.012
Digital Input 2 Threshold LowRT_DI2THLOWV0.012
Digital Input 3 Threshold LowRT_DI3THLOWV0.012
Digital Input 4 Threshold LowRT_DI4THLOWV0.012
Digital Input 5 Threshold LowRT_DI5THLOWV0.012
Digital Input 6 Threshold LowRT_DI6THLOWV0.012
Digital Input 7 Threshold LowRT_DI7THLOWV0.012
Digital Input 8 Threshold LowRT_DI8THLOWV0.012
Digital Input 1 Threshold HighRT_DI1THHIGHV0.012
Digital Input 2 Threshold HighRT_DI2THHIGHV0.012
Digital Input 3 Threshold HighRT_DI3THHIGHV0.012
Digital Input 4 Threshold HighRT_DI4THHIGHV0.012
Digital Input 5 Threshold HighRT_DI5THHIGHV0.012
Digital Input 6 Threshold HighRT_DI6THHIGHV0.012
Digital Input 7 Threshold HighRT_DI7THHIGHV0.012
Digital Input 8 Threshold HighRT_DI8THHIGHV0.012
Aux 1 StatusRT_AUX1STATUS10
Aux 2 StatusRT_AUX2STATUS10
Aux 3 StatusRT_AUX3STATUS10
Aux 4 StatusRT_AUX4STATUS10
Aux 5 StatusRT_AUX5STATUS10
Aux 6 StatusRT_AUX6STATUS10
Aux 7 StatusRT_AUX7STATUS10
Aux 8 StatusRT_AUX8STATUS10
Solenoid 1 StatusRT_SOL1STATUS10
Solenoid 2 StatusRT_SOL2STATUS10
Solenoid 3 StatusRT_SOL3STATUS10
Solenoid 4 StatusRT_SOL4STATUS10
Solenoid 5 StatusRT_SOL5STATUS10
Solenoid 6 StatusRT_SOL6STATUS10
Solenoid 7 StatusRT_SOL7STATUS10
Solenoid 8 StatusRT_SOL8STATUS10
Solenoid 9 StatusRT_SOL9STATUS10
Solenoid 10 StatusRT_SOL10STATUS10
Solenoid 11 StatusRT_SOL11STATUS10
Solenoid 12 StatusRT_SOL12STATUS10
Solenoid 13 StatusRT_SOL13STATUS10
Solenoid 14 StatusRT_SOL14STATUS10
Solenoid 15 StatusRT_SOL15STATUS10
Solenoid 16 StatusRT_SOL16STATUS10
Solenoid Bank 1 StatusRT_SOLBANK1STS10
Solenoid Bank 2 StatusRT_SOLBANK2STS10
Solenoid Bank 3 StatusRT_SOLBANK3STS10
Solenoid Bank 4 StatusRT_SOLBANK4STS10
Solenoid Bank 1 TemperatureRT_SOLBANK1TEMP°C0.11
Solenoid Bank 2 TemperatureRT_SOLBANK2TEMP°C0.11
Solenoid Bank 3 TemperatureRT_SOLBANK3TEMP°C0.11
Solenoid Bank 4 TemperatureRT_SOLBANK4TEMP°C0.11
Solenoid Supply Output 1 VoltsRT_SOLPWR1VOLTSV0.0013
Solenoid Supply Output 2 VoltsRT_SOLPWR2VOLTSV0.0013
Solenoid Supply Output 3 VoltsRT_SOLPWR3VOLTSV0.0013
Solenoid Supply Output 4 VoltsRT_SOLPWR4VOLTSV0.0013
Solenoid Supply Output 1 CurrentRT_SOLPWR1AMPSA0.0013
Solenoid Supply Output 2 CurrentRT_SOLPWR2AMPSA0.0013
Solenoid Supply Output 3 CurrentRT_SOLPWR3AMPSA0.0013
Solenoid Supply Output 4 CurrentRT_SOLPWR4AMPSA0.0013
Aux 1 FrequencyRT_AUX1FREQHz0.11
Aux 2 FrequencyRT_AUX2FREQHz0.11
Aux 3 FrequencyRT_AUX3FREQHz0.11
Aux 4 FrequencyRT_AUX4FREQHz0.11
Aux 5 FrequencyRT_AUX5FREQHz0.11
Aux 6 FrequencyRT_AUX6FREQHz0.11
Aux 7 FrequencyRT_AUX7FREQHz0.11
Aux 8 FrequencyRT_AUX8FREQHz0.11
Solenoid 1 FrequencyRT_SOL1FREQHz0.11
Solenoid 2 FrequencyRT_SOL2FREQHz0.11
Solenoid 3 FrequencyRT_SOL3FREQHz0.11
Solenoid 4 FrequencyRT_SOL4FREQHz0.11
Solenoid 5 FrequencyRT_SOL5FREQHz0.11
Solenoid 6 FrequencyRT_SOL6FREQHz0.11
Solenoid 7 FrequencyRT_SOL7FREQHz0.11
Solenoid 8 FrequencyRT_SOL8FREQHz0.11
Solenoid 9 FrequencyRT_SOL9FREQHz0.11
Solenoid 10 FrequencyRT_SOL10FREQHz0.11
Solenoid 11 FrequencyRT_SOL11FREQHz0.11
Solenoid 12 FrequencyRT_SOL12FREQHz0.11
Solenoid 13 FrequencyRT_SOL13FREQHz0.11
Solenoid 14 FrequencyRT_SOL14FREQHz0.11
Solenoid 15 FrequencyRT_SOL15FREQHz0.11
Solenoid 16 FrequencyRT_SOL16FREQHz0.11
Aux 1 Duty CycleRT_AUX1DUTY%0.11
Aux 2 Duty CycleRT_AUX2DUTY%0.11
Aux 3 Duty CycleRT_AUX3DUTY%0.11
Aux 4 Duty CycleRT_AUX4DUTY%0.11
Aux 5 Duty CycleRT_AUX5DUTY%0.11
Aux 6 Duty CycleRT_AUX6DUTY%0.11
Aux 7 Duty CycleRT_AUX7DUTY%0.11
Aux 8 Duty CycleRT_AUX8DUTY%0.11
Solenoid 1 Duty CycleRT_SOL1DUTY%0.11
Solenoid 2 Duty CycleRT_SOL2DUTY%0.11
Solenoid 3 Duty CycleRT_SOL3DUTY%0.11
Solenoid 4 Duty CycleRT_SOL4DUTY%0.11
Solenoid 5 Duty CycleRT_SOL5DUTY%0.11
Solenoid 6 Duty CycleRT_SOL6DUTY%0.11
Solenoid 7 Duty CycleRT_SOL7DUTY%0.11
Solenoid 8 Duty CycleRT_SOL8DUTY%0.11
Solenoid 9 Duty CycleRT_SOL9DUTY%0.11
Solenoid 10 Duty CycleRT_SOL10DUTY%0.11
Solenoid 11 Duty CycleRT_SOL11DUTY%0.11
Solenoid 12 Duty CycleRT_SOL12DUTY%0.11
Solenoid 13 Duty CycleRT_SOL13DUTY%0.11
Solenoid 14 Duty CycleRT_SOL14DUTY%0.11
Solenoid 15 Duty CycleRT_SOL15DUTY%0.11
Solenoid 16 Duty CycleRT_SOL16DUTY%0.11
Aux 1 VoltsRT_AUX1VOLTSV0.0013
Aux 2 VoltsRT_AUX2VOLTSV0.0013
Aux 3 VoltsRT_AUX3VOLTSV0.0013
Aux 4 VoltsRT_AUX4VOLTSV0.0013
Aux 5 VoltsRT_AUX5VOLTSV0.0013
Aux 6 VoltsRT_AUX6VOLTSV0.0013
Aux 7 VoltsRT_AUX7VOLTSV0.0013
Aux 8 VoltsRT_AUX8VOLTSV0.0013
Solenoid 1 VoltsRT_SOL1VOLTSV0.0013
Solenoid 2 VoltsRT_SOL2VOLTSV0.0013
Solenoid 3 VoltsRT_SOL3VOLTSV0.0013
Solenoid 4 VoltsRT_SOL4VOLTSV0.0013
Solenoid 5 VoltsRT_SOL5VOLTSV0.0013
Solenoid 6 VoltsRT_SOL6VOLTSV0.0013
Solenoid 7 VoltsRT_SOL7VOLTSV0.0013
Solenoid 8 VoltsRT_SOL8VOLTSV0.0013
Solenoid 9 VoltsRT_SOL9VOLTSV0.0013
Solenoid 10 VoltsRT_SOL10VOLTSV0.0013
Solenoid 11 VoltsRT_SOL11VOLTSV0.0013
Solenoid 12 VoltsRT_SOL12VOLTSV0.0013
Solenoid 13 VoltsRT_SOL13VOLTSV0.0013
Solenoid 14 VoltsRT_SOL14VOLTSV0.0013
Solenoid 15 VoltsRT_SOL15VOLTSV0.0013
Solenoid 16 VoltsRT_SOL16VOLTSV0.0013
Aux 1 CurrentRT_AUX1AMPSA0.0013
Aux 2 CurrentRT_AUX2AMPSA0.0013
Aux 3 CurrentRT_AUX3AMPSA0.0013
Aux 4 CurrentRT_AUX4AMPSA0.0013
Aux 5 CurrentRT_AUX5AMPSA0.0013
Aux 6 CurrentRT_AUX6AMPSA0.0013
Aux 7 CurrentRT_AUX7AMPSA0.0013
Aux 8 CurrentRT_AUX8AMPSA0.0013
Solenoid 1 CurrentRT_SOL1AMPSA0.0013
Solenoid 2 CurrentRT_SOL2AMPSA0.0013
Solenoid 3 CurrentRT_SOL3AMPSA0.0013
Solenoid 4 CurrentRT_SOL4AMPSA0.0013
Solenoid 5 CurrentRT_SOL5AMPSA0.0013
Solenoid 6 CurrentRT_SOL6AMPSA0.0013
Solenoid 7 CurrentRT_SOL7AMPSA0.0013
Solenoid 8 CurrentRT_SOL8AMPSA0.0013
Solenoid 9 CurrentRT_SOL9AMPSA0.0013
Solenoid 10 CurrentRT_SOL10AMPSA0.0013
Solenoid 11 CurrentRT_SOL11AMPSA0.0013
Solenoid 12 CurrentRT_SOL12AMPSA0.0013
Solenoid 13 CurrentRT_SOL13AMPSA0.0013
Solenoid 14 CurrentRT_SOL14AMPSA0.0013
Solenoid 15 CurrentRT_SOL15AMPSA0.0013
Solenoid 16 CurrentRT_SOL16AMPSA0.0013
Analog Output Voltage 1RT_ANOUT1V0.0013
Analog Output Voltage 2RT_ANOUT2V0.0013
Analog Output Voltage 3RT_ANOUT3V0.0013
Analog Output Voltage 4RT_ANOUT4V0.0013
IMU StatusRT_IMUSTATUS10
G-Force LateralRT_GEESLATg0.0013✓
G-Force LongitudinalRT_GEESLONGg0.0013✓
G-Force VerticalRT_GEESVERTg0.0013✓
Acceleration LateralRT_ACCELLATm/s²0.0013✓
Acceleration LongitudinalRT_ACCELLONGm/s²0.0013✓
Acceleration VerticalRT_ACCELVERTm/s²0.0013✓
Pitch Rate (X)RT_PITCHRATE0.11✓
Roll Rate (Y)RT_ROLLRATE0.11✓
Yaw Rate (Z)RT_YAWRATE0.11✓
Pitch Angle (X)RT_PITCHANGLE°0.11✓
Roll Angle (Y)RT_ROLLANGLE°0.11✓
Yaw Angle (Z)RT_YAWANGLE°0.11✓
IMU TemperatureRT_IMUTEMP°C0.11
GPS LongitudeRT_GPSLONG1E-077✓
GPS LatitudeRT_GPSLAT1E-077✓
GPS StatusRT_GPSSTATUS10✓
GPS SatelitesRT_GPSSATS10✓
GPS HeadingRT_GPSHEADING10✓
GPS SpeedRT_GPSSPEEDkm/h0.11✓
Math Expression 1RT_MATHEXPR11(float)
Math Expression 2RT_MATHEXPR21(float)
Math Expression 3RT_MATHEXPR31(float)
Math Expression 4RT_MATHEXPR41(float)
Math Expression 5RT_MATHEXPR51(float)
Math Expression 6RT_MATHEXPR61(float)
Math Expression 7RT_MATHEXPR71(float)
Math Expression 8RT_MATHEXPR81(float)
Math Expression 9RT_MATHEXPR91(float)
Math Expression 10RT_MATHEXPR101(float)
Math Expression 11RT_MATHEXPR111(float)
Math Expression 12RT_MATHEXPR121(float)
Math Expression 13RT_MATHEXPR131(float)
Math Expression 14RT_MATHEXPR141(float)
Math Expression 15RT_MATHEXPR151(float)
Math Expression 16RT_MATHEXPR161(float)
Math Expression 1 StatusRT_MATHEXPR1STS10
Math Expression 2 StatusRT_MATHEXPR2STS10
Math Expression 3 StatusRT_MATHEXPR3STS10
Math Expression 4 StatusRT_MATHEXPR4STS10
Math Expression 5 StatusRT_MATHEXPR5STS10
Math Expression 6 StatusRT_MATHEXPR6STS10
Math Expression 7 StatusRT_MATHEXPR7STS10
Math Expression 8 StatusRT_MATHEXPR8STS10
Math Expression 9 StatusRT_MATHEXPR9STS10
Math Expression 10 StatusRT_MATHEXPR10STS10
Math Expression 11 StatusRT_MATHEXPR11STS10
Math Expression 12 StatusRT_MATHEXPR12STS10
Math Expression 13 StatusRT_MATHEXPR13STS10
Math Expression 14 StatusRT_MATHEXPR14STS10
Math Expression 15 StatusRT_MATHEXPR15STS10
Math Expression 16 StatusRT_MATHEXPR16STS10
User Function 1 StatusRT_GPLOGIC110
User Function 2 StatusRT_GPLOGIC210
User Function 3 StatusRT_GPLOGIC310
User Function 4 StatusRT_GPLOGIC410
User Function 5 StatusRT_GPLOGIC510
User Function 6 StatusRT_GPLOGIC610
User Function 7 StatusRT_GPLOGIC710
User Function 8 StatusRT_GPLOGIC810
User Function 9 StatusRT_GPLOGIC910
User Function 10 StatusRT_GPLOGIC1010
User Function 11 StatusRT_GPLOGIC1110
User Function 12 StatusRT_GPLOGIC1210
User Function 13 StatusRT_GPLOGIC1310
User Function 14 StatusRT_GPLOGIC1410
User Function 15 StatusRT_GPLOGIC1510
User Function 16 StatusRT_GPLOGIC1610
User Function 1 FrequencyRT_GPLOGIC1FREQHz0.11
User Function 2 FrequencyRT_GPLOGIC2FREQHz0.11
User Function 3 FrequencyRT_GPLOGIC3FREQHz0.11
User Function 4 FrequencyRT_GPLOGIC4FREQHz0.11
User Function 5 FrequencyRT_GPLOGIC5FREQHz0.11
User Function 6 FrequencyRT_GPLOGIC6FREQHz0.11
User Function 7 FrequencyRT_GPLOGIC7FREQHz0.11
User Function 8 FrequencyRT_GPLOGIC8FREQHz0.11
User Function 9 FrequencyRT_GPLOGIC9FREQHz0.11
User Function 10 FrequencyRT_GPLOGIC10FREQHz0.11
User Function 11 FrequencyRT_GPLOGIC11FREQHz0.11
User Function 12 FrequencyRT_GPLOGIC12FREQHz0.11
User Function 13 FrequencyRT_GPLOGIC13FREQHz0.11
User Function 14 FrequencyRT_GPLOGIC14FREQHz0.11
User Function 15 FrequencyRT_GPLOGIC15FREQHz0.11
User Function 16 FrequencyRT_GPLOGIC16FREQHz0.11
User Function 1 Duty CycleRT_GPLOGIC1DUTY%0.11
User Function 2 Duty CycleRT_GPLOGIC2DUTY%0.11
User Function 3 Duty CycleRT_GPLOGIC3DUTY%0.11
User Function 4 Duty CycleRT_GPLOGIC4DUTY%0.11
User Function 5 Duty CycleRT_GPLOGIC5DUTY%0.11
User Function 6 Duty CycleRT_GPLOGIC6DUTY%0.11
User Function 7 Duty CycleRT_GPLOGIC7DUTY%0.11
User Function 8 Duty CycleRT_GPLOGIC8DUTY%0.11
User Function 9 Duty CycleRT_GPLOGIC9DUTY%0.11
User Function 10 Duty CycleRT_GPLOGIC10DUTY%0.11
User Function 11 Duty CycleRT_GPLOGIC11DUTY%0.11
User Function 12 Duty CycleRT_GPLOGIC12DUTY%0.11
User Function 13 Duty CycleRT_GPLOGIC13DUTY%0.11
User Function 14 Duty CycleRT_GPLOGIC14DUTY%0.11
User Function 15 Duty CycleRT_GPLOGIC15DUTY%0.11
User Function 16 Duty CycleRT_GPLOGIC16DUTY%0.11
Keypad 1 Button 1RT_KP1BTN110✓
Keypad 1 Button 2RT_KP1BTN210✓
Keypad 1 Button 3RT_KP1BTN310✓
Keypad 1 Button 4RT_KP1BTN410✓
Keypad 1 Button 5RT_KP1BTN510✓
Keypad 1 Button 6RT_KP1BTN610✓
Keypad 1 Button 7RT_KP1BTN710✓
Keypad 1 Button 8RT_KP1BTN810✓
Keypad 1 Button 9RT_KP1BTN910✓
Keypad 1 Button 10RT_KP1BTN1010✓
Keypad 1 Button 11RT_KP1BTN1110✓
Keypad 1 Button 12RT_KP1BTN1210✓
Keypad 1 Button 13RT_KP1BTN1310✓
Keypad 1 Button 14RT_KP1BTN1410✓
Keypad 1 Button 15RT_KP1BTN1510✓
Keypad 1 Button 16RT_KP1BTN1610✓
Keypad 1 Button 17RT_KP1BTN1710✓
Keypad 1 Button 18RT_KP1BTN1810✓
Keypad 1 Button 19RT_KP1BTN1910✓
Keypad 1 Button 20RT_KP1BTN2010✓
Keypad 2 Button 1RT_KP2BTN110✓
Keypad 2 Button 2RT_KP2BTN210✓
Keypad 2 Button 3RT_KP2BTN310✓
Keypad 2 Button 4RT_KP2BTN410✓
Keypad 2 Button 5RT_KP2BTN510✓
Keypad 2 Button 6RT_KP2BTN610✓
Keypad 2 Button 7RT_KP2BTN710✓
Keypad 2 Button 8RT_KP2BTN810✓
Keypad 2 Button 9RT_KP2BTN910✓
Keypad 2 Button 10RT_KP2BTN1010✓
Keypad 2 Button 11RT_KP2BTN1110✓
Keypad 2 Button 12RT_KP2BTN1210✓
Keypad 2 Button 13RT_KP2BTN1310✓
Keypad 2 Button 14RT_KP2BTN1410✓
Keypad 2 Button 15RT_KP2BTN1510✓
Keypad 2 Button 16RT_KP2BTN1610✓
Keypad 2 Button 17RT_KP2BTN1710✓
Keypad 2 Button 18RT_KP2BTN1810✓
Keypad 2 Button 19RT_KP2BTN1910✓
Keypad 2 Button 20RT_KP2BTN2010✓
Keypad 1 StatusRT_KP1STS10
Keypad 2 StatusRT_KP2STS10
User Input 1RT_USERINPUT11(float)✓
User Input 2RT_USERINPUT21(float)✓
User Input 3RT_USERINPUT31(float)✓
User Input 4RT_USERINPUT41(float)✓
User Input 5RT_USERINPUT51(float)✓
User Input 6RT_USERINPUT61(float)✓
User Input 7RT_USERINPUT71(float)✓
User Input 8RT_USERINPUT81(float)✓
User Input 9RT_USERINPUT91(float)✓
User Input 10RT_USERINPUT101(float)✓
User Input 11RT_USERINPUT111(float)✓
User Input 12RT_USERINPUT121(float)✓
User Input 13RT_USERINPUT131(float)✓
User Input 14RT_USERINPUT141(float)✓
User Input 15RT_USERINPUT151(float)✓
User Input 16RT_USERINPUT161(float)✓
User Switch 1RT_USERSWITCH110✓
User Switch 2RT_USERSWITCH210✓
User Switch 3RT_USERSWITCH310✓
User Switch 4RT_USERSWITCH410✓
User Switch 5RT_USERSWITCH510✓
User Switch 6RT_USERSWITCH610✓
User Switch 7RT_USERSWITCH710✓
User Switch 8RT_USERSWITCH810✓
User Switch 9RT_USERSWITCH910✓
User Switch 10RT_USERSWITCH1010✓
User Switch 11RT_USERSWITCH1110✓
User Switch 12RT_USERSWITCH1210✓
User Switch 13RT_USERSWITCH1310✓
User Switch 14RT_USERSWITCH1410✓
User Switch 15RT_USERSWITCH1510✓
User Switch 16RT_USERSWITCH1610✓
User Function 1 Current TargetRT_USERFUNC1CURRTGTA0.0013
User Function 2 Current TargetRT_USERFUNC2CURRTGTA0.0013
User Function 3 Current TargetRT_USERFUNC3CURRTGTA0.0013
User Function 4 Current TargetRT_USERFUNC4CURRTGTA0.0013
User Function 5 Current TargetRT_USERFUNC5CURRTGTA0.0013
User Function 6 Current TargetRT_USERFUNC6CURRTGTA0.0013
User Function 7 Current TargetRT_USERFUNC7CURRTGTA0.0013
User Function 8 Current TargetRT_USERFUNC8CURRTGTA0.0013
User Function 9 Current TargetRT_USERFUNC9CURRTGTA0.0013
User Function 10 Current TargetRT_USERFUNC10CURRTGTA0.0013
User Function 11 Current TargetRT_USERFUNC11CURRTGTA0.0013
User Function 12 Current TargetRT_USERFUNC12CURRTGTA0.0013
User Function 13 Current TargetRT_USERFUNC13CURRTGTA0.0013
User Function 14 Current TargetRT_USERFUNC14CURRTGTA0.0013
User Function 15 Current TargetRT_USERFUNC15CURRTGTA0.0013
User Function 16 Current TargetRT_USERFUNC16CURRTGTA0.0013
User Function 1 CurrentRT_USERFUNC1CURRA0.0013
User Function 2 CurrentRT_USERFUNC2CURRA0.0013
User Function 3 CurrentRT_USERFUNC3CURRA0.0013
User Function 4 CurrentRT_USERFUNC4CURRA0.0013
User Function 5 CurrentRT_USERFUNC5CURRA0.0013
User Function 6 CurrentRT_USERFUNC6CURRA0.0013
User Function 7 CurrentRT_USERFUNC7CURRA0.0013
User Function 8 CurrentRT_USERFUNC8CURRA0.0013
User Function 9 CurrentRT_USERFUNC9CURRA0.0013
User Function 10 CurrentRT_USERFUNC10CURRA0.0013
User Function 11 CurrentRT_USERFUNC11CURRA0.0013
User Function 12 CurrentRT_USERFUNC12CURRA0.0013
User Function 13 CurrentRT_USERFUNC13CURRA0.0013
User Function 14 CurrentRT_USERFUNC14CURRA0.0013
User Function 15 CurrentRT_USERFUNC15CURRA0.0013
User Function 16 CurrentRT_USERFUNC16CURRA0.0013
Counter 1RT_COUNTER110
Counter 2RT_COUNTER210
Counter 3RT_COUNTER310
Counter 4RT_COUNTER410
Counter 5RT_COUNTER510
Counter 6RT_COUNTER610
Counter 7RT_COUNTER710
Counter 8RT_COUNTER810
Engine SpeedRT_ENGSPDRPM0.10
Engine Speed MainRT_ENGSPDMAINRPM0.11✓
Engine Speed TrackingRT_ENGSPDTRKRPM0.11✓
Engine Ignition Switch StatusRT_ENGIGNSWSTS10✓
Engine Start SwitchRT_ENGSTARTSW10✓
Engine Run StatusRT_ENGRUNSTS10✓
Engine Run TimeRT_ENGRUNTIMESec0.0013✓
ECU Supply VoltsRT_ENGECUVOLTSV0.0013✓
Engine Idle StatusRT_ENGIDLESTS10✓
Engine Idle TargetRT_ENGIDLETGTRPM10✓
Air Mass Per CylinderRT_AIRMASSPERCYLg0.0013✓
Air Mass FlowRT_AIRMASSFLOWg/s0.11✓
Fuel Mass FlowRT_FUELMASSFLOWg/s0.012✓
Engine TemperatureRT_ENGTEMP°C0.11✓
Engine Oil TemperatureRT_ENGOILTEMP°C0.11✓
Inlet Air TemperatureRT_INLETAIRTEMP°C0.11✓
Inlet Air Temperature Bank 1RT_INLETAIRTEMP1°C0.11✓
Inlet Air Temperature Bank 2RT_INLETAIRTEMP2°C0.11✓
Inlet Air Temperature AverageRT_INLETAIRTEMPAVG°C0.11✓
Barometric PressureRT_BAROkPa0.012✓
Manifold Absolute PressureRT_MAPkPa0.11✓
Manifold Absolute Pressure Bank 1RT_MAP1kPa0.11✓
Manifold Absolute Pressure Bank 2RT_MAP2kPa0.11✓
Manifold Absolute Pressure AverageRT_MAPAVkPa0.11✓
Manifold Gauge PressureRT_MGPkPa0.11✓
Manifold Gauge Pressure Bank 1RT_MGP1kPa0.11✓
Manifold Gauge Pressure Bank 2RT_MGP2kPa0.11✓
Manifold Gauge Pressure AverageRT_MGPAVkPa0.11✓
Boost PressureRT_BOOSTPRSkPa0.11✓
Boost Pressure Bank 1RT_BOOSTPRS1kPa0.11✓
Boost Pressure Bank 2RT_BOOSTPRS2kPa0.11✓
Boost Pressure AverageRT_BOOSTPRSAVkPa0.11✓
Throttle PositionRT_TPS%0.11
Throttle Position 1 MainRT_TP1MAIN%0.11✓
Throttle Position 1 TrackingRT_TP1TRK%0.11✓
Throttle Effective AreaRT_THROTTLEAREA%0.11✓
Throttle 1 Effective AreaRT_THREFFAREA1%0.11✓
Throttle 2 Effective AreaRT_THREFFAREA2%0.11✓
Throttle Area DemandRT_TADEMAND%0.11✓
Pedal PositionRT_PPS%0.11
Pedal Position MainRT_PPSMAIN%0.11✓
Pedal Position SubRT_PPSTRK%0.11✓
Pedal Closed SwitchRT_PPSCLOSEDSW10✓
Pedal Open SwitchRT_PPSOPENSW10✓
Pedal WOT SwitchRT_PPSWOTSW10✓
Throttle Closed SwitchRT_TPSCLOSEDSW10✓
Throttle Open SwitchRT_TPSOPENSW10✓
Throttle WOT SwitchRT_TPSWOTSW10✓
Overrun Fuel Cut StatusRT_ENGORFCSTATUS10✓
Engine Fault Code CountRT_ENGFAULTCOUNT10✓
Engine Fan 1 RequestRT_ENGFAN1REQ10✓
Engine Fan 2 RequestRT_ENGFAN2REQ10✓
Engine Fan 1 StatusRT_ENGFAN1STS10✓
Engine Fan 2 StatusRT_ENGFAN2STS10✓
AC SwitchRT_ACSWITCH10✓
AC RequestRT_ACREQUEST10✓
AC Clutch StatusRT_ACCLUTCHSTATUS10✓
AC PressureRT_ACPRESSUREkPa0.11✓
Ethanol ContentRT_FUELETHCONTENT%0.11✓
Engine Oil PressureRT_ENGOILPRSkPa0.11✓
Fuel Pressure 1RT_FUELPRS1kPa0.11✓
Fuel Pressure 2RT_FUELPRS2kPa0.11✓
Fuel Pressure 1 DifferentialRT_FUELPRS1DIFFkPa0.11✓
Fuel Pressure 2 DifferentialRT_FUELPRS2DIFFkPa0.11✓
Fuel Pressure 1 Differential OffsetRT_FUELPRS1DIFFOFFkPa0.11✓
Fuel Pressure 2 Differential OffsetRT_FUELPRS2DIFFOFFkPa0.11✓
Fuel Pressure 1 TargetRT_FUELPRS1TGTkPa0.11✓
Fuel Pressure 2 TargetRT_FUELPRS2TGTkPa0.11✓
Fuel Temperature 1RT_FUELTEMP1°C0.11✓
Fuel Temperature 2RT_FUELTEMP2°C0.11✓
Inlet Charge TemperatureRT_CHARGETEMP°C0.11✓
Engine Torque (Supplied)RT_ENGTQNm0.11✓
Engine Torque (Available)RT_ENGTQUNCORRNm0.11✓
Driver Demand TorqueRT_DRIVERDEMANDTQNm0.11✓
Engine Torque Reduction TotalRT_ENGTQREDTOTNm0.11
Engine PowerRT_ENGPWRkW0.11✓
Engine Power (Uncorrected)RT_ENGPWRUNCORRkW0.11✓
Frictional LossRT_ENGFRICTLOSSNm0.11✓
Frictional Loss OffsetRT_ENGFRICTLOSSOFFSET1Nm0.11
Frictional Loss FinalRT_ENGFRICTLOSSFINALNm0.11
Torque Fuel Mass Per CylinderRT_TQMODELFUELMASSg0.00014
Torque Fuel Mass FlowRT_TQMODELFUELFLOWg/s0.012
Ignition RetardRT_ENGIGNRETARD°0.11✓
Torque Model Ignition ReductionRT_TQMODELIGNREDUCTIONNm0.11
Torque Model Cut ReductionRT_TQMODELCUTREDUCTIONNm0.11
Lambda 1RT_LA10.0013✓
Lambda 2RT_LA20.0013✓
Lambda AverageRT_LAAVG0.0013✓
Lambda TargetRT_LATGT0.0013✓
Lambda 1 Target ErrorRT_LA1TGTERR0.0013✓
Lambda 2 Target ErrorRT_LA2TGTERR0.0013✓
Lambda Target Error AverageRT_LATGTERRAVG0.0013✓
Exhaust Manifold Pressure 1RT_EMAP1kPa0.11✓
Exhaust Manifold Pressure 2RT_EMAP2kPa0.11✓
Exhaust Manifold Pressure AverageRT_EMAPAVGkPa0.11✓
Crankcase PressureRT_CRANKCASEPRSkPa0.11✓
Cooling System PressureRT_COOLANTPRSkPa0.11✓
Drive SpeedRT_DRIVESPEEDkm/h0.11✓
Vehicle SpeedRT_VEHICLESPEEDkm/h0.11✓
Wheel Speed Front LeftRT_SPEEDFLkm/h0.11✓
Wheel Speed Front RightRT_SPEEDFRkm/h0.11✓
Wheel Speed Rear LeftRT_SPEEDRLkm/h0.11✓
Wheel Speed Rear RightRT_SPEEDRRkm/h0.11✓
Fuel Trim Bank 1 Short TermRT_FUELTRIM1ST%0.012✓
Fuel Trim Bank 2 Short TermRT_FUELTRIM2ST%0.012✓
Fuel Trim Bank 1 Long TermRT_FUELTRIM1LT%0.012✓
Fuel Trim Bank 2 Long TermRT_FUELTRIM2LT%0.012✓
Fuel Trim Bank 1RT_FUELTRIM1%0.012✓
Fuel Trim Bank 2RT_FUELTRIM2%0.012✓
Injector Duty CycleRT_INJDC%0.012✓
Injector Duty Cycle (Secondary)RT_INJDCSEC%0.012✓
Engine ECU TemperatureRT_ENGECUTEMP°C0.11✓
Throttle Position DeltaRT_TPDELTA%/Sec0.11✓
Pedal Position DeltaRT_PPDELTA%/Sec0.11✓
Engine Speed DeltaRT_ENGSPEEDDELTARPM/Sec0.11
Manifold Pressure DeltaRT_MAPDELTAkPa/Sec0.11✓
Fuel Cut LevelRT_FUELCUT%0.11✓
Ignition Cut LevelRT_IGNCUT%0.11✓
Fuel Cut StatusRT_FUELCUTSTS10✓
Ignition Cut StatusRT_IGNITIONCUTSTS10✓
Engine Protection - Fuel PressureRT_ENGCUTFP10✓
Engine Protection - Oil PressureRT_ENGCUTOP10✓
Engine Protection - Coolant TempRT_ENGCUTTEMP10✓
Engine Protection - EGTRT_ENGCUTEGT10✓
Engine DTC CountRT_ENGDTCCOUNT10✓
Engine DTC CodeRT_ENGDTCCODE10✓
Engine Trigger Error CounterRT_ENGTRIGERRCNT10✓
Max Engine SpeedRT_ENGSPEEDMAXRPM0.11
Engine Speed Limit 1RT_ENGSPEEDLIM1RPM10✓
Engine Speed Limit 2RT_ENGSPEEDLIM2RPM10✓
Vehicle Speed Limit 1RT_VEHSPEEDLIM1km/h0.11✓
Vehicle Speed Limit 2RT_VEHSPEEDLIM2km/h0.11✓
Engine Sync PositionRT_ENGSYNCPOS%0.11✓
Brake Switch 1RT_BRAKESW110✓
Brake Switch 2RT_BRAKESW210✓
Clutch SwitchRT_CLUTCHSW10✓
Brake Pressure FrontRT_BRAKEPRSFBar0.012✓
Brake Pressure RearRT_BRAKEPRSRBar0.012✓
Clutch Pedal PressureRT_CLUTCHPEDPRSBar0.11✓
Clutch Pedal PositionRT_CLUTCHPEDPOS%0.11✓
Start Position SwitchRT_STARTSW10✓
Start / Stop SwitchRT_STARTSTOPSW10✓
Vehicle Ignition StateRT_IGNITIONSTATE10✓
Vehicle Ignition SwitchRT_IGNITIONSW10✓
Ignition RelayRT_IGNRELAY10✓
Ignition AngleRT_IGNANGLE°0.11✓
Injector Pulse WidthRT_INJPWms0.0013✓
Injector Effective Pulse WidthRT_INJEFFPWms0.0013✓
Injector Pulse Width (Secondary)RT_INJPWSECms0.0013✓
Injector Effective Pulse Width (Secondary)RT_INJEFFPWSECms0.0013✓
Fuel Mass Per CylinderRT_FUELMASSCYLg0.00014✓
Injection TimingRT_INJTIMING°0.11✓
Mass Air Flow SensorRT_MAFg/s0.11✓
ECU Traction Control StatusRT_ECUTRACTIONSTATUS10✓
ECU Launch Control StatusRT_ECULAUNCHSTATUS10✓
ECU Rolling Launch Control StatusRT_ECUROLLINGLCSTATUS10✓
ECU Antilag StatusRT_ECUANTILAGSTATUS10✓
ECU Gear Shift Control StatusRT_ECUGSCSTATUS10✓
ECU Differential Control StatusRT_ECUDIFFCONSTATUS10✓
Nitrous Control StatusRT_ECUNOSSTATUS10✓
Launch SwitchRT_LAUNCHSW10✓
Traction SwitchRT_TRACTIONSW10✓
TCM Snow ModeRT_TCMMODESNOW10
Rotary Switch 1RT_ROTARYSW110✓
Rotary Switch 2RT_ROTARYSW210✓
Rotary Switch 3RT_ROTARYSW310✓
Rotary Switch 4RT_ROTARYSW410✓
Reverse SwitchRT_REVERSESW10✓
Engine Crank StatusRT_ENGCRANKSTS10✓
Engine Oil LightRT_ENGOILLIGHT10✓
Engine Start RequestRT_STARTREQUEST10✓
Fuel Pump Status 1RT_FPSTATUS110✓
Fuel Pump Status 2RT_FPSTATUS210✓
Fuel Tank LevelRT_FUELLVL°C0.11✓
Fuel Tank Level 1RT_FUELLVL1°C0.11✓
Fuel Tank Level 2RT_FUELLVL2°C0.11✓
Boost TargetRT_BOOSTTGTkPa0.11✓
Boost Target 1RT_BOOSTTGT1kPa0.11✓
Boost Target 2RT_BOOSTTGT2kPa0.11✓
Boost Target 3RT_BOOSTTGT3kPa0.11✓
Boost Solenoid DutyRT_BOOSTDUTYkPa0.11✓
Cruise Control StatusRT_CRUISESTS10✓
Cruise Control Set SpeedRT_CRUISESPEEDkm/h0.11✓
Steering AngleRT_STEERINGANGLE°0.11✓
Drive Speed DeltaRT_DRIVESPEEDDELTAkm/h/s0.11
Vehicle Speed DeltaRT_VEHICLESPEEDDELTAkm/h/s0.11
GearRT_GEAR10
Gear (ECU)RT_GEARECU10✓
Next GearRT_GEARNEXT10
Previous GearRT_GEARPREV10
Requested GearRT_GEARREQ10
Requested Gear (ECU)RT_GEARREQECU10✓
Selected Gear ART_GEARSELA10
Selected Gear BRT_GEARSELB10
Shifter PositionRT_SHIFTERPOS10
Pre-Selection BiasRT_PRESELECTBIAS10
Input Shaft SpeedRT_INPUTSHSPDRPM0.11✓
Output Shaft SpeedRT_OUTPUTSHSPDRPM0.11✓
Converter SlipRT_CONVERTERSLIPRPM10
Transmission Fluid TemperatureRT_TRANSTEMP°C0.11✓
Display GearRT_GEARDISP10
Tyre DiameterRT_TYREDIAMETERmm0.11
Final Drive RatioRT_FINALDRIVE0.0013
Clutch SlipRT_CLUTCHSLIPRPM10
Input Shaft Speed Limit MaxRT_ISSLIMITMAXRPM10
Input Shaft Speed Limit MinRT_ISSLIMITMINRPM10
Line Pressure Control StatusRT_LINEPRSSTS10
Line PressureRT_LINEPRSBar0.012
Line Pressure TargetRT_LINEPRSTGTBar0.012
Line Pressure Target ErrorRT_LINEPRSERRBar0.012
Line Pressure Feed ForwardRT_LINEPRSFFA0.0013
Line Pressure Solenoid Current TargetRT_LINEPRSSOLTGTA0.0013
Line Pressure Solenoid CurrentRT_LINEPRSSOLCURA0.0013
Line Pressure P OutputRT_LINEPRSPA0.0013
Line Pressure I OutputRT_LINEPRSIA0.0013
Line Pressure D OutputRT_LINEPRSDA0.0013
Line Pressure PID StatusRT_LINEPRSPIDSTS10
Line Pressure Target BaseRT_LINEPRSTGTBASEBar0.012
Input Shaft Speed DeltaRT_ISSDELTARPM/Sec0.11
Output Shaft Speed DeltaRT_OSSDELTARPM/Sec0.11
Engine InertiaRT_ENGINERTIAkg.m²0.012
Engine Inertia Test StatusRT_ENGINERTIATESTSTS10
Road Output Inertia MeasuredRT_ROADOUTINERTIAMEASkg.m²0.012
Road Output InertiaRT_ROADOUTINERTIAkg.m²0.012
Input Shaft TorqueRT_INPUTSHAFTTQNm0.11
Output Shaft TorqueRT_OUTPUTSHAFTTQNm0.11
Road Output TorqueRT_ROADOUTPUTTQNm0.11
Engine Torque (Inertia Corrected)RT_ENGTQINERTIACORRNm0.11
Transmission Control StatusRT_TRANSCTRLSTATUS10
Transmission Drive ModeRT_TRANSDRIVEMODE10
Shifter Position Switch #RT_SHIFTERPOSSWID10
Shifter Position Switch 1RT_SHIFTERPOSSW110✓
Shifter Position Switch 2RT_SHIFTERPOSSW210✓
Shifter Position Switch 3RT_SHIFTERPOSSW310✓
Shifter Position Switch 4RT_SHIFTERPOSSW410✓
Shifter Position Switch 5RT_SHIFTERPOSSW510✓
Shifter Position Switch 6RT_SHIFTERPOSSW610✓
Shifter Position Switch 7RT_SHIFTERPOSSW710✓
Shifter Position Switch 8RT_SHIFTERPOSSW810✓
Shift In ProgressRT_SHIFTINPROG10
Neutral Request SwitchRT_NEUTRALSW10✓
Drive Mode SwitchRT_DRIVESW10✓
Park Request SwitchRT_PARKSW10✓
Park Brake SwitchRT_PARKBRAKESW10✓
Manual Mode SwitchRT_MANUALSW10
R Mode SwitchRT_RMODESW10✓
TCM R ModeRT_TCMMODER10
VDC R ModeRT_VDCMODER10✓
Transmission Low Torque FlagRT_TCMLOWTQFLAG10
Torque Reduction RequestRT_TCMTQREDREQNm0.11
Torque Reduction PercentRT_TCMTQREDPC%0.11
Torque Limit PercentRT_TCMTQLIMITPC%0.11
Torque Limit FinalRT_TCMTQLIMITFINALNm0.11
Torque Limit SlowRT_TCMTQLIMITSLOWNm0.11
Torque Limit FastRT_TCMTQLIMITFASTNm0.11
Torque Limit StatusRT_TCMTQLIMITSTS10
Up Shift SwitchRT_UPSHIFTSW10✓
Down Shift SwitchRT_DNSHIFTSW10✓
Up Shift CountRT_UPSHIFTCOUNT10
Down Shift CountRT_DOWNSHIFTCOUNT10
Up Shift RequestRT_UPSHIFTREQ10
Down Shift RequestRT_DOWNSHIFTREQ10
Reverse Lockout SwitchRT_REVERSELOCKSW10✓
Shifter Position CAN (Raw)RT_SHIFTERPOSCANRAW10
Manual Mode Switch 1RT_MANUALSW110✓
Manual Mode Switch 2RT_MANUALSW210✓
Clutch A StatusRT_CLUTCH1STS10
Clutch A PressureRT_CLUTCH1PRSBar0.012
Clutch A Pressure TargetRT_CLUTCH1TGTBar0.012
Clutch A Pressure Target ErrorRT_CLUTCH1ERRBar0.012
Clutch A Feed ForwardRT_CLUTCH1FFA0.0013
Clutch A Pressure Solenoid Current TargetRT_CLUTCH1SOLTGTA0.0013
Clutch A Pressure Solenoid CurrentRT_CLUTCH1SOLCURA0.0013
Clutch A P GainRT_CLUTCH1KPA0.0013
Clutch A I GainRT_CLUTCH1KIA0.0013
Clutch A D GainRT_CLUTCH1KDA0.0013
Clutch A PID StatusRT_CLUTCH1PIDSTS10
Clutch A SlipRT_CLUTCH1SLIPRPM10
Clutch A TemperatureRT_CLUTCH1TEMP°C0.11
Clutch A SpeedRT_CLUTCH1SPEEDRPM10
Clutch A Torque CapacityRT_CLUTCH1TQCAPNm10
Clutch A Max Torque CapacityRT_CLUTCH1TQCAPMAXNm10
Clutch A Touch PointRT_CLUTCH1TOUCHBar0.012
Clutch A Learned Capacity CorrectionRT_CLUTCH1LEARNEDCORR%0.11
Clutch A Centrifugal PressureRT_CLUTCH1CFPRSBar0.012
Clutch A Input TorqueRT_CLUTCH1INPUTTQNm10
Clutch B StatusRT_CLUTCH2STS10
Clutch B PressureRT_CLUTCH2PRSBar0.012
Clutch B Pressure TargetRT_CLUTCH2TGTBar0.012
Clutch B Pressure Target ErrorRT_CLUTCH2ERRBar0.012
Clutch B Feed ForwardRT_CLUTCH2FFA0.0013
Clutch B Pressure Solenoid Current TargetRT_CLUTCH2SOLTGTA0.0013
Clutch B Pressure Solenoid CurrentRT_CLUTCH2SOLCURA0.0013
Clutch B P GainRT_CLUTCH2KPA0.0013
Clutch B I GainRT_CLUTCH2KIA0.0013
Clutch B D GainRT_CLUTCH2KDA0.0013
Clutch B PID StatusRT_CLUTCH2PIDSTS0.11
Clutch B SlipRT_CLUTCH2SLIPRPM10
Clutch B TemperatureRT_CLUTCH2TEMP°C0.11
Clutch B SpeedRT_CLUTCH2SPEEDRPM10
Clutch B Torque CapacityRT_CLUTCH2TQCAPNm10
Clutch B Max Torque CapacityRT_CLUTCH2TQCAPMAXNm10
Clutch B Touch PointRT_CLUTCH2TOUCHBar0.012
Clutch B Learned Capacity CorrectionRT_CLUTCH2LEARNEDCORR%0.11
Clutch B Centrifugal PressureRT_CLUTCH2CFPRSBar0.012
Clutch B Input TorqueRT_CLUTCH2INPUTTQNm10
Clutch C StatusRT_CLUTCH3STS10
Clutch C PressureRT_CLUTCH3PRSBar0.012
Clutch C Pressure TargetRT_CLUTCH3TGTBar0.012
Clutch C Pressure Target ErrorRT_CLUTCH3ERRBar0.012
Clutch C Feed ForwardRT_CLUTCH3FFA0.0013
Clutch C Pressure Solenoid Current TargetRT_CLUTCH3SOLTGTA0.0013
Clutch C Pressure Solenoid CurrentRT_CLUTCH3SOLCURA0.0013
Clutch C P GainRT_CLUTCH3KPA0.0013
Clutch C I GainRT_CLUTCH3KIA0.0013
Clutch C D GainRT_CLUTCH3KDA0.0013
Clutch C PID StatusRT_CLUTCH3PIDSTS0.11
Clutch C SlipRT_CLUTCH3SLIPRPM10
Clutch C TemperatureRT_CLUTCH3TEMP°C0.11
Clutch C SpeedRT_CLUTCH3SPEEDRPM10
Clutch C Torque CapacityRT_CLUTCH3TQCAPNm10
Clutch C Max Torque CapacityRT_CLUTCH3TQCAPMAXNm10
Clutch C Touch PointRT_CLUTCH3TOUCHBar0.012
Clutch C Learned Capacity CorrectionRT_CLUTCH3LEARNEDCORR%0.11
Clutch C Centrifugal PressureRT_CLUTCH3CFPRSBar0.012
Clutch C Input TorqueRT_CLUTCH3INPUTTQNm10
Clutch D StatusRT_CLUTCH4STS10
Clutch D PressureRT_CLUTCH4PRSBar0.012
Clutch D Pressure TargetRT_CLUTCH4TGTBar0.012
Clutch D Pressure Target ErrorRT_CLUTCH4ERRBar0.012
Clutch D Feed ForwardRT_CLUTCH4FFA0.0013
Clutch D Pressure Solenoid Current TargetRT_CLUTCH4SOLTGTA0.0013
Clutch D Pressure Solenoid CurrentRT_CLUTCH4SOLCURA0.0013
Clutch D P GainRT_CLUTCH4KPA0.0013
Clutch D I GainRT_CLUTCH4KIA0.0013
Clutch D D GainRT_CLUTCH4KDA0.0013
Clutch D PID StatusRT_CLUTCH4PIDSTS0.11
Clutch D SlipRT_CLUTCH4SLIPRPM10
Clutch D TemperatureRT_CLUTCH4TEMP°C0.11
Clutch D SpeedRT_CLUTCH4SPEEDRPM10
Clutch D Torque CapacityRT_CLUTCH4TQCAPNm10
Clutch D Max Torque CapacityRT_CLUTCH4TQCAPMAXNm10
Clutch D Touch PointRT_CLUTCH4TOUCHBar0.012
Clutch D Learned Capacity CorrectionRT_CLUTCH4LEARNEDCORR%0.11
Clutch D Centrifugal PressureRT_CLUTCH4CFPRSBar0.012
Clutch D Input TorqueRT_CLUTCH4INPUTTQNm10
Clutch E StatusRT_CLUTCH5STS10
Clutch E PressureRT_CLUTCH5PRSBar0.012
Clutch E Pressure TargetRT_CLUTCH5TGTBar0.012
Clutch E Pressure Target ErrorRT_CLUTCH5ERRBar0.012
Clutch E Feed ForwardRT_CLUTCH5FFA0.0013
Clutch E Pressure Solenoid Current TargetRT_CLUTCH5SOLTGTA0.0013
Clutch E Pressure Solenoid CurrentRT_CLUTCH5SOLCURA0.0013
Clutch E P GainRT_CLUTCH5KPA0.0013
Clutch E I GainRT_CLUTCH5KIA0.0013
Clutch E D GainRT_CLUTCH5KDA0.0013
Clutch E PID StatusRT_CLUTCH5PIDSTS0.11
Clutch E SlipRT_CLUTCH5SLIPRPM10
Clutch E TemperatureRT_CLUTCH5TEMP°C0.11
Clutch E SpeedRT_CLUTCH5SPEEDRPM10
Clutch E Torque CapacityRT_CLUTCH5TQCAPNm10
Clutch E Max Torque CapacityRT_CLUTCH5TQCAPMAXNm10
Clutch E Touch PointRT_CLUTCH5TOUCHBar0.012
Clutch E Learned Capacity CorrectionRT_CLUTCH5LEARNEDCORR%0.11
Clutch E Centrifugal PressureRT_CLUTCH5CFPRSBar0.012
Clutch E Input TorqueRT_CLUTCH5INPUTTQNm10
Clutch F StatusRT_CLUTCH6STS10
Clutch F PressureRT_CLUTCH6PRSBar0.012
Clutch F Pressure TargetRT_CLUTCH6TGTBar0.012
Clutch F Pressure Target ErrorRT_CLUTCH6ERRBar0.012
Clutch F Feed ForwardRT_CLUTCH6FFA0.0013
Clutch F Pressure Solenoid Current TargetRT_CLUTCH6SOLTGTA0.0013
Clutch F Pressure Solenoid CurrentRT_CLUTCH6SOLCURA0.0013
Clutch F P GainRT_CLUTCH6KPA0.0013
Clutch F I GainRT_CLUTCH6KIA0.0013
Clutch F D GainRT_CLUTCH6KDA0.0013
Clutch F PID StatusRT_CLUTCH6PIDSTS0.11
Clutch F SlipRT_CLUTCH6SLIPRPM10
Clutch F TemperatureRT_CLUTCH6TEMP°C0.11
Clutch F SpeedRT_CLUTCH6SPEEDRPM10
Clutch F Torque CapacityRT_CLUTCH6TQCAPNm10
Clutch F Max Torque CapacityRT_CLUTCH6TQCAPMAXNm10
Clutch F Touch PointRT_CLUTCH6TOUCHBar0.012
Clutch F Learned Capacity CorrectionRT_CLUTCH6LEARNEDCORR%0.11
Clutch F Centrifugal PressureRT_CLUTCH6CFPRSBar0.012
Clutch F Input TorqueRT_CLUTCH6INPUTTQNm10
Clutch G StatusRT_CLUTCH7STS10
Clutch G PressureRT_CLUTCH7PRSBar0.012
Clutch G Pressure TargetRT_CLUTCH7TGTBar0.012
Clutch G Pressure Target ErrorRT_CLUTCH7ERRBar0.012
Clutch G Feed ForwardRT_CLUTCH7FFA0.0013
Clutch G Pressure Solenoid Current TargetRT_CLUTCH7SOLTGTA0.0013
Clutch G Pressure Solenoid CurrentRT_CLUTCH7SOLCURA0.0013
Clutch G P GainRT_CLUTCH7KPA0.0013
Clutch G I GainRT_CLUTCH7KIA0.0013
Clutch G D GainRT_CLUTCH7KDA0.0013
Clutch G PID StatusRT_CLUTCH7PIDSTS0.11
Clutch G SlipRT_CLUTCH7SLIPRPM10
Clutch G TemperatureRT_CLUTCH7TEMP°C0.11
Clutch G SpeedRT_CLUTCH7SPEEDRPM10
Clutch G Torque CapacityRT_CLUTCH7TQCAPNm10
Clutch G Max Torque CapacityRT_CLUTCH7TQCAPMAXNm10
Clutch G Touch PointRT_CLUTCH7TOUCHBar0.012
Clutch G Learned Capacity CorrectionRT_CLUTCH7LEARNEDCORR%0.11
Clutch G Centrifugal PressureRT_CLUTCH7CFPRSBar0.012
Clutch G Input TorqueRT_CLUTCH7INPUTTQNm10
Clutch H StatusRT_CLUTCH8STS10
Clutch H PressureRT_CLUTCH8PRSBar0.012
Clutch H Pressure TargetRT_CLUTCH8TGTBar0.012
Clutch H Pressure Target ErrorRT_CLUTCH8ERRBar0.012
Clutch H Feed ForwardRT_CLUTCH8FFA0.0013
Clutch H Pressure Solenoid Current TargetRT_CLUTCH8SOLTGTA0.0013
Clutch H Pressure Solenoid CurrentRT_CLUTCH8SOLCURA0.0013
Clutch H P GainRT_CLUTCH8KPA0.0013
Clutch H I GainRT_CLUTCH8KIA0.0013
Clutch H D GainRT_CLUTCH8KDA0.0013
Clutch H PID StatusRT_CLUTCH8PIDSTS0.11
Clutch H SlipRT_CLUTCH8SLIPRPM10
Clutch H TemperatureRT_CLUTCH8TEMP°C0.11
Clutch H SpeedRT_CLUTCH8SPEEDRPM10
Clutch H Torque CapacityRT_CLUTCH8TQCAPNm10
Clutch H Max Torque CapacityRT_CLUTCH8TQCAPMAXNm10
Clutch H Touch PointRT_CLUTCH8TOUCHBar0.012
Clutch H Learned Capacity CorrectionRT_CLUTCH8LEARNEDCORR%0.11
Clutch H Centrifugal PressureRT_CLUTCH8CFPRSBar0.012
Clutch H Input TorqueRT_CLUTCH8INPUTTQNm10
Clutch Active Pressure TargetRT_CLUTCHACTPRSTGTBar0.012
Clutch Active Pressure Target BaseRT_CLUTCHACTPRSTGTBASEBar0.012
Active ClutchRT_CLUTCHACTIVE10
Inactive ClutchRT_CLUTCHINACTIVE10
Takeup Slip TargetRT_TAKEUPSLIPTGTRPM10
Takeup Slip ErrorRT_TAKEUPSLIPERRRPM10
Takeup Clutch PressureRT_TAKEUPPRSTGTBar0.012
Takeup Torque Feed ForwardRT_TAKEUPTQFFNm0.11
Takeup Gain PRT_TAKEUPKPNm0.11
Takeup Gain IRT_TAKEUPKINm0.11
Takeup Gain DRT_TAKEUPKDNm0.11
Takeup StatusRT_TAKEUPSTS10
Takeup Clutch TorqueRT_TAKEUPCLUTCHTQNm0.11
Takeup Sync SpeedRT_TAKEUPSYNCSPDRPM10
Clutch Touch Point Leaning StatusRT_CLUTCHTOUCHLEARNSTS10
Clutch Adaption StatusRT_CLUTCHADAPTSTS10
Global Torque LimitRT_TCMTQLIMITGLOBALNm0.11
Up Shift Torque LimitRT_TCMTQLIMITUPSHIFTNm0.11
Down Shift Torque LimitRT_TCMTQLIMITDOWNSHIFTNm0.11
Takeup Torque LimitRT_TCMTQLIMITTAKEUPNm0.11
Fault Torque LimitRT_TCMTQLIMITFAULTNm0.11
Down Shift Lock Phase Torque LimitRT_TCMTQLIMITDOWNLOCKNm0.11
Takeup Shift Torque LimitRT_TCMTQLIMITTAKEUPSHIFTNm0.11
Up Shift StatusRT_UPSHIFTSTATUS10
Down Shift StatusRT_DOWNSHIFTSTATUS10
Up Shift TimeRT_UPSHIFTTIMEms10
Down Shift TimeRT_DOWNSHIFTTIMEms10
Shift TimeRT_SHIFTTIMEms10
Up Shift Sync ProgressRT_UPSHIFTPROGRESS%0.11
Down Shift Sync ProgressRT_DOWNSHIFTPROGRESS%0.11
Shift Sync ProgressRT_SHIFTPROGRESS%0.11
Rev Match TargetRT_REVMATCHTGTRPM10
Rev Match ErrorRT_REVMATCHERRORRPM10
Up Shift Rev Match Error CountRT_UPSHIFTREVMATCHERRCNT10
Down Shift Rev Match Error CountRT_DOWNSHIFTREVMATCHERRCNT10
Shift Solenoid #RT_SHIFTSOLENOIDID10
Clutch #RT_CLUTCHID10
Clutch Pressure Target (Shared)RT_CLUTCHPRSTGTSHAREDBar0.012
Clutch Pressure Target Error (Shared)RT_CLUTCHPRSTGTERRSHAREDBar0.012
Clutch Slip (Shared)RT_CLUTCHSLIPSHAREDRPM10
Clutch Pressure Target MaxRT_CLUTCHPRSMAXBar0.012
Clutch Temperature MaxRT_CLUTCHTEMPMAX°C0.11
Clutch By Wire ScalerRT_CBWSCALER%0.11
Torque Converter TorqueRT_CONVERTERTQNm0.11
Torque Converter Lock Up StatusRT_TCLOCKUPSTS10
Torque Converter Lock Up PressureRT_TCLOCKUPPRSBar0.012
Torque Converter Lock Up Solenoid Current TargetRT_TCLOCKUPSOLTGTA0.0013
Torque Converter Lock Up Solenoid CurrentRT_TCLOCKUPSOLCURRA0.0013
Torque Converter Lock Up CapacityRT_TCLOCKUPTQCAPNm10
Torque Converter Lock Up Clutch StatusRT_TCLOCKUPCLUTCHSTS10
Torque Converter Lock Up RequestRT_TCLOCKUPREQ10
Gear RatioRT_GEARRATIO0.0013
Input Output Shaft Speed RatioRT_INOUTSSRATIO0.0013
RPM Speed RatioRT_RPMSPDRATIO0.0013
Gear Shift Ratio ChangeRT_GEARSHIFTRATIOCHANGE0.0013
Transbrake StatusRT_TRANSBRAKESTS10
Transbrake SwitchRT_TRANSBRAKESW10✓
Transbrake Bump SwitchRT_TRANSBRAKEBUMPSW10✓
Transbrake Solenoid Current TargetRT_TRANSBRAKESOLTGTA0.0013
Transbrake Solenoid CurrentRT_TRANSBRAKESOLCURRA0.0013
Transbrake Torque LimitRT_TRANSBRAKETQLIMITNm10
Park Hold Solenoid StatusRT_PARKHOLDSOLSTS10
Park Hold Solenoid CommandRT_PARKHOLDSOLCMD%0.11
Park Hold Solenoid Current TargetRT_PARKHOLDSOLTGTA0.0013
Park Hold Solenoid CurrentRT_PARKHOLDSOLCURA0.0013
Park Release Solenoid StatusRT_PARKRELEASESOLSTS10
Park Release Solenoid CommandRT_PARKRELEASESOLCMD%0.11
Park Release Solenoid Current TargetRT_PARKRELEASESOLTGTA0.0013
Park Release Solenoid CurrentRT_PARKRELEASESOLCURA0.0013
Sport Mode SwitchRT_SPORTSW10✓
Transmission Fluid Cooler TemperatureRT_TRANSFLUIDCOOLERTEMP°C0.11✓
Snow Mode SwitchRT_SNOWMODESW10✓
Engine Gearshift Torque Limit ErrorRT_ENGTQLIMITERRNm10
Up Shift Torque Limit Error CountRT_ENGUPSHIFTTQLIMITERRCNT10
Down Shift Torque Limit Error CountRT_ENGDOWNSHIFTTQLIMITERRCNT10
Up Shift Torque Limit StatusRT_UPSHIFTTQLIMITSTS10
Down Shift Torque Limit StatusRT_DOWNSHIFTTQLIMITSTS10
Up Shift Rev Match StatusRT_UPSHIFTREVMATCHSTS10
Down Shift Rev Match StatusRT_DOWNSHIFTREVMATCHSTS10
Shift PhaseRT_SHIFTPHASE10
Shift Request StatusRT_SHIFTREQSTS10
Rev Match TorqueRT_REVMATCHTQNm0.11
Time In GearRT_TIMEINGEARms10
Shift Prefill TimeRT_SHIFTPREFILLTIMEms10
Shift Fast Fill TimeRT_SHIFTFASTFILLTIMEms10
Shift Stable Fill TimeRT_SHIFTSTABLEFILLTIMEms10
Shift Fill TimeRT_SHIFTFILLTIMEms10
Shift Transfer TimeRT_SHIFTTRANSFERTIMEms10
Shift Inertial TimeRT_SHIFTINERTIALTIMEms10
Shift Lock TimeRT_SHIFTLOCKTIMEms10
Next Gear SpeedRT_GEARSPDNEXTRPM10
Previous Gear SpeedRT_GEARSPDPREVRPM10
Oncoming Clutch SlipRT_CLUTCHSLIPONRPM10
Offgoing Clutch SlipRT_CLUTCHSLIPOFFRPM10
Oncoming Clutch Slip TargetRT_CLUTCHSLIPTGTONRPM10
Oncoming Clutch Slip ErrorRT_CLUTCHSLIPERRONRPM10
Offgoing Clutch Slip ErrorRT_CLUTCHSLIPERROFFRPM10
Oncoming Clutch Torque SplitRT_CLUTCHTQSPLITONNm0.11
Offgoing Clutch Torque SplitRT_CLUTCHTQSPLITOFFNm0.11
Shift Fork 1 Position TargetRT_FORK1POSTGTmm0.012
Shift Fork 2 Position TargetRT_FORK2POSTGTmm0.012
Shift Fork 3 Position TargetRT_FORK3POSTGTmm0.012
Shift Fork 4 Position TargetRT_FORK4POSTGTmm0.012
Shift Fork 5 Position TargetRT_FORK5POSTGTmm0.012
Shift Fork 6 Position TargetRT_FORK6POSTGTmm0.012
Shift Fork 7 Position TargetRT_FORK7POSTGTmm0.012
Shift Fork 8 Position TargetRT_FORK8POSTGTmm0.012
Shift Fork 1 PositionRT_FORK1POSmm0.012
Shift Fork 2 PositionRT_FORK2POSmm0.012
Shift Fork 3 PositionRT_FORK3POSmm0.012
Shift Fork 4 PositionRT_FORK4POSmm0.012
Shift Fork 5 PositionRT_FORK5POSmm0.012
Shift Fork 6 PositionRT_FORK6POSmm0.012
Shift Fork 7 PositionRT_FORK7POSmm0.012
Shift Fork 8 PositionRT_FORK8POSmm0.012
Shift Fork 1 StatusRT_FORK1STS10
Shift Fork 2 StatusRT_FORK2STS10
Shift Fork 3 StatusRT_FORK3STS10
Shift Fork 4 StatusRT_FORK4STS10
Shift Fork 5 StatusRT_FORK5STS10
Shift Fork 6 StatusRT_FORK6STS10
Shift Fork 7 StatusRT_FORK7STS10
Shift Fork 8 StatusRT_FORK8STS10
Preselection StrategyRT_PRESELECTIONSTRAT10
Preselection StatusRT_PRESELECTIONSTS10
Active Shift Fork PositionRT_FORKACTPOSmm0.012
Active Shift Fork Position TargetRT_FORKACTPOSTGTmm0.012
Active Shift Fork Position ErrorRT_FORKACTPOSERRmm0.012
Active Gear Shift ForkRT_FORKGEARACTID10
Preselected Gear Shift ForkRT_FORKGEARPRESELECTID10
Moving Shift ForkRT_FORKMOVINGID10
Active Axis Fork Movement Torque LimitRT_ACTAXISFORKMOVETQLIMITNm10
Shift Fork 1 Position ErrorRT_FORK1POSERRmm0.012
Shift Fork 2 Position ErrorRT_FORK2POSERRmm0.012
Shift Fork 3 Position ErrorRT_FORK3POSERRmm0.012
Shift Fork 4 Position ErrorRT_FORK4POSERRmm0.012
Shift Fork 5 Position ErrorRT_FORK5POSERRmm0.012
Shift Fork 6 Position ErrorRT_FORK6POSERRmm0.012
Shift Fork 7 Position ErrorRT_FORK7POSERRmm0.012
Shift Fork 8 Position ErrorRT_FORK8POSERRmm0.012
Shift Fork 1 TrackingRT_FORK1TRKmm0.012
Shift Fork 2 TrackingRT_FORK2TRKmm0.012
Shift Fork 3 TrackingRT_FORK3TRKmm0.012
Shift Fork 4 TrackingRT_FORK4TRKmm0.012
Shift Fork 5 TrackingRT_FORK5TRKmm0.012
Shift Fork 6 TrackingRT_FORK6TRKmm0.012
Shift Fork 7 TrackingRT_FORK7TRKmm0.012
Shift Fork 8 TrackingRT_FORK8TRKmm0.012
Axis A Pressure Control StatusRT_AXISAPRSCTRLSTS10
Axis A PressureRT_AXISAPRSBar0.012
Axis A Pressure TargetRT_AXISATGTBar0.012
Axis A Pressure Target ErrorRT_AXISAERRBar0.012
Axis A Feed ForwardRT_AXISAFFA0.0013
Axis A Pressure Solenoid Current TargetRT_AXISASOLTGTA0.0013
Axis A Pressure Solenoid CurrentRT_AXISASOLCURA0.0013
Axis A P GainRT_AXISAKPA0.0013
Axis A I GainRT_AXISAKIA0.0013
Axis A D GainRT_AXISAKDA0.0013
Axis A PID StatusRT_AXISAPIDSTS10
Axis B Pressure Control StatusRT_AXISBPRSCTRLSTS10
Axis B PressureRT_AXISBPRSBar0.012
Axis B Pressure TargetRT_AXISBTGTBar0.012
Axis B Pressure Target ErrorRT_AXISBERRBar0.012
Axis B Feed ForwardRT_AXISBFFA0.0013
Axis B Pressure Solenoid Current TargetRT_AXISBSOLTGTA0.0013
Axis B Pressure Solenoid CurrentRT_AXISBSOLCURA0.0013
Axis B P GainRT_AXISBKPA0.0013
Axis B I GainRT_AXISBKIA0.0013
Axis B D GainRT_AXISBKDA0.0013
Axis B PID StatusRT_AXISBPIDSTS10
Active Axis Pressure TargetRT_AXISACTTGTBar0.012
Inactive Axis Pressure TargetRT_AXISINACTTGTBar0.012
Axis Pressure Target Error (Shared)RT_AXISPRSTGTERRSHAREDBar0.012
Axis Pressure Target (Shared)RT_AXISPRSTGTSHAREDBar0.012
Axis #RT_AXISID10
Axis Pressure Target MaxRT_AXISPRSTGTMAXBar0.012
Lube Flow Pressure StatusRT_LUBEFLOWPRSSTATUS10
Lubrication Flow Pressure TargetRT_LUBEFLOWPRSTGTBar0.012
Lubrication Flow Pressure Solenoid Current TargetRT_LUBEFLOWPRSSOLTGTA0.0013
Lubrication Flow Pressure Solenoid CurrentRT_LUBEFLOWPRSSOLCURRA0.0013
Shift Fork 1 VelocityRT_FORK1VELOCITYmm/sec0.012
Shift Fork 2 VelocityRT_FORK2VELOCITYmm/sec0.012
Shift Fork 3 VelocityRT_FORK3VELOCITYmm/sec0.012
Shift Fork 4 VelocityRT_FORK4VELOCITYmm/sec0.012
Shift Fork 5 VelocityRT_FORK5VELOCITYmm/sec0.012
Shift Fork 6 VelocityRT_FORK6VELOCITYmm/sec0.012
Shift Fork 7 VelocityRT_FORK7VELOCITYmm/sec0.012
Shift Fork 8 VelocityRT_FORK8VELOCITYmm/sec0.012
Shift Fork Movement Pressure BaseRT_FORKMOVEPRSBASEBar0.012
Shift Fork Movement PressureRT_FORKMOVEPRSBar0.012
Shift Fork Movement Pressure P GainRT_FORKMOVEPRSKPBar0.012
Shift Fork Movement Pressure I GainRT_FORKMOVEPRSKIBar0.012
Shift Fork Movement Pressure D GainRT_FORKMOVEPRSKDBar0.012
Shift P GainRT_SHIFTKPNm0.11
Shift I GainRT_SHIFTKINm0.11
Shift D GainRT_SHIFTKDNm0.11
Shift Solenoid 1 Current TargetRT_SHIFTSOL1CURTGTA0.0013
Shift Solenoid 2 Current TargetRT_SHIFTSOL2CURTGTA0.0013
Shift Solenoid 3 Current TargetRT_SHIFTSOL3CURTGTA0.0013
Shift Solenoid 4 Current TargetRT_SHIFTSOL4CURTGTA0.0013
Shift Solenoid 5 Current TargetRT_SHIFTSOL5CURTGTA0.0013
Shift Solenoid 6 Current TargetRT_SHIFTSOL6CURTGTA0.0013
Shift Solenoid 7 Current TargetRT_SHIFTSOL7CURTGTA0.0013
Shift Solenoid 8 Current TargetRT_SHIFTSOL8CURTGTA0.0013
Shift Solenoid 1 CurrentRT_SHIFTSOL1CURA0.0013
Shift Solenoid 2 CurrentRT_SHIFTSOL2CURA0.0013
Shift Solenoid 3 CurrentRT_SHIFTSOL3CURA0.0013
Shift Solenoid 4 CurrentRT_SHIFTSOL4CURA0.0013
Shift Solenoid 5 CurrentRT_SHIFTSOL5CURA0.0013
Shift Solenoid 6 CurrentRT_SHIFTSOL6CURA0.0013
Shift Solenoid 7 CurrentRT_SHIFTSOL7CURA0.0013
Shift Solenoid 8 CurrentRT_SHIFTSOL8CURA0.0013
Shift Solenoid 1 StatusRT_SHIFTSOL1STS10
Shift Solenoid 2 StatusRT_SHIFTSOL2STS10
Shift Solenoid 3 StatusRT_SHIFTSOL3STS10
Shift Solenoid 4 StatusRT_SHIFTSOL4STS10
Shift Solenoid 5 StatusRT_SHIFTSOL5STS10
Shift Solenoid 6 StatusRT_SHIFTSOL6STS10
Shift Solenoid 7 StatusRT_SHIFTSOL7STS10
Shift Solenoid 8 StatusRT_SHIFTSOL8STS10
Hill Descent ControlRT_HILLDESCENT10
Hill Ascent ControlRT_HILLASCENT10
Auto Up Shift SpeedRT_AUTOUPSHIFTSPEED0.11
Auto Down Shift SpeedRT_AUTODOWNSHIFTSPEED0.11
Kickdown SpeedRT_KICKDOWNSPEED0.11
Input Shaft Speed (Calculated)RT_ISSCALCRPM0.11
Output Shaft Speed (Calculated)RT_OSSCALCRPM0.11
Manual Override SwitchRT_MANUALOVRSW10✓
Input Shaft Speed (Calculated) DeltaRT_ISSCALCDELTARPM/Sec0.11
Output Shaft Speed (Calculated) DeltaRT_OSSCALCDELTARPM/Sec0.11
Launch Control StatusRT_LAUNCHCTRLSTS10
Launch Control Engine Speed TargetRT_LAUNCHCTRLENGSPDTGTRPM10
Launch Control Torque LimitRT_LAUNCHCTRLTQLIMITNm0.11
Launch Control Clutch TorqueRT_LAUNCHCTRLCLUTCHTQNm0.11
Launch Control Static TimeRT_LAUNCHCTRLSTATICTIMEms10
Launch Control Preload TimeRT_LAUNCHCTRLPRELOADTIMEms10
Launch Control Moving TimeRT_LAUNCHCTRLMOVINGTIMEms10
Launch Preload SwitchRT_LAUNCHPRELOADSW10
Auto Shift Gear TableRT_AUTOSHIFTGEARTABLE0.012
Auto Shift StatusRT_AUTOSHIFTSTATUS10
Logging Enable SwitchRT_LOGGINGENSW10
Logging StatusRT_LOGGINGSTATUS10
Logging Data RateRT_LOGGINGRATEKB/sec0.00097656253
Logging Memory UsedRT_LOGGINGBYTESWRITTENKB0.51
Logging Capacity UsedRT_LOGGINGCAPACITY%0.11
Logging Total Session CounterRT_LOGGINGSESSIONCOUNT10
Log Marker SwitchRT_LOGMARKERSW10✓
Up Shift Switch 2RT_UPSHIFTSW210✓
Down Shift Switch 2RT_DNSHIFTSW210✓
Shift Fork Move PhaseRT_FORKMOVEPHASE10
Shift Fork Stall TypeRT_FORKSTALLTYPE10
Shift Fork Move AttemptRT_FORKMOVEATTEMPT10
Shift Fork Sync SlipRT_FORKSYNCSLIPRPM10
Shift Fork Crash CountRT_FORKCRASHCOUNT10
Shift Fork Phase TimeRT_FORKPHASETIMEms10
Shift Fork Force DemandRT_FORKFORCEDEMAND%0.11
Shift Fork TravelRT_FORKTRAVELPCNT%0.11
Shift Fork Clutch Pulse StatusRT_FORKCLUTCHPULSESTS10
Shift Fork Idle Speed RequestRT_FORKMOVEIDLEREQRPM10
Shift Fork Sync EnergyRT_FORKSYNCENERGY10
Script Output 1 FrequencyRT_SCRIPTOUT1FREQHz0.11
Script Output 2 FrequencyRT_SCRIPTOUT2FREQHz0.11
Script Output 3 FrequencyRT_SCRIPTOUT3FREQHz0.11
Script Output 4 FrequencyRT_SCRIPTOUT4FREQHz0.11
Script Output 5 FrequencyRT_SCRIPTOUT5FREQHz0.11
Script Output 6 FrequencyRT_SCRIPTOUT6FREQHz0.11
Script Output 7 FrequencyRT_SCRIPTOUT7FREQHz0.11
Script Output 8 FrequencyRT_SCRIPTOUT8FREQHz0.11
Script Output 9 FrequencyRT_SCRIPTOUT9FREQHz0.11
Script Output 10 FrequencyRT_SCRIPTOUT10FREQHz0.11
Script Output 11 FrequencyRT_SCRIPTOUT11FREQHz0.11
Script Output 12 FrequencyRT_SCRIPTOUT12FREQHz0.11
Script Output 13 FrequencyRT_SCRIPTOUT13FREQHz0.11
Script Output 14 FrequencyRT_SCRIPTOUT14FREQHz0.11
Script Output 15 FrequencyRT_SCRIPTOUT15FREQHz0.11
Script Output 16 FrequencyRT_SCRIPTOUT16FREQHz0.11
Script Output 17 FrequencyRT_SCRIPTOUT17FREQHz0.11
Script Output 18 FrequencyRT_SCRIPTOUT18FREQHz0.11
Script Output 19 FrequencyRT_SCRIPTOUT19FREQHz0.11
Script Output 20 FrequencyRT_SCRIPTOUT20FREQHz0.11
Script Output 21 FrequencyRT_SCRIPTOUT21FREQHz0.11
Script Output 22 FrequencyRT_SCRIPTOUT22FREQHz0.11
Script Output 23 FrequencyRT_SCRIPTOUT23FREQHz0.11
Script Output 24 FrequencyRT_SCRIPTOUT24FREQHz0.11
Script Output 1 Duty CycleRT_SCRIPTOUT1DUTY%0.11
Script Output 2 Duty CycleRT_SCRIPTOUT2DUTY%0.11
Script Output 3 Duty CycleRT_SCRIPTOUT3DUTY%0.11
Script Output 4 Duty CycleRT_SCRIPTOUT4DUTY%0.11
Script Output 5 Duty CycleRT_SCRIPTOUT5DUTY%0.11
Script Output 6 Duty CycleRT_SCRIPTOUT6DUTY%0.11
Script Output 7 Duty CycleRT_SCRIPTOUT7DUTY%0.11
Script Output 8 Duty CycleRT_SCRIPTOUT8DUTY%0.11
Script Output 9 Duty CycleRT_SCRIPTOUT9DUTY%0.11
Script Output 10 Duty CycleRT_SCRIPTOUT10DUTY%0.11
Script Output 11 Duty CycleRT_SCRIPTOUT11DUTY%0.11
Script Output 12 Duty CycleRT_SCRIPTOUT12DUTY%0.11
Script Output 13 Duty CycleRT_SCRIPTOUT13DUTY%0.11
Script Output 14 Duty CycleRT_SCRIPTOUT14DUTY%0.11
Script Output 15 Duty CycleRT_SCRIPTOUT15DUTY%0.11
Script Output 16 Duty CycleRT_SCRIPTOUT16DUTY%0.11
Script Output 17 Duty CycleRT_SCRIPTOUT17DUTY%0.11
Script Output 18 Duty CycleRT_SCRIPTOUT18DUTY%0.11
Script Output 19 Duty CycleRT_SCRIPTOUT19DUTY%0.11
Script Output 20 Duty CycleRT_SCRIPTOUT20DUTY%0.11
Script Output 21 Duty CycleRT_SCRIPTOUT21DUTY%0.11
Script Output 22 Duty CycleRT_SCRIPTOUT22DUTY%0.11
Script Output 23 Duty CycleRT_SCRIPTOUT23DUTY%0.11
Script Output 24 Duty CycleRT_SCRIPTOUT24DUTY%0.11
Script Output 1 Current TargetRT_SCRIPTOUT1CURRTGTA0.0013
Script Output 2 Current TargetRT_SCRIPTOUT2CURRTGTA0.0013
Script Output 3 Current TargetRT_SCRIPTOUT3CURRTGTA0.0013
Script Output 4 Current TargetRT_SCRIPTOUT4CURRTGTA0.0013
Script Output 5 Current TargetRT_SCRIPTOUT5CURRTGTA0.0013
Script Output 6 Current TargetRT_SCRIPTOUT6CURRTGTA0.0013
Script Output 7 Current TargetRT_SCRIPTOUT7CURRTGTA0.0013
Script Output 8 Current TargetRT_SCRIPTOUT8CURRTGTA0.0013
Script Output 9 Current TargetRT_SCRIPTOUT9CURRTGTA0.0013
Script Output 10 Current TargetRT_SCRIPTOUT10CURRTGTA0.0013
Script Output 11 Current TargetRT_SCRIPTOUT11CURRTGTA0.0013
Script Output 12 Current TargetRT_SCRIPTOUT12CURRTGTA0.0013
Script Output 13 Current TargetRT_SCRIPTOUT13CURRTGTA0.0013
Script Output 14 Current TargetRT_SCRIPTOUT14CURRTGTA0.0013
Script Output 15 Current TargetRT_SCRIPTOUT15CURRTGTA0.0013
Script Output 16 Current TargetRT_SCRIPTOUT16CURRTGTA0.0013
Script Output 17 Current TargetRT_SCRIPTOUT17CURRTGTA0.0013
Script Output 18 Current TargetRT_SCRIPTOUT18CURRTGTA0.0013
Script Output 19 Current TargetRT_SCRIPTOUT19CURRTGTA0.0013
Script Output 20 Current TargetRT_SCRIPTOUT20CURRTGTA0.0013
Script Output 21 Current TargetRT_SCRIPTOUT21CURRTGTA0.0013
Script Output 22 Current TargetRT_SCRIPTOUT22CURRTGTA0.0013
Script Output 23 Current TargetRT_SCRIPTOUT23CURRTGTA0.0013
Script Output 24 Current TargetRT_SCRIPTOUT24CURRTGTA0.0013
Script Output 1 CurrentRT_SCRIPTOUT1CURRA0.0013
Script Output 2 CurrentRT_SCRIPTOUT2CURRA0.0013
Script Output 3 CurrentRT_SCRIPTOUT3CURRA0.0013
Script Output 4 CurrentRT_SCRIPTOUT4CURRA0.0013
Script Output 5 CurrentRT_SCRIPTOUT5CURRA0.0013
Script Output 6 CurrentRT_SCRIPTOUT6CURRA0.0013
Script Output 7 CurrentRT_SCRIPTOUT7CURRA0.0013
Script Output 8 CurrentRT_SCRIPTOUT8CURRA0.0013
Script Output 9 CurrentRT_SCRIPTOUT9CURRA0.0013
Script Output 10 CurrentRT_SCRIPTOUT10CURRA0.0013
Script Output 11 CurrentRT_SCRIPTOUT11CURRA0.0013
Script Output 12 CurrentRT_SCRIPTOUT12CURRA0.0013
Script Output 13 CurrentRT_SCRIPTOUT13CURRA0.0013
Script Output 14 CurrentRT_SCRIPTOUT14CURRA0.0013
Script Output 15 CurrentRT_SCRIPTOUT15CURRA0.0013
Script Output 16 CurrentRT_SCRIPTOUT16CURRA0.0013
Script Output 17 CurrentRT_SCRIPTOUT17CURRA0.0013
Script Output 18 CurrentRT_SCRIPTOUT18CURRA0.0013
Script Output 19 CurrentRT_SCRIPTOUT19CURRA0.0013
Script Output 20 CurrentRT_SCRIPTOUT20CURRA0.0013
Script Output 21 CurrentRT_SCRIPTOUT21CURRA0.0013
Script Output 22 CurrentRT_SCRIPTOUT22CURRA0.0013
Script Output 23 CurrentRT_SCRIPTOUT23CURRA0.0013
Script Output 24 CurrentRT_SCRIPTOUT24CURRA0.0013
DTC CountRT_DTCCOUNT10
DTC CodeRT_DTCCODE10
Malfunction Indicator LampRT_MIL10
DTC Register 0RT_DTCREG010
DTC Register 1RT_DTCREG110
DTC Register 2RT_DTCREG210
DTC Register 3RT_DTCREG310
DTC Register 4RT_DTCREG410
DTC Register 5RT_DTCREG510
DTC Register 6RT_DTCREG610
DTC Register 7RT_DTCREG710
DTC Register 8RT_DTCREG810
DTC Register 9RT_DTCREG910
DTC Register 10RT_DTCREG1010
DTC Register 11RT_DTCREG1110
DTC Register 12RT_DTCREG1210
DTC Register 13RT_DTCREG1310
DTC Register 14RT_DTCREG1410
DTC Register 15RT_DTCREG1510
Firmware Version WordRT_FWVERSIONWORD10
User Channel 1RT_USERCH11(float)✓
User Channel 2RT_USERCH21(float)✓
User Channel 3RT_USERCH31(float)✓
User Channel 4RT_USERCH41(float)✓
User Channel 5RT_USERCH51(float)✓
User Channel 6RT_USERCH61(float)✓
User Channel 7RT_USERCH71(float)✓
User Channel 8RT_USERCH81(float)✓
User Channel 9RT_USERCH91(float)✓
User Channel 10RT_USERCH101(float)✓
User Channel 11RT_USERCH111(float)✓
User Channel 12RT_USERCH121(float)✓
User Channel 13RT_USERCH131(float)✓
User Channel 14RT_USERCH141(float)✓
User Channel 15RT_USERCH151(float)✓
User Channel 16RT_USERCH161(float)✓
User Channel 17RT_USERCH171(float)✓
User Channel 18RT_USERCH181(float)✓
User Channel 19RT_USERCH191(float)✓
User Channel 20RT_USERCH201(float)✓
User Channel 21RT_USERCH211(float)✓
User Channel 22RT_USERCH221(float)✓
User Channel 23RT_USERCH231(float)✓
User Channel 24RT_USERCH241(float)✓
User Channel 25RT_USERCH251(float)✓
User Channel 26RT_USERCH261(float)✓
User Channel 27RT_USERCH271(float)✓
User Channel 28RT_USERCH281(float)✓
User Channel 29RT_USERCH291(float)✓
User Channel 30RT_USERCH301(float)✓
User Channel 31RT_USERCH311(float)✓
User Channel 32RT_USERCH321(float)✓
User Channel 33RT_USERCH331(float)✓
User Channel 34RT_USERCH341(float)✓
User Channel 35RT_USERCH351(float)✓
User Channel 36RT_USERCH361(float)✓
User Channel 37RT_USERCH371(float)✓
User Channel 38RT_USERCH381(float)✓
User Channel 39RT_USERCH391(float)✓
User Channel 40RT_USERCH401(float)✓
User Channel 41RT_USERCH411(float)✓
User Channel 42RT_USERCH421(float)✓
User Channel 43RT_USERCH431(float)✓
User Channel 44RT_USERCH441(float)✓
User Channel 45RT_USERCH451(float)✓
User Channel 46RT_USERCH461(float)✓
User Channel 47RT_USERCH471(float)✓
User Channel 48RT_USERCH481(float)✓
User Channel 49RT_USERCH491(float)✓
User Channel 50RT_USERCH501(float)✓
User Channel 51RT_USERCH511(float)✓
User Channel 52RT_USERCH521(float)✓
User Channel 53RT_USERCH531(float)✓
User Channel 54RT_USERCH541(float)✓
User Channel 55RT_USERCH551(float)✓
User Channel 56RT_USERCH561(float)✓
User Channel 57RT_USERCH571(float)✓
User Channel 58RT_USERCH581(float)✓
User Channel 59RT_USERCH591(float)✓
User Channel 60RT_USERCH601(float)✓
User Channel 61RT_USERCH611(float)✓
User Channel 62RT_USERCH621(float)✓
User Channel 63RT_USERCH631(float)✓
User Channel 64RT_USERCH641(float)✓

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Scripting

EmC Language

EmC Icon EmC Icon

EmC is a statically-typed, heap-less, C-style scripting language for memory-constrained 32-bit embedded systems. Source files (.emc) compile to a compact bytecode binary (.emcbin) that runs on a stack-based virtual machine with no external dependencies and no runtime heap allocation.

The syntax is close to C. Most C code that avoids pointers, the heap, and the standard library will look familiar.


1. Program Structure

There is no main function. Top-level statements execute in source order when the script runs.

int x = 40;
int y = 2;
System::PrintInt(x + y);   // 42

System:: is the namespace for functions provided by the host application, called native functions. A host can also group natives under namespaces of its own. See Native functions.

Functions and classes may be declared at the top level. They can be referenced before their declaration appears in the file (see Forward references).


2. Comments

EmC supports C-style single line and block comments.

// Line comment.

/* Block
   comment. */

3. Types

EmC is a statically typed language. All data types are known at compile time, making execution faster and safer.

KeywordAliasMeaningWidth
voidno value (return type)-
booltrue / false1 byte
chars8signed 8-bit integer1 byte
byteu8unsigned 8-bit integer1 byte
shorts16signed 16-bit integer2 byte
ushortu16unsigned 16-bit integer2 byte
ints32signed 32-bit integer4 byte
uintu32unsigned 32-bit integer4 byte
floatf3232-bit IEEE-7544 byte
stringimmutable text constantref

The alias column is just another way to declare the same keyword: s8 and char compile to exactly the same type, so they mix freely and error messages always report the char/byte/… name.
Aliases are provided for convenience as they are a little more descriptive than the classical type names.

// These two data types are the same and both compile as "short"
short var1 = 0; // 16 bit signed integer
s16 var2 = 0;   // 16 bit signed integer

char and byte are numeric types, not a distinct character type. Individual character literals are not supported, so an integer must be used.

char c = 'a';  // Compile error
char c = 0x61; // OK

string is a reference to a compile-time constant. String variables and string native parameters can only ever hold a literal or another string constant. For mutable text, use a byte array (see Strings).


4. Literals

int   a = 42;          // decimal
int   b = 0xFF;        // hex
int   c = 0b1010;      // binary
int   d = 0o377;       // octal
uint  e = 42U;         // unsigned (a U or u suffix, any base)
uint  f = 0xFFFFFFFFu; // unsigned literals can use the full 32-bit range
float g = 3.14;        // float (a decimal point makes it a float)
bool  h = true;
bool  i = false;

null, NULL, and nil are all accepted and evaluate to integer 0.

An integer literal without a suffix is an int. Add U to make it a uint, as in C. This matters in two places: a plain literal assigned to a uint variable warns about an implicit cast, and an expression is only compiled with unsigned arithmetic and comparisons when one of its operands is unsigned, so x > 0U and x / 2U behave correctly for a uint x above 2147483647. A literal larger than 4294967295 is a compile error. An unsuffixed literal above 2147483647 keeps its bit pattern and wraps negative as an int, with a warning unless it is being assigned to a uint (so uint mask = 0xFFFFFFFF; is fine) or negated.

String literals use double quotes. There are no escape sequences: "\n" is a backslash followed by n, not a newline.

System::PrintLine("Hello, world");

5. Variables

int count = 0;       // explicit initializer
int total;           // zero-initialized

All variables are zero-initialized if no initializer is given.

Scope

  • Variables declared at the top level are globals.
  • Variables declared inside a function or block are locals.
  • Blocks ({ ... }) introduce a new scope. A local is visible from its declaration to the end of its enclosing block.
int g = 1;           // global

void f() {
    int local = 2;   // local to f
    {
        int inner = 3;   // local to this block only
    }
    // inner is not visible here
}

const

const marks a variable read-only after its initializer runs. Writing to it later is a compile error.

const int LIMIT = 100;
LIMIT = 200;         // compile error: Cannot write to const variable after initialisation.

A const array must be initialized where it is declared, and its elements can’t be written after that. Assignment, compound assignment and ++/-- on an element are all compile errors. This works well for lookup tables:

const byte GEAR_RATIOS[4] = {35, 21, 14, 10};
byte r = GEAR_RATIOS[gear];   // reading is fine
GEAR_RATIOS[0] = 40;          // compile error: Cannot write to an element of const array 'GEAR_RATIOS'.
const byte EMPTY[4];          // compile error: a const array must be initialized

A const array can only be passed to a const array parameter (see “Array Parameters”).

Naming Style

EmC enforces no naming convention. One common pattern is UpperCamelCase for functions and global variables and lowerCamelCase for locals and parameters, which makes a name’s scope visible at a glance and matches how the native functions are named. The compiler accepts any style, and the choice is entirely yours.


6. Operators

All basic mathematical and bitwise operations are supported.

Arithmetic

a + b       // add
a - b       // subtract
a * b       // multiply
a / b       // divide
a % b       // modulus (remainder)
Important

Integer division and modulus by zero halt the VM with a “Division By Zero” error. Float division by zero also halts.

Bitwise

a & b       // bitwise AND
a | b       // bitwise OR
a ^ b       // bitwise XOR
~a          // bitwise NOT (ones complement)
a << b      // shift left
a >> b      // shift right

Comparison

a == b      // equal
a != b      // not equal
a < b       // less than
a > b       // greater than
a <= b      // less than or equal
a >= b      // greater than or equal

A comparison always produces a bool.

Logical

a && b      // logical AND
a || b      // logical OR
!a          // logical NOT

Assignment

a = b       // assign
a += b      // add and assign
a -= b      // subtract and assign
a *= b      // multiply and assign
a /= b      // divide and assign
a &= b      // bitwise AND and assign
a |= b      // bitwise OR and assign
a ^= b      // bitwise XOR and assign

There is no %=, <<=, or >>=.

Increment / Decrement

Both prefix and postfix forms work on a variable, a class field or an array element:

i++;        // postfix increment
++i;        // prefix increment
i--;        // postfix decrement
--i;        // prefix decrement
car.speed++;
--this.count;
counts[b]++;
++buf[n];

A postfix ++ or -- has to be the whole expression, as in i++; or int old = counts[b]++;. Using it inside a larger expression, such as a + i++, is a compile error. The index is evaluated once, so counts[Next()]++; calls Next() once.

Narrow types wrap at their own width:

byte b = 255;
b++;                 // b is now 0
short s = 32767;
s++;                 // s is now -32768

Ternary

Behaves like a single line if/else statement.

int max = (a > b) ? a : b;

// Is equivalent to:
int max;
if (a > b)
    max = a;
else
    max = b;

Precedence

From tightest to loosest binding:

  1. . [] () (member, index, call)
  2. ! ~ ++ -- (unary)
  3. * / %
  4. + - & | ^ << >>
  5. < > <= >=
  6. == !=
  7. &&
  8. ||
  9. ?: (ternary)
  10. = += -= *= /= &= |= ^= (assignment)

Note that the bitwise and shift operators sit at the same level as + and -. Parenthesize when mixing them with arithmetic.


7. Type Conversions

Numeric types convert implicitly across signed, unsigned, and float categories as needed by an assignment, argument, or operator. There is no explicit cast syntax.

int   i = 10;
float f = i;         // int -> float
int   j = f / 4.0;   // float -> int on assignment

A function call’s return value converts the same way as any other value, so float f = count(); converts an int result to float and int n = 2 * ratio(); converts a float result to int.

The compiler warns when a float is converted to an integer type, because the fractional part is lost. This covers declarations, assignments, arguments, return values and array indexes. Other conversions, such as signed to unsigned, don’t warn by default.

Mixing int and float in arithmetic gives a float, as in C. The value keeps its fraction until it is stored, passed or returned, so int n = i * f * 4; only converts to int once, at the end. When the target is a float, the whole expression is worked out in float, including integer division. So float h = i / 2; with i = 1 gives 0.5, not 0.

Bitwise operators and switch need integer values, so a mixed expression like (i + f) & 3 is a compile error.

Storing a value in a char, byte, short or ushort wraps it to that type’s range, as in C. That happens at every store: a declaration, an assignment, a compound assignment, ++/--, an argument, and a return value. Arithmetic in between is done in int, so a result is only cut down when it’s stored. This makes decoding a signed 16-bit value from two bytes work as expected:

// data holds 9C FF, little-endian
short raw = (data[1] << 8) | data[0];   // -100
short big = 40000;                      // -25536
byte  low = 300;                        // 44

There is no integer overflow or wraparound detection. Arithmetic that exceeds a type’s range wraps silently.


8. Control Flow

if / else if / else

if (x > 0) {
    System::PrintInt(1);
} else if (x < 0) {
    System::PrintInt(-1);
} else {
    System::PrintInt(0);
}

while

A while loop will continue as long as the condition is true. There is no do/while.

int i = 0;
while (i < 5) {
    System::PrintInt(i);
    i++;
}

for

A for loop has an initializer, condition, and update expression. The loop will continue as long as the condition is true.

for (initializer, condition, update) { ... }
for (int i = 0; i < 10; i++) {
    System::PrintInt(i);
}

All three clauses are optional. Any of them may be left empty, and for (;;) is an infinite loop.

int i = 0;
for (; i < 10;) {        // no initializer, no post-expression
    System::PrintInt(i);
    i++;
}

for (;;) {               // infinite loop; exit with break
    if (done()) {
        break;
    }
}

break & continue

  • continue will skip the rest of the loop body and continue to the next loop iteration.
  • break exits the loop immediately.

break and continue work in while and for loops.

for(int i = 0; i < 10; i++) {
    if (i == 5) {
        break;
    }
    if (i % 2 == 0) {
        continue;
    }
    // do work...
}

switch

The controlling expression is an integer (float is rejected). case labels are integer literals and must be unique. default is optional. A case without a break falls through to the next case, as in C.

switch (code) {
    case 1:
        System::PrintLine("one");
        break;
    case 2:
        System::PrintLine("two");
        break;
    default:
        System::PrintLine("other");
        break;
}

A case with no body falls straight into the next one, which is how several values share a single handler:

switch (key) {
    case 1:
    case 2:
    case 3:
        System::PrintLine("low");      // runs for key 1, 2, or 3
        break;
    case 4:
        System::PrintLine("four");
        break;
}

A case that has a body but no break runs its own body and then continues into the next case:

switch (n) {
    case 1:
        System::PrintInt(1);           // no break: falls through
    case 2:
        System::PrintInt(2);
        break;
    case 3:
        System::PrintInt(3);
        break;
}
// n == 1 prints 1 then 2
// n == 2 prints 2
// n == 3 prints 3
Info

switch statements are much more efficient than long if/else chains. They use a jump table to very quickly jump to the correct case label, rather than checking every entry for a match. The tradeoff is they produce more compiled binary size for large ranges.

A switch statement has to produce a jump table entry for every value between its lowest and highest case label value. This means that for large value ranges with a low number of case labels, the compiled output will be huge compared to if/else. The number of case labels has no effect on performance. The compiler will output a warning if the number of case labels is less than half the value range.

// Very fast, small/tight binary.
// Generates ~4 jump table entries
switch(input) {
    case 1: //...
    case 2: //...
    case 3: //...
    case 4: //...
}

// Very fast, very bloated binary.
// Generates ~300 jump table entries. Compiler warning.
switch(input) {
    case 100: //...
    case 200: //...
    case 300: //...
    case 400: //...
}

// Slower (must evaluate every condition until a match is found), minimal binary size.
if (input == 100) {
    //...
} else if (input == 200) {
    //...
} else if (input == 300) {
    //...
} else if (input == 400) {
    //...
}

9. Functions

int add(int a, int b) {
    return a + b;
}

void greet() {
    System::PrintLine("hi");
}

System::PrintInt(add(3, 4));   // 7
greet();
  • Scalar parameters are passed by value.
  • A non-void function must return a value.
  • Calling with the wrong number of arguments is a compile error.
  • Recursion is supported.
  • A bare return; in top-level code ends the script early. Destructors still run for every class instance declared before it. Returning a value from top-level code is a compile error.

Forward References

A top-level function or class may be used before it is declared in the file. This allows mutual recursion:

bool isEven(int n) {
    if (n == 0) { return true; }
    return isOdd(n - 1);
}

bool isOdd(int n) {
    if (n == 0) { return false; }
    return isEven(n - 1);
}

System::PrintInt(isEven(10));  // 1

Array Parameters

An array parameter is written T name[] or T *name (equivalent). The array’s size is not part of the parameter type, so pass the length as a separate argument. A variable index used inside the function is still checked at runtime against the caller’s actual array, the same as any other array (see “Bounds checking” in the Arrays section).

int sum(int values[], int count) {
    int total = 0;
    for (int i = 0; i < count; i++) {
        total += values[i];
    }
    return total;
}

int data[4] = {1, 2, 3, 4};
System::PrintInt(sum(data, 4));    // 10

Passing a non-array where an array parameter is expected, or an array of the wrong element type, is a compile error. So is giving the parameter a size (int values[4]).

Inside the function the parameter is used exactly like an array: index it, or pass it on by name to another array parameter, script or native. It cannot be used as a value on its own.

void send(byte data[], int length) {
    System::SendCanMessage(0, 0x100, data, length);
}

Declare an array parameter const when the function only reads it. A const parameter can’t be written inside the function, and it accepts both const and ordinary arrays. A const array can only be passed to a const parameter, since an ordinary parameter could write to it. The same applies when a function passes its own const parameter on.

int total(const byte values[], int count) {
    int sum = 0;
    for (int i = 0; i < count; i++) {
        sum += values[i];
    }
    return sum;
}

const byte TABLE[3] = {1, 2, 3};
byte buffer[3] = {4, 5, 6};
total(TABLE, 3);    // fine
total(buffer, 3);   // fine

Class parameters

See Classes.


10. Arrays

int arr[5] = {10, 20, 30, 40, 50};
int zero[8];                 // all elements 0
  • Array size is fixed at compile time.
  • If an initializer list is present, its length must match the declared size exactly. int a[3] = {1, 2}; is a compile error.
  • Without an initializer, every element is zero.

Indexing and assignment

System::PrintInt(arr[0]);      // 10
arr[2] = 99;
arr[2] += 1;         // 100

Packed storage

char/byte arrays pack 4 elements per 4-byte slot; short/ushort arrays pack 2 per slot. This is transparent to the script; index them normally.

byte buf[16];        // 4 slots
buf[0] = 1;
buf[15] = 200;

Bounds checking

A literal out-of-range index is a compile error, including a negative one:

byte b[8];
b[8] = 1;             // compile error: index 8 is out of bounds for 'b' (size 8)
b[-1] = 1;            // compile error

A variable or computed index is checked at runtime instead. An out-of-range access halts the VM with an “Array Index Out Of Bounds” error rather than reading or writing whatever happens to sit next to the array:

byte b[8];
int i = 8;
b[i] = 1;             // halts: Array Index Out Of Bounds

This covers array parameters too: a function indexing a T name[] parameter with a variable index is checked against the size of whatever array the caller actually passed in, even through several levels of forwarding. It also covers an array field declared inside a class, however it’s reached: directly, through a class-typed parameter, or through a composed/embedded instance. It does not cover what a native function does with an array you pass it. See Native functions.

Bare array references

An array name used without an index has no value. It cannot be assigned to a scalar, returned as a scalar, or passed as a scalar argument. Pass it only to an array parameter (with a length) or index it.

int arr[3] = {10, 20, 30};
int x = arr;         // compile error

11. Strings

String literals are immutable compile-time constants. Use them directly with the print natives:

System::Print("no newline");
System::PrintLine("with newline");

For text you need to build or modify at runtime, use a byte buffer and the string natives. Every string native takes an explicit capacity, C snprintf-style. Nothing grows a buffer for you.

byte msg[32];
System::StrCopy(msg, 32, "Value: ");
byte num[16];
System::IntToStr(num, 16, 42);
// (append num's characters via StrAppend from a string constant only;
//  buffer-to-buffer append is not supported)
System::StrAppend(msg, 32, "42");
System::PrintBuffer(msg, 32);        // Value: 42
System::PrintInt(System::StrLength(msg, 32));  // 8

Notes and limits:

  • StrCopy / StrAppend take a string constant as the source, not another byte[] buffer.
  • A freshly declared buffer is zero-filled, so StrLength on an untouched buffer is 0.
  • Content that does not fit the capacity is truncated and null-terminated.

12. Classes

Classes are supported for advanced data structures.

class Point {
    int x;
    int y;

    Point(int px, int py) {
        this.x = px;
        this.y = py;
    }

    int sum() {
        return this.x + this.y;
    }

    void shift(int dx, int dy) {
        x += dx;         // 'this.' is optional inside a method
        y += dy;
    }
}

Point p(1, 2);
System::PrintInt(p.sum());         // 3
p.shift(10, 10);
System::PrintInt(p.sum());         // 23

Fields

Declared in the class body. Each instance gets its own copy.

Methods

  • Inside a method, this.field and a bare field name both refer to the current instance’s field.
  • A method can call a sibling method on the same instance with this.method().
class Calculator {
    int total;

    Calculator(int start) { this.total = start; }

    void addFive() { this.total += 5; }

    void addTen() {
        this.addFive();
        this.addFive();
    }

    int get() { return this.total; }
}

Constructors

ClassName(params) { ... }. A class has at most one constructor. It runs when an instance is declared with an argument list:

Counter c(10);       // runs Counter(int)

Fields are always zero-initialized first, before the constructor body runs. A class with no constructor is declared without parentheses:

Counter d;           // no constructor; fields are 0

Declaring an instance of a class that has a constructor without an argument list compiles, but produces a warning.

Destructors

~ClassName() { ... }. Runs automatically when the instance goes out of scope:

  • A local instance is destroyed at the end of its enclosing block.
  • Multiple instances in the same scope are destroyed in reverse declaration order (LIFO).
  • Global instances are destroyed once, at script end, in reverse declaration order.
class Noisy {
    int id;
    Noisy(int i) { this.id = i; }
    ~Noisy() { System::PrintInt(this.id); }
}

void test() {
    Noisy n(42);
    System::PrintInt(1);
}

test();              // prints 1 then 42
System::PrintInt(2);

Passing instances

Pass an instance to a function or method by reference with ClassName *param. The callee can call methods on it and read or write its fields, including compound assignment.

void bump(Counter *c) {
    c.increment();
}

Counter a(5);
bump(a);             // a.value is now 6

Passing an instance of the wrong class, or a non-instance, is a compile error. A bare instance name (no ., no method call, not passed to a class parameter) has no value and cannot be used as one.

Class-typed fields (composition)

A field may itself be a class instance. The embedded instance is laid out inline in its owner and reached with a chain of .:

class Inner {
    int value;
    void bump() { value += 100; }
}

class Outer {
    Inner inner;
    int count;

    void run() {
        this.inner.bump();      // method call on an embedded instance
        inner.bump();           // 'this.' is optional, same as any field
    }
}

Outer o;
o.inner.value = 900;           // read / write an embedded field
o.count = 4;
o.run();
System::PrintInt(o.inner.value);         // 1100
  • Nesting is unlimited: a.b.c.x resolves as long as each step names a class-typed field.
  • Compound assignment works through the chain: o.inner.value += 50;.
  • An embedded instance can be passed by reference like any other instance: take(o.inner); where take takes Inner *i.
  • When an instance is created, each embedded field is zero-initialized and its field-default initializers run, outermost first.
  • Destructors run automatically and in order: the owner’s destructor body first, then each embedded field’s destructor in reverse declaration order.

Limits:

  • No member-initializer syntax. You cannot pass constructor arguments to an embedded field. Embedding a class whose constructor takes arguments is a compile error. A class with no constructor (or a parameterless one) is fine.
  • No cycles. A class cannot contain itself, directly or indirectly (class A { A a; }, or A holding a B that holds an A). This is a compile error.

Not supported

  • Inheritance. Every class is standalone. There is no subclassing.
  • Class-typed return values. A function cannot return a class instance.

13. Namespaces

Namespaces are optional. They group top-level declarations under a name so they can be kept tidy and referred to explicitly. They have no runtime cost or effect: a namespaced global is still a plain global, and a namespaced function is still an ordinary function.

namespace Geometry {
    int gridSize = 16;

    int area(int w, int h) {
        return w * h;
    }

    class Point {
        int x;
        int y;
        int sum() { return x + y; }
    }
}

Refer to a member from outside with the :: scope operator:

Geometry::gridSize = 32;
System::PrintInt(Geometry::area(3, 4));   // 12

Geometry::Point p;
p.x = 1;
p.y = 2;
System::PrintInt(p.sum());                 // 3
  • Unqualified access inside the block. Within namespace Geometry { }, other members are visible without the prefix (area() can call gridSize and Point directly). Names that don’t resolve inside the namespace fall back to the global scope.
  • Reopening. The same namespace name may be opened more than once, and the contents are merged.
  • Forward references work across the whole file, exactly as they do at the top level.
  • No nesting. A namespace cannot be declared inside another namespace.
  • Native namespaces are reserved. A script cannot declare a namespace that the host’s natives use, and System is always off limits. See Native functions.
  • Math is reserved for the built-in math functions. See Math functions.

14. Preprocessor

Runs on the token stream before parsing. Two directives are supported.

#include

#include "utils.emc"
  • Path is resolved relative to the including file first. If it is not found there, any include directories set up by the host are searched in order. Absolute paths are used as is.
  • Each file is included at most once, so diamond includes are safe.
  • A circular include is a compile error, not a hang.
  • A missing file is a compile error.
  • Errors inside an included file are reported against that file’s own line numbers.

#define

Object-like macros only.

#define WIDTH  10
#define HEIGHT 5
#define AREA   (WIDTH * HEIGHT)

System::PrintInt(AREA);        // 50
  • A name is a macro only from its #define onward.
  • A macro body may reference an earlier macro, which is re-scanned and expanded.
  • Self-referential and mutually-referential macros expand once and stop.
  • An empty replacement is allowed and vanishes at the use site.
  • Function-like macros (#define SQ(x) ((x)*(x))) are a compile error.
  • There are no conditional directives (#ifdef, #if, #endif, #undef).
  • A macro defined in an including file is visible inside included files.

15. Native functions

Native functions are provided by the host application. They give a script access to the device it runs on, for example printing, timing and communications. Which natives are available depends on the host. The reference set below is a common starting point.

Calling natives

Every native must be called through its namespace:

System::Yield(10);
System::PrintInt(count);
CAN::Send(0x100, frame, 8);

A bare Yield(10) is a compile error.

Most natives are in System. A host can group others under namespaces of its own, such as CAN above.

  • A namespace used by any native is reserved, so a script cannot declare one with the same name. System is always reserved.
  • Only the namespace is reserved, not the names inside it. With CAN::Read available, a script is still free to declare its own Read variable or function, or a Data::Read of its own.

If the script calls a native the host doesn’t provide, it still compiles, but halts with a “Native Function Not Resolved” error when the call runs.

Array arguments

Pass an array to a native by bare name, followed by its length:

byte msg[32];
System::StrCopy(msg, 32, "hello");

The native trusts the length you give it. Its access to the array is not bounds checked, so never pass a length larger than the array.

A native that only reads an array takes it as a const parameter, and accepts both const and ordinary arrays. Passing a const array to a native that isn’t marked const is a compile error.

Callback parameters

Some natives take a script function as an argument, so the host can call back into the script later, for example when a CAN frame arrives. Pass the function’s bare name, with no parentheses:

void onFrame(uint id, byte data[], int length) {
    // data[0] .. data[length - 1] is the frame payload
}

CAN::Subscribe(0, 0x100, 0x7FF, onFrame);

A callback always returns void, and its parameters must match what the native expects. The compiler checks the parameter count, each parameter’s type, and whether it is an array, and reports a mismatch at the call site. Some natives accept any void function. A wrong parameter count is then only caught when the host calls it, which halts the script with a “Call Arg Count Error”.

An array parameter in a callback is only valid for the duration of the call. Index it or pass it on to another array parameter as usual, and copy anything you want to keep into a script array before returning.

Reference set

These natives are all in the System namespace, so Print is called as System::Print("hi").

SignaturePurpose
void SetError(int code)Signal a recoverable error code to the host.
void Print(string str)Write a string, no newline.
void PrintLine(string str)Write a string and a newline.
void PrintInt(int i)Write an integer and a newline.
void PrintFloat(float f)Write a float and a newline.
void PrintFormat(string str, float f)Write a format string with one float (PrintFormat("v: %f", 3.14)).
int StrLength(const byte buf[], int capacity)Length up to the null terminator or capacity.
void StrCopy(byte dest[], int destCapacity, string src)Copy a string constant into a buffer, truncating to fit.
void StrAppend(byte dest[], int destCapacity, string src)Append a string constant onto a buffer’s content.
void IntToStr(byte dest[], int destCapacity, int value)Format an integer as decimal text into a buffer.
bool StrEquals(const byte a[], int capA, const byte b[], int capB)Compare two buffers’ null-terminated contents.
void PrintBuffer(const byte buf[], int capacity)Write a buffer’s null-terminated content.
uint NowMs()Host uptime in milliseconds. Wraps on overflow - compare with unsigned subtraction.
uint NowUs()Host uptime in microseconds. Wraps on overflow, typically much sooner than NowMs.
void Yield(uint t)Pause for t milliseconds.
uint YieldUntil(uint lastTime, uint delay)Fixed-period pause: sleeps until lastTime + delay, returns the new lastTime to pass back in next iteration.

SetError

SetError(int) records an error code without halting the VM. The host application can read it after the script finishes. The last call wins. The default is 0.

if (sensorReading < 0) {
    System::SetError(42);
}

16. Math functions

A set of math functions is built into the language under the Math namespace. They are part of the VM itself, so they are always available, whatever natives the host provides.

float hypot(float a, float b) {
    return Math::Sqrt(a * a + b * b);
}

int clamp(int v, int lo, int hi) {
    return Math::Min(Math::Max(v, lo), hi);
}
FunctionResult
Math::Sqrt(x)Square root.
Math::Pow(base, exp)base raised to exp.
Math::Sin(x), Math::Cos(x), Math::Tan(x)Trigonometric functions. x is in radians.
Math::Asin(x), Math::Acos(x), Math::Atan(x)Inverse trigonometric functions, in radians.
Math::Atan2(y, x)Angle of the point (x, y) in radians, in the range -pi to pi.
Math::Exp(x)e raised to x.
Math::Log(x)Natural logarithm.
Math::Log2(x), Math::Log10(x)Base 2 and base 10 logarithms.
Math::Floor(x), Math::Ceil(x)Round down / up to a whole number.
Math::Round(x)Round to the nearest whole number, halves away from zero.
Math::Fmod(x, y)Floating point remainder of x / y.
Math::Abs(x)Absolute value.
Math::Min(a, b), Math::Max(a, b)Smaller / larger of the two.

All functions take and return float. An int argument is converted to float first, the same as passing it to a float parameter.

Abs, Min and Max are the exception: when every argument is an integer type they work in integers and return int, so int m = Math::Max(3, 7); is exact with no float round trip. If any argument is a float, including a mixed expression like i + 0.5, the whole call is done in float.

A domain error such as Math::Sqrt(-1.0) or Math::Log(0.0) produces NaN or infinity, as in C. It does not halt the VM.


17. Runtime Model and Limits

  • No heap. Globals, locals, and call frames all live in one buffer supplied by the host. The VM never allocates at runtime.
  • No whole-script size ceiling. Function entry points are 32-bit offsets, so a compiled binary can be as large as the host is willing to load. Two 16-bit limits do apply: a single if, else, loop body, or switch cannot span more than 64 KB of bytecode (the compiler reports “Too much code to jump over”), and the VM’s data area (globals plus stack) is capped at 65,535 slots, which is 256 KB.
  • Fixed stack. The host sets the stack size. Deep recursion or large local arrays can exhaust it (“Stack Overflow”).
  • Bounds checking. Stack overflow/underflow and out-of-range pointer dereferences are caught and halt the VM rather than corrupting memory. The host can disable this for targets that cannot afford the checks. A local, global, or array-parameter index that runs off the end of its array is also caught (“Array Index Out Of Bounds”). See “Bounds checking” under Arrays.
  • Division by zero halts the VM (“Division By Zero”) for integer and float operands.
  • No overflow detection. Arithmetic wraps silently.
  • No exceptions. There is no try/catch/throw. A genuine runtime error halts the VM. Use SetError for recoverable conditions.
  • No string escape sequences.
  • Language version. A compiled binary records the language version it was built for. A VM won’t load a binary from a newer version, for example a 0.3 script on a 0.2 VM, since it may use instructions that VM doesn’t have. Binaries from older versions still load. Recompile a script with the matching compiler, or update the VM.

Runtime errors

Every run ends with a status. “End” means the script finished normally. Anything else is an error that stopped it. The common ones are:

ErrorCause
Division By ZeroAn integer or float division, or a modulus, by zero.
Array Index Out Of BoundsA variable array index was outside the array.
Stack OverflowThe script ran out of stack, usually from deep recursion or large local arrays.
Native Function Not ResolvedThe script called a native the host doesn’t provide.
Call Arg Count ErrorThe host called a callback with the wrong number of arguments.
Stack Underflow, Pointer Out Of Bounds, Unknown InstructionA damaged binary, or a problem in the VM or host rather than in the script.

A binary can also be refused when it’s loaded, before any of it runs: “Unsupported Version” for a binary compiled for a newer language version, and “Invalid Script” for one that is malformed or fails its checksum.


18. Complete Example

#define TABLE_SIZE 8

int primes[TABLE_SIZE];
int primeCount = 0;

bool isPrime(int n) {
    if (n < 2) {
        return false;
    }
    for (int d = 2; d * d <= n; d++) {
        if (n % d == 0) {
            return false;
        }
    }
    return true;
}

void collectPrimes() {
    int candidate = 2;
    while (primeCount < TABLE_SIZE) {
        if (isPrime(candidate)) {
            primes[primeCount] = candidate;
            primeCount++;
        }
        candidate++;
    }
}

class Accumulator {
    int total;

    void add(int v) {
        this.total += v;
    }

    int get() {
        return this.total;
    }
}

collectPrimes();

Accumulator acc;
for (int i = 0; i < primeCount; i++) {
    System::PrintInt(primes[i]);
    acc.add(primes[i]);
}

System::PrintLine("sum:");
System::PrintInt(acc.get());

Output:

2
3
5
7
11
13
17
19
sum:
77

Copyright © 2026 Emtron Australia Pty Ltd

Script Management

The TCM hosts a powerful in-house developed scripting language called EmC. This allows users to write their own functionality to do almost anything from advanced CAN integrations to special control functions for transmission or vehicle systems.

EmC IDE EmC IDE

Info

EmC requires a Developer License and must be activated using the Build Manager on each device.


EmC

EmC is a statically-typed, heap-less, C-style scripting language for 32-bit embedded systems. Source files (.emc) compile to a compact bytecode binary (.emcbin) that runs on a stack-based virtual machine inside the host device.

Intellectual Property

EmC is compiled before it reaches the hardware, so developers can distribute their own proprietary compiled code without the user having or requiring access to the source code.
Once an EmC binary is uploaded to the device, it cannot read back and exported for redistribution without the original file.

Because EmC is statically typed, a lot of error checking is done at compile time, reducing the chance of runtime errors or undefined behavior.

See EmC language documentation for more detail.

  • Up to 8 compiled scripts can live in the TCM at once.
  • All scripts total 1MB of compiled binary size.
  • Scripts can be assigned up to 32KB of stack memory each.
  • Each script runs on it’s own thread.
  • Scripts can interact with each other by reading and writing Runtime channels.

Activation

Dealers with a current EmC Developer License can purchase and activate the EmC Application Build on a device.

Once EmC has been enabled for your device’s serial number, use the Build Manager to activate it. Build Manager - EmC Build Manager - EmC


EmC IDE

The EmC development environment is accessed via the “EmC” tab when a cal file is open or a TCM is online. The environment can be opened without a device or cal file from the EmC menu.

EmC Toolbar EmC Toolbar

Compiling

Press Compile on the toolbar to compile the script (along with any emc files it includes). The compiler result is shown on the RHS.

On a successful compilation, the script to be added to the device script management list by clicking Add to Device.

Errors shown in the compiler output will also he highlighted in red in the editor panel. Warnings shown in the compiler output will also he highlighted in yellow in the editor panel.


Device Script Management

Device Script Manager Device Script Manager

The Script Management view shows the scripts either in the device or staged for upload.

Info

In order to upload changes to the script memory, the script system must be stopped.

  • Stop halts the script system, ready to upload changes.
  • Start starts a halted system and starts all scripts running.
  • Read Reads the script memory from the device.
  • Write sends the current script memory and configuration to the device and starts the system.
  • Import imports a compiled EmC binary file (.emcbin). This can be used to import compiled 3rd party scripts without the source files.
  • Delete removes the selected script file from the list.

Each Script has it’s own status runtime. A successfully running script’s status will show “OK”.

alt text alt text

Copyright © 2026 Emtron Australia Pty Ltd

System Functions

This is a reference for every native function callable from a EmC script running on the TCM including:

  • General-purpose functions under System:: for debugging and time management.
  • TCM-specific functions under Runtime::, Torque::, Device::, CAN:: and Output:: for reading live device state, supplying engine torque, talking to the CAN bus and driving script-controlled outputs.

Quick Reference

Strings & Debugging (System::)

FunctionSignaturePurpose
System::Printvoid Print(string str)Debug-print a string, no newline
System::PrintLinevoid PrintLine(string str)Debug-print a string plus newline
System::PrintIntvoid PrintInt(int i)Debug-print an integer
System::PrintFloatvoid PrintFloat(float f)Debug-print a float
System::PrintFormatvoid PrintFormat(string str, float f)Debug-print a format string with one float
System::PrintBuffervoid PrintBuffer(byte buf[], int capacity)Debug-print a byte buffer’s null-terminated content
System::StrLengthint StrLength(byte buf[], int capacity)Length of a buffer’s content up to its null terminator
System::StrCopyvoid StrCopy(byte dest[], int destCapacity, string src)Copy a string constant into a buffer, truncating to fit
System::StrAppendvoid StrAppend(byte dest[], int destCapacity, string src)Append a string constant onto a buffer’s content, truncating to fit
System::IntToStrvoid IntToStr(byte dest[], int destCapacity, int value)Format an integer as decimal text into a buffer
System::StrEqualsbool StrEquals(byte a[], int capacityA, byte b[], int capacityB)Compare two buffers’ null-terminated contents

Time

FunctionSignaturePurpose
System::NowMsuint NowMs()Device uptime in milliseconds (wraps every ~49.7 days)
System::NowUsuint NowUs()Device uptime in microseconds (wraps every ~71.58 min)

Script Yielding

FunctionSignaturePurpose
System::Yieldvoid Yield(uint t)Pause the script for t milliseconds
System::YieldUntiluint YieldUntil(uint lastTime, uint delay)Fixed-period pause that returns the updated lastTime for the next call

Runtime Channels (Runtime::)

FunctionSignaturePurpose
Runtime::Readint Read(uint id)Read a live channel value as an integer with the decimal point removed (123.4 reads as 1234)
Runtime::ReadRealfloat ReadReal(uint id)Read a live channel value as a float in real units
Runtime::Writebool Write(uint id, int value)Write a writeable channel value as an integer with the decimal point removed
Runtime::WriteRealbool WriteReal(uint id, float value)Write a writeable channel value as a float in real units

Torque Model (Torque::)

FunctionSignaturePurpose
Torque::GetSuppliedfloat GetSupplied()Read Engine Torque (Supplied) in Nm
Torque::SetSuppliedvoid SetSupplied(float tqSupplied)Supply Engine Torque (Supplied) when Torque Model Source is Script
Torque::GetAvailablefloat GetAvailable()Read Engine Torque (Available) in Nm
Torque::SetAvailablevoid SetAvailable(float tqAvailable)Supply Engine Torque (Available) when Torque Model Source is Script
Torque::GetDriverDemandfloat GetDriverDemand()Read Driver Demand Torque in Nm
Torque::SetDriverDemandvoid SetDriverDemand(float tqDriver)Supply Driver Demand Torque when Driver Demand Source is Script

CAN Bus (CAN::)

FunctionSignaturePurpose
CAN::SetupNodebool SetupNode(uint node, bool enable, uint bitrateSelect, bool termination, bool listenOnly)Enable/disable a CAN node and set its bitrate, termination and listen-only mode
CAN::Sendvoid Send(uint node, uint id, byte buffer[], int length)Send a raw frame on CAN 1 or CAN 2
CAN::Readint Read(uint node, uint id, byte buffer[], int length)Poll the latest received frame for a node/id pair
CAN::Subscribevoid Subscribe(uint node, uint idMatch, uint idMask, func(uint id, byte data[], int length) handler)Register a callback for received frames matching an id/mask
CAN::Unsubscribevoid Unsubscribe(uint node, uint idMatch, uint idMask)Cancel a subscription registered with the same node/match/mask
CAN::Pollint Poll()Fire the handlers for any frames received since the last call

Output Control (Output::)

FunctionSignaturePurpose
Output::SetActiveLevelvoid SetActiveLevel(byte outputId, int level)Set a script output’s active polarity (0 = active-low, 1 = active-high)
Output::SetEffectiveResistancevoid SetEffectiveResistance(byte outputId, float ohms)Tell current control the load’s resistance
Output::SetFreqvoid SetFreq(byte outputId, float frequency)Set a script output’s PWM/current-chop frequency in Hz
Output::SetDutyvoid SetDuty(byte outputId, float dutyCycle)Drive a script output in PWM mode at a fixed duty (0-100)
Output::SetCurrentvoid SetCurrent(byte outputId, float milliAmps)Drive a script output in closed-loop current control

Device Information (Device::)

FunctionSignaturePurpose
Device::ReadSerialNumberuint ReadSerialNumber()Read the device’s serial number
Device::ReadVendorKeyuint ReadVendorKey(int keyId)Read one of two vendor keys (keyId 1 or 2), typically used to lock a script to a specific device

Calling Convention

Every native function is called through its namespace.

float rpm = Runtime::ReadReal(RT_ENGSPD);
CAN::Poll();
System::Yield(10);

Calling a native bare (Yield(10);, Poll();) or through the wrong namespace (System::Runtime::Read(1);) fails to compile. Function names are case-sensitive and must match the names in this manual exactly.

A callback handler passed to CAN::Subscribe (a func-typed parameter) is the one exception: it’s a bare script function name, not called through any namespace - see CAN Receive Callbacks.

Runtime ids (the uint id arguments to the Runtime:: functions) are plain numbers assigned by the device’s .mdef. Rather than hard-coding them, #include "mtc.emc" and use the RT_ names it defines - see Include Files.

Every CAN:: function takes a node as its first argument, zero indexed: 0 is CAN 1 and 1 is CAN 2. CAN::Subscribe and CAN::Unsubscribe also accept 2 for both buses; everywhere else 2 is rejected. The include file provides CAN1, CAN2 and CAN_BOTH for these.


Included Device Definition Files

Device header file(s) ship along side the compiler, so a script can refer to channels, buses, bitrates, etc by name instead of by number. Include it at the top of the script:

#include "tm16.emc"

The file name is the device’s name in lower case: tm16.emc for the TM16. The compiler already knows where the shipped headers live, so the plain file name works wherever the script itself is saved. Including the same file more than once (e.g. from two of your own include files) is harmless.

GroupNamesMeaning
ConstantsLOW, HIGH0 and 1, for Output::SetActiveLevel
CAN busesCAN1, CAN2, CAN_BOTHThe node argument of the CAN:: functions (0, 1, 2)
CAN BitratesCAN_BITRATE_125K, CAN_BITRATE_250K, CAN_BITRATE_500K, CAN_BITRATE_1M, CAN_BITRATE_CUSTOMThe bitrateSelect argument of CAN::SetupNode
Runtime ChannelsRT_ENGSPD, RT_GEAR, RT_BATTVOLTS, …The Runtime ID of every channel, for the Runtime:: functions

A runtime channel’s name is RT_ followed by its abbreviation in upper case (the “Engine Speed” channel becomes RT_ENGSPD). Each define carries the channel’s full label as a trailing comment, so the quickest way to find a channel is to open the header and search for the channel name.

You are free to define your own constants too.

#include "tm16.emc"

#define MY_SOLENOID 4

float rpm = Runtime::ReadReal(RT_ENGSPD);
CAN::SetupNode(CAN2, true, CAN_BITRATE_500K, true, false);
Output::SetActiveLevel(MY_SOLENOID, LOW);

The header only provides names - it doesn’t change what any function does. A channel that isn’t writeable still refuses Runtime::Write whether it’s addressed by RT_ name or by number.

Info

#define is used in preference to const uint declarations because unused defines have no effect on the compiled output. If you create 100 variable declarations (const or not), you will add 100 variables to the compiled script binary, that must also take up space on the stack when running.


String/Debug Output

Print, PrintLine, PrintInt, PrintFloat, PrintFormat and PrintBuffer all write to the same destination: a debug message sent to a connected PC over the device’s Ethernet port, rate-limited so a busy loop can’t flood it. None of them do anything unless all of the following are true:

  • The PC is connected to the device and has debug output active, AND
  • The specific script has its “Debug” option enabled in its configuration.

[IMPORTANT] Always disable debug when it’s no longer required.

System::Print("state=");
System::PrintInt(state);
System::PrintLine(" (idle)");
System::PrintFormat("battery: %f V\n", batteryVolts);

str in Print/PrintLine/PrintFormat must be a string - a compile-time string constant, not a byte[] buffer. Use PrintBuffer for buffer content instead (see String Buffers).

System::Print

void System::Print(string str)

Prints a string literal with no newline.

System::Print("hello");

System::PrintLine

void System::PrintLine(string str)

Prints a string literal followed by a newline. Use it for the last piece of a line built up from several Print/PrintInt calls. An empty string "" is not accepted as an argument, so end the line with real text, or use PrintFormat with a \n in its format string.

System::PrintLine("hello");

System::PrintInt

void System::PrintInt(int i)

Prints i as a single integer value.

int i = 100;
System::PrintInt(i); // 100

System::PrintFloat

void System::PrintFloat(float f) 

Prints f as a decimal float (%f format).

int f = 123.4;
System::PrintFloat(f); // 123.4

System::PrintFormat

void System::PrintFormat(string str, float f) // 

Prints str as a printf-style format string with f as its one and only argument.so only a single %f-style specifier makes sense. Anything else in the string that consumes an argument is undefined, the same way a mismatched printf format is in C.

System::PrintFormat("The value is %f", 123.4); // The value is 123.4

System::PrintBuffer

void System::PrintBuffer(byte buf[], int capacity)

Prints buf’s contents up to its null terminator, or up to capacity bytes, whichever comes first. See StringBuffers.


String Buffers

string constants are immutable and can’t be built or modified at runtime - for text a script assembles itself (formatting a value, building a label from CAN data, etc.) it needs a byte[] buffer instead, plus the five string natives that operate on it. All five are C snprintf-style: every one takes an explicit capacity and truncates rather than overflowing.

byte msg[32];
System::StrCopy(msg, 32, "state=");

byte num[16];
System::IntToStr(num, 16, 42);

// StrAppend's source is a string constant only - buffer-to-buffer append isn't supported
System::StrAppend(msg, 32, "42");

System::PrintBuffer(msg, 32);   // msg is byte[] - use PrintBuffer, not Print/PrintLine

Two easy mistakes to make:

  • StrCopy/StrAppend’s source (src) is always a string constant, never another byte[] buffer. There’s no buffer-to-buffer append.
  • A byte[] buffer can never be passed where a string parameter is expected. A freshly declared buffer is zero-filled, so StrLength on one that’s never been written returns 0.

System::StrLength

int System::StrLength(byte buf[], int capacity)

Scans up to capacity bytes for a \0 and returns how many bytes precede it: 0 if buf starts with \0, capacity if no terminator is found.

System::StrCopy

void System::StrCopy(byte dest[], int destCapacity, string src)

Copies src into dest, truncating and null-terminating to fit within destCapacity.

System::StrAppend

void System::StrAppend(byte dest[], int destCapacity, string src)

Appends src onto dest’s existing null-terminated content, truncating and null-terminating to fit within destCapacity.

System::IntToStr

void System::IntToStr(byte dest[], int destCapacity, int value)

Formats value as decimal text into dest, truncating and null-terminating to fit within destCapacity.

System::StrEquals

bool System::StrEquals(byte a[], int capacityA, byte b[], int capacityB)

Returns true if a and b’s null-terminated contents are identical, each scanned up to its own capacity.


Timing

uint nowMs = System::NowMs();
uint nowUs = System::NowUs();

NowMs/NowUs read the device’s uptime from the same free-running hardware timer, but with different wrap periods.

Tip

Write comparisons the wraparound-safe way (unsigned subtraction) rather than assuming now only ever increases: (uint)(now - start) >= threshold)

System::NowMs

uint System::NowMs()

Uptime in milliseconds. Wraps every ~49.7 days (2^32 milliseconds), which makes it the safer default for a script tracking longer-running state (e.g. time since ignition-on).

System::NowUs

uint NowUs()

Uptime in microseconds. Wraps every ~71.58 minutes (2^32 microseconds). Because the two clocks wrap at different points, NowMs() and NowUs() / 1000 only agree with each other for the first ~71.58 minutes after boot - once NowUs has wrapped, NowMs keeps counting while NowUs has reset near zero, so don’t rely on them staying numerically related.

System::Yield

void System::Yield(uint t)

Pauses the calling script for t milliseconds, letting other threads (and the rest of the script scheduler) run. This is the standard way to pace a script’s own loop instead of spinning:

while (1) {
    // ... do work ...
    System::Yield(20);   // ~50 Hz loop
}

System::YieldUntil

uint System::YieldUntil(uint lastTime, uint delay)

A fixed-period yield: sleeps until lastTime + delay, then returns the new lastTime (lastTime + delay) for the caller to feed back in on the next iteration. Unlike Yield, which always sleeps for a fixed duration from now, this keeps a loop’s period accurate even if the loop body’s own work takes a variable amount of time each iteration:

uint lastWake = System::NowMs();
for (;;) {
    // ... do work ...
    lastWake = System::YieldUntil(lastWake, 20);   // 20 ms period, not 20 ms + work time
}

The function takes and returns lastTime explicitly rather than updating it in place (EmC has no reference parameters) - always reassign the return value back onto the variable you pass in, or the period will drift.


Runtime Channels

Runtime channels are the live values used throughout the TCM (engine RPM, gear, clutch pressures, launch targets and so on). Each is identified by its Runtime ID, available by name as RT_... from the device’s include file.

Tip

See the Runtimes reference document for a list of all runtime channels, their #define names, factors, decimals etc.

Channels come in two flavours from a script’s point of view:

  • Read/Write work in the channel’s integer representation: the real value with its decimal point removed, so a channel displayed as 123.4 (one decimal place) reads as 1234, and writing 1234 sets it to 123.4. A channel with no decimal places reads and writes as-is.
  • ReadReal/WriteReal work in floating point units (123.4) and are the simpler choice unless you specifically want integer maths. The TCM is equipped with an FPU so floating point operations are trivial.

Reads of an ID that doesn’t resolve to anything return 0. Writes only succeed (return true) if the target channel is writeable. Lots of channels are computed outputs, not inputs, and will refuse the write.

Important

Channels driven by Input Functions such as Engine Speed must have their input assignment set to Script or they cannot be written to.

#include "tm16.emc"

void main() {
    // Engine Speed has 1DP precision
    int rpmInt = Runtime::Read(RT_ENGSPD) / 10; // 6500.0 rpm reads as 65000
    float rpm  = Runtime::ReadReal(RT_ENGSPD);  // 6500.0

    Runtime::Write(RT_USERCH1, rpmInt + 100);
    Runtime::WriteReal(RT_USERCH2, rpm + 100.0);
}

main();

Runtime::Read

int Runtime::Read(uint id)

Reads the channel as an integer with the decimal point removed. Returns 0 if id is unknown.

int anv1 = Runtime::Read(RT_ANV1); // 3DP: 1.234V = 1234

Runtime::ReadReal

float Runtime::ReadReal(uint id)

Reads the channel as a float in its real units. Returns 0 if id is unknown.

float anv1 = Runtime::ReadReal(RT_ANV1); // 3DP: 1.234V = 1.234

Runtime::Write

bool Runtime::Write(uint id, int value)

Writes value, an integer with the decimal point removed, to the channel. Returns true if the channel accepted the write, false if id is unknown or the channel is not writeable.

// Vehicle speed is 1DP so 1234 = 123.4 km/h
if (!Runtime::Write(RT_VEHICLESPEED, 1234)) {
    System::Print("Vehicle Speed not assigned to Script");
}

Runtime::WriteReal

bool Runtime::WriteReal(uint id, float value)

Writes value, a float in the channel’s real units. Returns true if the channel accepted the write, false if id is unknown or the channel is not writeable.

if (!Runtime::WriteReal(RT_VEHICLESPEED, 123.4)) {
    System::Print("Vehicle Speed not assigned to Script");
}

Torque Model

A script can supply engine torque to the TCM, e.g. when the ECU sends torque in a format the CAN setup can’t decode directly, or when torque needs to be calculated from other channels. See TCM Torque Model for how the TCM uses these values.

  • Torque::SetSupplied and Torque::SetAvailable only take effect while Torque Model Source is set to Script.
  • Torque::SetDriverDemand only takes effect while Driver Demand Source is set to Script.
  • In any other source mode the value is ignored.

Values are in Nm. The torque correction and offset tables (when enabled) are applied on top of the value the script supplies: Engine Torque Correction and Engine Torque Offset for Supplied and Available, Driver Demand Torque Correction and Driver Demand Torque Offset for driver demand. The Get functions return the final value after correction and offset. A supplied value is held until the script sets a new one, so a script that stops or faults leaves the TCM using its last torque values.

Important

Always set both Supplied and Available torque. If the ECU only provides one torque value, set it to both. If Engine Torque (Available) is left at 0, the TCM will think the engine has no torque available and request a full cut on every upshift.

Note

The torque channels can’t be written with Runtime::Write or Runtime::WriteReal. Use the Torque:: functions instead.

#include "tm16.emc"

// ECU sends engine torque in bytes 0-1 of 0x400: signed, little endian, 0.1 Nm
void onEngineTorque(uint id, byte data[], int length) {
    if (length >= 2) {
        int raw = (data[1] << 8) | data[0];
        if (raw > 32767) {
            raw = raw - 65536;
        }
        float torque = raw * 0.1;
        Torque::SetSupplied(torque);
        Torque::SetAvailable(torque);
    }
}

CAN::Subscribe(CAN1, 0x400, 0x7FF, onEngineTorque);

while (true) {
    CAN::Poll();
    System::Yield(10);
}

Torque::GetSupplied

float Torque::GetSupplied()

Returns Engine Torque (Supplied) in Nm: the torque the engine is producing now, after any ignition retard or cuts. Works in every Torque Model Source mode.

Torque::SetSupplied

void Torque::SetSupplied(float tqSupplied)

Supplies Engine Torque (Supplied) in Nm. Ignored unless Torque Model Source is Script.

Torque::GetAvailable

float Torque::GetAvailable()

Returns Engine Torque (Available) in Nm: the torque the engine would be producing with no retard or cuts. Works in every Torque Model Source mode.

Torque::SetAvailable

void Torque::SetAvailable(float tqAvailable)

Supplies Engine Torque (Available) in Nm. Ignored unless Torque Model Source is Script.

Torque::GetDriverDemand

float Torque::GetDriverDemand()

Returns Driver Demand Torque in Nm. Works in every Driver Demand Source mode.

Torque::SetDriverDemand

void Torque::SetDriverDemand(float tqDriver)

Supplies Driver Demand Torque in Nm. Ignored unless Driver Demand Source is Script.


CAN Bus

Every CAN:: function takes a node as its first argument (0 indexed):

  • 0 = CAN 1,
  • 1 = CAN 2
  • Subscribe/Unsubscribe also accept 2 = both buses.

Node Setup

CAN::SetupNode

bool CAN::SetupNode(uint node, bool enable, uint bitrateSelect, bool termination, bool listenOnly)

Configures and restarts a CAN node from the script, replacing the node’s settings from the calibration. Returns true on success, false if node is not 0 or 1.

  • enable - false turns the node off entirely (no transmit, no receive, termination off). The other arguments are still stored but have no effect until the node is enabled again.
  • bitrateSelect
    • 0 = Custom bit timing
    • 1 = 125 kbit/s
    • 2 = 250 kbit/s
    • 3 = 500 kbit/s
    • 4 = 1 Mbit/s
    • *Any other value leaves the bit timing as it was.
  • termination - switches the node’s on-board 120R termination resistor on or off.
  • listenOnly - true puts the node in silent mode: it receives frames but never transmits or acknowledges, and the node’s configured CAN transmit channels are stopped. Use it to read from a bus the TCM must not disturb.
// CAN 2: enabled, 500 kbit/s, termination on, normal (not listen-only) mode
bool canOk = CAN::SetupNode(CAN2, true, CAN_BITRATE_500K, true, false);

Calling it restarts the node, so any frames in flight on that bus are lost. Call it once at script start, NOT from inside the loop. The new settings are not saved to flash by the call itself, so a script that depends on them should apply them every time it starts.

Raw CAN I/O (polling)

Send/Read are the simple, polling pair. Both target one bus, so node must be 0 or 1. 2 is rejected (Send does nothing, Read returns -1).

#include "mtc.emc"

byte txBuf[8];
byte rxBuf[8];

void doCan() {
    txBuf[0] = 1;
    CAN::Send(CAN1, 0x100, txBuf, 8);

    int n = CAN::Read(CAN2, 0x200, rxBuf, 8);
    if (n > 0) {
        System::PrintInt(rxBuf[0]);
    }
}

doCan();

CAN::Send

void CAN::Send(uint node, uint id, byte buffer[], int length)

Queues a CAN message with identifier id and the first length bytes of buffer (at most 8) for transmission on node. The call returns as soon as the frame is queued; it does nothing if node is not 0 or 1 or length is 0.

byte txBuf[8] = { 0, 1, 2, 3, 4, 5, 6, 7 };
CAN::Send(CAN1, 0x100, txBuf, 8);

CAN::Read

int CAN::Read(uint node, uint id, byte buffer[], int length)

Copies the most recently received frame with identifier id on node into buffer, up to length bytes, and returns the number of bytes copied. Returns -1 if no frame with that id has been seen on that bus yet.

byte rxBuf[8];
int read = CAN::Read(CAN2, 0x200, rxBuf, 8);
if (read > 2) {
    int engineSpeed = (rxBuf[1] << 8) | rxBuf[0]; // 0DP
    Runtime::Write(RT_ENGSPD, engineSpeed * 10); // 1DP
}

The device keeps the latest frame for each node/id pair a script has asked about, and each Read call copies out of that store, so reading a frame doesn’t consume it: the same frame is returned again until a newer one arrives. The system holds a fixed number of node/id pairs (16, shared across all running scripts); once it’s full, Read on a pair it isn’t already tracking returns -1. This is fine for a handful of ids a script cares about. If you need every frame on a range of ids, or lower latency, use the callback API below instead.

CAN Receive Callbacks

CAN::Subscribe registers a script function to be called for every received frame whose id matches an id/mask pair, on CAN 1, CAN 2 or both. One subscription can cover many ids (see Id/Mask Matching). Handlers don’t run the instant a frame arrives: matching frames are queued for the script, and CAN::Poll() - called from the script’s own loop - runs each handler in turn on the script’s own thread. This means a callback can never delay real CAN traffic, but also means it only ever fires when the script calls CAN::Poll().

void onEngineData(uint id, byte data[], int length) {
    if (length >= 2) {
        Runtime::Write(RT_TPS, (data[0] << 8) | data[1]);
    }
}

CAN::Subscribe(CAN1, 0x0CF00400, 0x1FFFFF00, onEngineData);

while (true) {
    CAN::Poll();
    System::Yield(10);
}

CAN::Subscribe

void CAN::Subscribe(uint node, uint idMatch, uint idMask, func(uint id, byte data[], int length) handler)

Subscribes a handler to a range of CAN messages:

  • node - 0 = CAN 1, 1 = CAN 2, 2 = both (CAN1, CAN2, CAN_BOTH from the include file).
  • idMatch/idMask - a frame matches when (frame.id & idMask) == (idMatch & idMask). A mask of 0 matches every id on the node.
  • handler - a bare script function name (no parentheses, no namespace), which must be declared with exactly this signature:
void handler(uint id, byte data[], int length) { ... }

id is the received frame’s identifier, data holds its payload and length is how many of those bytes are valid (0-8). A handler with the wrong parameter count or types is rejected at compile time.

data is only valid until the handler returns. Index it, or pass it straight on to another function that takes a byte array (such as CAN::Send), but copy it into a script-declared array if you need the bytes afterwards. Each frame delivered to a handler also uses a little extra script stack on top of the handler’s own locals, so a script running very close to its stack limit can halt with a stack-overflow fault on delivery rather than silently missing the callback.

Calling Subscribe again with the same node/idMatch/idMask replaces the existing subscription’s handler rather than adding a second one.

CAN::Unsubscribe

void CAN::Unsubscribe(uint node, uint idMatch, uint idMask)

Removes a subscription. Pass the exact same three values it was registered with.

CAN::Poll

int CAN::Poll()

Runs the handlers for every matching frame received since the last call, oldest first, and returns how many handlers were fired. A subscribing script must call it once per loop iteration, before yielding, or queued frames simply sit until the next call.

The queue holds a fixed number of frames per script. If a script falls behind a busy bus (e.g. it’s blocked doing other work), the oldest undelivered frames are dropped rather than the queue growing. Keep the loop tight and call Poll() regularly if you’re subscribing to high frequency message(s) or a wide mask. Calling Poll() from inside a handler (directly or indirectly) does nothing and returns 0.

Id/Mask Matching

The match is a bitwise AND against both sides, not a range check:

(frame.id & idMask) == (idMatch & idMask)
  • Bits set in idMask are the ones that must match.
  • Bits clear in idMask are don’t-care and match any value.

A few common patterns:

CAN::Subscribe(CAN1, 0x100, 0xFFFFFFFF, handler1);   // exact id 0x100 only
CAN::Subscribe(CAN1, 0x100, 0x700,      handler2);   // every id from 0x100-0x1FF
CAN::Subscribe(CAN1, 0,     0,          handler3);   // every id on CAN 1 (not recommended)

The frame’s actual ID is always passed to the handler as its first argument, so a single wide-mask subscription can still tell which specific id triggered each call:

void handler2(uint id, byte data[], int length) {
    if (id == 0x101) { ... }
    else if (id == 0x150) { ... }
}

Output Control

Script outputs are a dedicated pool of up to 24 output channels that can be used to drive solenoids etc.
outputId ranges from 1-24, not 0-based. ID 0 or anything above 24 resolves to nothing and does nothing.
Each output has to be assigned to a physical pin in the device’s configuration before a script can usefully drive it. An unassigned output accepts every call here without error but has no effect on hardware.

Info

The script has no way of knowing which physical output the user assigned to a given Script Output.
Eg: Script Output 1, with ID 1, maybe be assigned to drive Solenoid Output 7 (or any other output pin by the end user).

#include "tm16.emc"

#define CENTRE_DIFF_SOLENOID 6

void SetupSolenoids() {
    Output::SetActiveLevel(CENTRE_DIFF_SOLENOID, LOW);        // Active low
    Output::SetFreq(CENTRE_DIFF_SOLENOID, 2000.0);            // 2000 Hz
}

SetupSolenoids();

float TorqueSplitCurrent() { ... }

// Main Script Loop
while(1) {
    float diffMa = TorqueSplitCurrent();
    Output::SetCurrent(CENTRE_DIFF_SOLENOID, diffMa); // Closed-loop current control, mA
    System::Yield(5); // 200 Hz loop
}
Info

SetDuty and SetCurrent set the output’s drive mode. Calling one switches the output into that mode and zeroes the other’s setpoint, so the two are mutually exclusive per output.
Whichever was called most recently wins.
SetFreq applies to both modes.

Output::SetActiveLevel

void Output::SetActiveLevel(byte outputId, int level)

Sets whether the output is driven active-high (1) or active-low (0). LOW and HIGH definitions are in the device include file.

Output::SetActiveLevel(MY_SOLENOID, LOW);

Output::SetEffectiveResistance

void Output::SetEffectiveResistance(byte outputId, float ohms)

Auxiliary Outputs Only
Tells the current control system the resistance of the connected load. Used to help translate the current target into a drive duty. Only relevant in current-control mode when the output is assigned to an auxiliary output rather than a solenoid output.

void Output::SetEffectiveResistance(MY_SOLENOID, 9.5);
Info

If the output’s effective resistance is set to 0 (Recommended and default), the system will work it out on it’s own. The only drawback is that the first application of the solenoid may take a few extra milliseconds to settle on the current target.

Tip

Where possible, preference using the solenoid outputs, not auxiliary outputs to drive current-controlled loads.

Output::SetFreq

void Output::SetFreq(byte outputId, float frequency)

Sets the output’s switching frequency in Hz:

  • PWM rate in PWM (duty) mode.
  • Base frequency in current-control mode.

PWM Range: 0.5 - 20000 Hz
Current Control Range: See below

Output::SetFreq(MY_SOLENOID, 1000.0); // 1000 Hz
Current Control Frequency

When an output is in current control mode, it’s frequency must be one of the following options:

  • 110 Hz
  • 200 Hz
  • 300 Hz
  • 400 Hz
  • 500 Hz
  • 600 Hz
  • 700 Hz
  • 800 Hz
  • 900 Hz
  • 1000 Hz
  • 2000 Hz
  • 3000 Hz
  • 4000 Hz
PWM Mode Frequency

In PWM mode, any frequency up to 20000 Hz (20 KHz) is fine.
Once the duty cycle has been set, putting the output into fixed PWM mode, the frequency can be changed at will, even without updating the duty cycle again. This makes it possible to do variable frequency outputs such as a tacho output.

Output::SetDuty

void Output::SetDuty(byte outputId, float dutyCycle)

Puts the output in fixed-duty PWM mode at dutyCycle percent (0-100) and clears any current target.

Output::SetDuty(MY_SOLENOID, 12.3); // 12.3%

Output::SetCurrent

void Output::SetCurrent(byte outputId, float milliAmps)

Puts the output in closed-loop current-control mode with a target of milliAmps and clears any duty setpoint.

Output::SetCurrent(MY_SOLENOID, 900.0); // 900mA or 0.9A

Output Current Range

  • Solenoid Outputs in single channel mode can command up to 1.5A.
  • Solenoid Outputs in paired channel mode can command up to 2.7A.
  • Auxiliary Outputs can command up to 5A. (high side or low side).
Info

Solenoid Outputs are the preferred output for current controlled loads.


Device Identity

uint serial = Device::ReadSerialNumber();
uint key1   = Device::ReadVendorKey(1);
uint key2   = Device::ReadVendorKey(2);   // any keyId other than 1 or 2 returns 0

A common use is locking a script to a specific device or vendor: compare the serial number and/or a vendor key that only the vendor knows and gives to the user, against an expected value at script start and refuse to run if it doesn’t match.

bool AuthorizeScript(uint serial, uint key) {
    // Some kind of non trivial cypher...
    const uint expected = ((serial & 0xAA55AA55) << 16) + (serial ^ 0xDEADBEEF);
    return key == expected;
}

const uint serial = Device::ReadSerialNumber();
const uint key1   = Device::ReadVendorKey(1);

if (!AuthorizeScript(serial, key1)) {
    // Invalid key
    System::Print("Key Invalid. Script will not run.");
    return; // Returning from the scripts top level will terminate execution.
}

Device::ReadSerialNumber

uint Device::ReadSerialNumber()

Returns the device’s serial number.

Device::ReadVendorKey

uint Device::ReadVendorKey(int keyId)

Returns one of two general-purpose 32-bit calibration values (“Script Vendor Hardware Key 1/2”), set like any other calibration value. keyId is 1 or 2; any other value returns 0.

Info

The Script Vendor Hardware Key # variables are kept at the device level. This means that uploading a cal file with different values in the keys, will not change the values in the device. They will be ignored from the cal file data. This stops the sharing of cal files that run the same scripts from breaking script execution when uploaded.

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Tuning

Emtron ECU Integration

This document details the steps required for the TCM and ECU to integrate with each other.

Minimum ECU Firmware Version: 2.21.0

TM16 to Emtron ECU CAN Protocol

The TM16 CAN protocol uses ID’s in the range of 336 to 345 (0x150 to 0x159). Care must be taken to ensure that no other devices are using ID’s withing that range.

Channels controlled by Input Functions (eg: Engine Speed) must have their input source set to CAN.

Transmission Channels

The following channels are transmitted by the TCM:

  • Gear
  • Gear Request (Next Gear)
  • Input Shaft Speed
  • Output Shaft Speed
  • Torque Limit (Slow / Throttle)
  • Torque Limit (Fast / Ignition)
  • Up Shift Switch
  • Down Shift Switch
  • Transmission Fluid Temp

Engine Channels

The following channels are transmitted but the ECU:

  • Engine Speed
  • Manifold Absolute Pressure
  • Throttle Area Demand
  • Pedal Position Demand
  • Engine Torque (No Reductions)
  • Engine Torque (Final)
  • Driver Demand Torque
  • Brake Switch
  • Engine Temperature
  • Idle Target
  • Idle Status
  • Overrun Fuel Cut Status
  • CE Light

TM16 Setup

  1. Set up the CAN Bus:
    • Ensure the CAN Node is set to the same bitrate as the ECU (eg: 1 MBps)
    • Ensure the CAN bus is correctly terminated
    • Ensure proper CAN bus topology and wiring
    • Assign a CAN Channel to: “Emtron Transmission Control Rx”
    • Assign a second CAN Channel to: “Emtron Transmission Control Tx”

Emtron CAN Channels Emtron CAN Channels

  1. Set the following input function sources to “CAN”:
    • Engine Speed (Main)
    • Throttle Position (Main)
    • Pedal Position (Main)
    • Manifold Absolute Pressure

ECU Channels ECU Channels

  1. Set the Torque Model to CAN:
    • Torque Model Source
    • Driver Demand Source Torque Model CAN Torque Model CAN

ECU Setup

  1. Set up the CAN Bus:
    • Ensure the CAN Node is set to the same bitrate as the TCM (eg: 1 MBps)
    • Assign a CAN Channel to “Emtron TM16”.

ECU TM16 CAN Mode ECU TM16 CAN Mode

  1. Enable Gearshift Control: Emtron TM16

Gearshift Control: TM16 Gearshift Control: TM16

  1. Assign the following inputs to “CAN Bus OEM”:
  • Input Shaft Speed
  • Output Shaft Speed
  • Gear Upshift Switch
  • Gear Downshift Switch

TM16 CAN Channels TM16 CAN Channels

  1. Assign Gear Detection to “CAN Bus OEM”

ECU Gear Detection Setup ECU Gear Detection Setup

  1. Fill in the Transmission Gear Ratio Table to match the TCM ECU Gear Ratio Table ECU Gear Ratio Table

  2. Setup the Torque Model

  • Normal Torque Model validation applies. Ensure the torque model is well sorted and frictional loss is validated.
  • Set the CAN Bus Reported Torque Modifier Tables to zero unless you have a specific reason to change it.

CAN Bus Reported Torque Modifier Table CAN Bus Reported Torque Modifier Table

CAN Bus Reported Driver Demand Torque Modifier Table CAN Bus Reported Driver Demand Torque Modifier Table

It is critical that the ECU’s torque model is well sorted.
  • In the TM16 Menu:
    • Set TM16 Throttle Torque Gain to Zero
    • Set TM16 Retard Torque Gain to Zero
    • Set TCM WOT Torque Lockout Value to -1000 to disable
    • Setup the Engine Cut Setup to suit your application

TCM Throttle Torque Gain TCM Throttle Torque Gain

TCM Retard Torque Gain TCM Retard Torque Gain

TM16 Setup Menu TM16 Setup Menu

TM16 Engine Cut Setup TM16 Engine Cut Setup

  1. Up Shift Setup:
  • In Motorsport > Geashift Control TM16: Configure the upshift to your application.

Upshift Setup Upshift Setup

  1. Down Shift Setup:
  • In Motorsport > Gearshift Control TM16, configure Downshift for your application.

Down Shift Setup Down Shift Setup

Most applications will use a Base Torque Target of 0 nm. This results in the engine holding itself at the rev match target until the clutch grabs it.
  1. Set up the Downshift Rev-Match Torque Target Margin Table:

This is the amount of torque applied at the start of the downshift to get the engine to the Rev-Match target. Engine torque is reduced to the Base Torque Target as the engine speed reaches the Rev-Match Target.

Downshift Rev-Match Torque Target Margin Downshift Rev-Match Torque Target Margin

Important Notes

Upshift Switch

Upshift Switch is only transmitted when the TCM wants a torque limit during the shift. Otherwise, the Gear Request value will simply change to the next gear and the shift will progress without torque intervention. The ECU will abide by the torque limit specified by the TCM during a shit.

Downshift Switch

Downshift Switch is only transmitted when the TCM wants a Rev-Match. Otherwise, the shift will happen without intervention.

Rev Match Target

The ECU will calculate its own Rev-Match target RPM based on the Output Shaft Speed and Gear Ratio.

It is critical that the gear ratio table is correct.

Down Shifting Log Down Shifting Log

Copyright © 2026 Emtron Australia Pty Ltd

Automatic Shifting

Automatic shifting chooses the gear in Drive and Sport. It can also add automatic up shifts, down shifts and kickdown to Manual mode, for example to shift up at the rev limit or down before the engine lugs.

There are three ways to tell the TCM when to shift:

  • Speed - Simple: one up shift table and one down shift table give the speed to shift at.
  • Speed - Per Gear: a separate table for every up shift and down shift.
  • Gear Request: the table holds the gear to be in.

Whichever is used, every automatic shift still has to pass the same checks as a manual shift (input shaft speed limits, Takeup, time since the last shift and so on, see When an Automatic Shift Is Blocked).


Enabling

Turn on Enable in Automatic Shift > Auto Shift Setup. The rest of the settings and the Drive Mode, Sport Mode, Manual Mode and Hill Control folders appear once it is on.

SettingDescription
EnableTurns automatic shifting on. Also needed for the Manual mode automatic shifts.
Table ModeSpeed - Simple, Speed - Per Gear or Gear Request, see Table Modes.
Speed ReferenceThe channel the speed tables are compared against, see Speed Reference. Not used in Gear Request mode.
Gear Request Table HysteresisGear Request mode only, see Hysteresis.
Sport TablesOff: Sport uses the Drive Mode tables. On: Sport uses the tables in the Sport Mode folder.
Up / Down Shift Switch BehaviourWhat an Up Shift or Down Shift switch press does in Drive or Sport, see Up / Down Shift Switches in Drive and Sport.
Manual Override TimeoutSee Drive Modes.
Shift Lead Time CompensationStarts shifts early to make up for the time a shift takes, see Shift Lead Time Compensation. In Drive and Sport it is used in the Speed modes. It is also used by the Manual mode automatic shifts in every Table Mode.
Hill Ascent Control, Hill Descent Control and their settingsSee Hill Control. Speed modes only.

Speed Reference

In the Speed modes, the up shift and down shift tables hold a speed, in the units of the Speed Reference:

Speed ReferenceShift points areNotes
Engine SpeedRPMIncludes torque converter slip, which can be large at low speed and high load.
Input Shaft SpeedRPMFollows the gearbox directly. A good default.
Input Shaft Speed (Calculated)RPMCalculated from Output Shaft Speed and the current gear ratio.
Vehicle Speed, Drive Speedkm/hA road speed.
Output Shaft Speed, Output Shaft Speed (Calculated)RPMProportional to road speed.
Off-No automatic shifts in the Speed modes.

With an RPM reference (engine or input shaft), the same number can suit every gear, for example “shift up at 6500 RPM at full pedal”. With a road-speed reference (vehicle, drive or output shaft speed), every gear needs its own shift points: use Speed - Per Gear, or put Gear on an axis of the Simple tables.

Skip shifts are worked out from the gear ratios, so they need an Engine Speed or Input Shaft Speed reference. With a road-speed reference each automatic shift moves one gear, see Skip Shifts.


Table Modes

Table ModeShift tables (Drive Mode folder)Shift tables (Sport Mode folder)
Speed - SimpleDrive Mode Up Shift Speed, Drive Mode Down Shift SpeedSport Mode Up Shift Speed, Sport Mode Down Shift Speed
Speed - Per GearDrive Up Shift 1 to 2 … and Drive Down Shift 2 to 1 …, one for each shift up to the Number of Forward GearsSport Up Shift 1 to 2 …, Sport Down Shift 2 to 1 …
Gear RequestDrive Mode Gear RequestSport Mode Gear Request

Every mode also uses:

  • Drive Mode Up Shift Enable and Drive Mode Down Shift Enable (and the Sport versions), see Shift Enable Tables.
  • Drive Mode Shift Trigger Delay (and Sport Mode Shift Trigger Delay), see Shift Trigger Delay.

The table axes can be any channel. Typical choices are Pedal Position or Throttle Position against Gear, a speed, or Transmission Fluid Temperature.


Speed Modes

How a Shift Is Triggered

In Drive and Sport, every control cycle:

  • Up shift when the Speed Reference is at or above the up shift speed, the Up Shift Enable table is on, and both have been true for longer than the Shift Trigger Delay.
  • Down shift when the Speed Reference is at or below the down shift speed, the Down Shift Enable table is on, and both have been true for longer than the Shift Trigger Delay.

Up shifts are checked first. A shift speed of 0 means no shift in that direction.

In Speed - Simple mode with Gear on an axis, the column for a gear holds the shift point from that gear. In the up shift table, the gear 3 column is the 3 to 4 shift point. In the down shift table, it is the 3 to 2 shift point. Set the top gear’s up shift column to 0.

Up and Down Shift Speeds

Leave a gap between the up shift and down shift points, or the transmission will shift back and forth. With an RPM reference, check the speed after each shift:

  • After an up shift the RPM drops by the ratio step. On a ZF 8HP, 6500 RPM in 2nd becomes about 4400 RPM in 3rd. The 3rd gear down shift speed must be well below that.
  • After a down shift the RPM rises by the ratio step. The up shift speed for the lower gear must be well above that.

With a road-speed reference the speed doesn’t change through the shift, so simply keep each gear’s down shift speed below the speed it was up shifted at.

Typical shapes:

  • Up shift speed rising with pedal: early, economical up shifts at light pedal, and full use of the engine’s speed range at full pedal.
  • Down shift speed rising with pedal: pressing the pedal further down shifts sooner. This is the Drive mode kickdown.

Shift Enable Tables

The Up Shift Enable and Down Shift Enable tables switch automatic shifting in each direction on (1) or off (0), based on any channels. For example:

  • Transmission Fluid Temperature: hold lower gears while the fluid warms up.
  • Lateral acceleration: no up shifts mid-corner in Sport.
  • A User Function or switch: a “hold gear” button.

Any value above 0 counts as on. Between an on cell and an off cell, the shift stays enabled right up to the off cell.

Shift Trigger Delay

The Shift Trigger Delay tables (ms) set how long a shift condition must hold before the shift is requested. This stops a speed that briefly crosses a shift point, or a quick pedal movement, from causing a shift. Putting Pedal Position on an axis lets kickdowns at high pedal be quick while light-pedal shifts wait longer.

The delay starts again after every shift, so each shift needs its own shift condition to hold for the delay.

The delay is also what allows skip shifts, see Skip Shifts.

Skip Shifts

Up Shift Stacking Limit and Down Shift Stacking Limit (Shift Setup > Up Shift > Up Shift Setup and Shift Setup > Down Shift > Down Shift Setup) set the most gears one automatic shift can move. 0 and 1 both mean one gear at a time for automatic shifts.

Above 1, the TCM keeps going to the next gear while the speed that gear would give is still past the shift point, for example dropping from 6th straight to 3rd when the pedal is floored. This needs an Engine Speed or Input Shaft Speed (or Input Shaft Speed (Calculated)) Speed Reference. A road speed doesn’t change when the gear changes, so with a Vehicle, Drive or Output Shaft Speed reference the stacking limits are not used and each automatic shift moves one gear. A skip shift never goes past the top gear or below the gear in the Initial Gear table. It is shortened to keep Input Shaft Speed between Input Shaft Speed Min and Input Shaft Speed Max. On a dual-clutch transmission a skip shift has to change to the other clutch, so the TCM may shorten it by a gear.

The number of gears is worked out when the Shift Trigger Delay runs out. A skip shift needs a Shift Trigger Delay above 0. With a delay of 0, the shift is requested the moment the shift point is crossed, when the speed is only just past it, so only one gear is ever justified and the transmission shifts one gear at a time whatever the stacking limit. The delay gives the speed, or a shift point that moves with the pedal, time to get further past, and that is what lets the TCM skip gears. For skip-shifting kickdowns, keep the delay short at high pedal, but not 0.

Tip

Start with both stacking limits at 1. Raise them only once the single-gear shift points are working, and check skip shifts in a log, including coming to a stop.


Gear Request Mode

In Gear Request mode, the Drive Mode Gear Request and Sport Mode Gear Request tables hold the gear to be in (1 to 12). The axes can be anything, typically Vehicle Speed against Pedal Position.

The table is interpolated, so between a 3 cell and a 4 cell its value moves smoothly from 3.0 to 4.0. The Auto Shift Gear Table channel shows the value.

Hysteresis

Gear Request Table Hysteresis (0-100%) sets how far past the halfway point between two gears the table value must go before the TCM shifts:

HysteresisFrom 3rd, up shift to 4th atFrom 4th, down shift to 3rd at
0%3.503.50
50%3.753.25
100%4.003.00

At 100% the shift points are exactly where the cells are: up to 4th when the table reaches the 4 cell, back to 3rd only when it reaches the 3 cell. The spacing between neighbouring cells is then the hysteresis. 0% gives no hysteresis and isn’t recommended.

Holding the Gear

A cell of 0 means “hold the current gear”. Any table value below 1 holds.

Hold cells interpolate too

Between a 0 cell and a 4 cell, the table value passes through 1, 2 and 3, and those gears will be requested. Keep hold cells next to other hold cells, or put two axis breakpoints very close together where a hold region meets a gear region.

To hold the gear under particular conditions (a hold switch, cold fluid, cornering), the Up Shift Enable and Down Shift Enable tables are usually easier: they hold the gear without interpolating against the gear cells.

Limits

The table can ask for any gear, but each shift is limited:

  • It moves no more than the stacking limit (see Skip Shifts). As in the Speed modes, a skip shift needs a Shift Trigger Delay above 0, so the table value has time to move more than one gear.
  • It never goes above the top gear or below the gear in the Initial Gear table.
  • An up shift is shortened to the highest gear that keeps Input Shaft Speed above Input Shaft Speed Min. A down shift is shortened to the lowest gear that keeps it below Input Shaft Speed Max.
  • The Up/Down Shift Enable and Shift Trigger Delay tables still apply.

Speed Reference, Shift Lead Time Compensation and Hill Control are not used by Gear Request mode. Shift Lead Time Compensation still applies to the Manual mode Auto Up Shift and Auto Down Shift.


Sport Mode

With Sport Tables on, Sport uses every table in the Sport Mode folder: the shift speed or gear request tables, the enable tables and the trigger delay. With it off, Sport behaves like Drive. See Drive Modes for how Sport is selected.


Shift Lead Time Compensation

A shift takes time to complete. While the speed is rising quickly, the engine is already past the up shift point by the time the shift finishes. With Shift Lead Time Compensation on, the TCM looks at how fast the Speed Reference is changing and starts the shift early by the amount it will change during the shift. Up shifts under hard acceleration then finish close to the table’s up shift speed. Down shifts while slowing down are started early in the same way.

The shift time is taken from the clutch fill time, plus the up shift transfer time for up shifts (see Multi-Clutch Shifting). The Shift Trigger Delay is allowed for as well: the shift point is moved early by the change over the shift time plus the delay, so the delay still filters out a speed that only briefly crosses the shift point, and the shift still finishes near the table’s speed.

Compensation never brings an up shift point forward by more than half of its table value, so a very low up shift speed under hard acceleration still gives a sensible shift.

It only acts while both are true:

  • Engine Speed is at or above Shift Lead Time Engine Speed Min.
  • Pedal position (or throttle position if there is no pedal) is at or above Shift Lead Time Pedal/Throttle Min.

It also applies to the Manual mode Auto Up Shift and Auto Down Shift.

Tip

Get the shift points right with compensation off first. Then turn it on and check in a log that full-pedal up shifts finish where you want them.


Hill Control

Hill Control (Speed modes only) changes the down shift points on steep grades, using Pitch Angle (X) from the TCM’s IMU (positive nose up). The IMU must be mounted and calibrated. Hill Control is off while the IMU is calibrating or has a hardware error.

Hill Ascent

With Hill Ascent Control on, Hill Ascent becomes active when Pitch Angle (X) stays above Hill Ascent Pitch Threshold for Hill Ascent Delay. It ends once the pitch has been below the threshold minus Hill Ascent Pitch Hysteresis for the same delay, so a bump in the road doesn’t end it.

While it is active, the Hill Ascent Down Shift Speed table (in Speed Reference units) is used as the down shift speed when it is higher than the normal one, and the up shift speed is raised by the same amount. The transmission down shifts sooner on the climb and holds the lower gear instead of shifting up and down.

Hill Descent

With Hill Descent Control on, Hill Descent becomes active when Pitch Angle (X) stays below Hill Descent Pitch Threshold (a negative angle, nose down) for Hill Descent Delay. It ends once the pitch has been above the threshold plus Hill Descent Pitch Hysteresis for the same delay.

While it is active, the Hill Descent Down Shift Speed table works the same way, to hold a lower gear for engine braking.

Tip

The body pitches nose up under hard acceleration and nose down under braking. Set the delays long enough that this doesn’t activate Hill Control on flat ground. Put Gear on an axis of the hill tables if each gear needs its own down shift speed.

Hill Ascent Control and Hill Descent Control show ON while each is active and its table is above 0.


Manual Mode

Manual mode normally only shifts when the driver asks. Automatic Shift > Manual Mode > Manual Mode Auto Shift Setup adds optional automatic shifts. They need automatic shifting Enable on, and also work while Manual has been selected by Manual Override.

SettingDescription
Speed ReferenceThe channel used by the Manual Mode tables and Kickdown Speed. Same options as Speed Reference. Off turns all Manual mode automatic shifts off.
Auto Up ShiftSee Auto Up Shift and Auto Down Shift.
Auto Up Shift User EnableOptional User Function. When assigned, Auto Up Shift only works while it is ON.
Auto Down ShiftSee Auto Up Shift and Auto Down Shift.
Auto Down Shift User EnableOptional User Function. When assigned, Auto Down Shift only works while it is ON.
KickdownSee Kickdown.
Kickdown User EnableOptional User Function. When assigned, Kickdown only works while it is ON.

Auto Up Shift and Auto Down Shift

  • Auto Up Shift: shifts up one gear as soon as the Speed Reference reaches Manual Mode Up Shift Speed. Typically used to shift at the rev limit if the driver doesn’t.
  • Auto Down Shift: shifts down one gear as soon as the Speed Reference falls to Manual Mode Down Shift Speed. Typically used to stop the engine lugging or stalling. It doesn’t shift below the Initial Gear.

These shifts only wait for a very short fixed delay, enough to ignore a single bad speed reading. A value of 0 in either table means no shift.

Kickdown

With Kickdown on, the TCM down shifts when the Speed Reference has been below Kickdown Speed for Kickdown Shift Trigger Delay (ms). With Pedal Position on an axis of the Kickdown Speed table (0 at light pedal, a speed at full pedal), flooring the pedal at low RPM in a high gear kicks down.

The Kickdown Setup page sets:

  • Kickdown Minimum Gear: kickdown only acts above this gear and never shifts below it.
  • Kickdown Stacking Limit: the most gears one kickdown can drop. Above 1, it drops as many gears as needed to bring the Speed Reference above Kickdown Speed, but never below the Initial Gear and never so far that Input Shaft Speed would go above Input Shaft Speed Max. 0 and 1 both mean one gear. As with Skip Shifts, dropping more than one gear needs an Engine Speed or Input Shaft Speed reference, and a Kickdown Shift Trigger Delay above 0.

While a kickdown is being requested, Auto Up Shift and Auto Down Shift are ignored.


Coming to a Stop

In Drive and Sport, if the car stops in a gear above the Initial Gear, the TCM shifts down towards the Initial Gear even when the shift tables don’t ask for it. This covers a 0 cell in a down shift table, a Gear Request hold cell, or braking harder than the down shifts can keep up with. Each shift moves as many gears as Down Shift Stacking Limit allows.

The car counts as stopped when all of these are true:

  • Output Shaft Speed is low enough that even the Initial Gear would put the input shaft at or below Input Shaft Speed Min.
  • The speed of the shaft the engaged gear is on (Input Shaft Speed, or on a dual-clutch transmission the active clutch’s shaft) is at or below Input Shaft Speed Min.
  • Vehicle Speed and Drive Speed read 0, if they are set up.

The Down Shift Enable table must be on, and the stop must last for the Shift Trigger Delay. Because every speed source has to agree, one failed speed sensor reading 0 can’t cause a down shift while driving. With Input Shaft Speed Min at 0, only a complete stop counts.

This is a backstop. Tune the down shift tables so the transmission is normally already in the Initial Gear by the time the car stops.


When an Automatic Shift Is Blocked

An automatic shift is not made while any of these apply. Auto Shift Status shows what automatic shifting is doing (Auto Shift Status), and Shift Request Status shows why a requested shift was refused (Shift Request Status).

ConditionShown as
The Up Shift Enable or Down Shift Enable table is offAuto Shift Status: Up/Down Shift Disabled - Enable Table
The Shift Trigger Delay hasn’t passedAuto Shift Status: Up/Down Shift Trigger Delay
The new gear would put Input Shaft Speed below Input Shaft Speed Min (Transmission Config)Shift Request Status: Up Shift Lockout - Input Shaft Speed Min
The new gear would put Input Shaft Speed above Input Shaft Speed Max (Transmission Config)Shift Request Status: Down Shift Lockout - Input Shaft Speed Max
Already in the top gear (Number of Forward Gears)No up shift is requested
The new gear is below the gear in the Initial Gear table (Shift Setup). Driver down shifts are not limited by this.The down shift stops at the Initial Gear
Takeup is slipping the clutch, with Suppress Auto Mode Up/Down Shifts During Takeup onShift Request Status: Up/Down Shift Lockout - Takeup
Next Up Shift Delay / Next Down Shift Delay (Shift Setup > Up Shift / Down Shift) hasn’t passed since the last shift, or a shift is in progressUp Shift Status / Down Shift Status are not Ready

Input Shaft Speed Min and Max are the main protection against lugging and over-revving. Set them before tuning the shift tables.

When Drive is selected from Neutral, the TCM engages the gear in the Initial Gear table. If the car is already moving, it picks the highest gear that keeps Input Shaft Speed above Input Shaft Speed Min.


Up / Down Shift Switches in Drive and Sport

Up / Down Shift Switch Behaviour sets what an Up Shift or Down Shift switch press does in Drive or Sport:

SettingBehaviour
Manual OverrideThe press changes to Manual and makes the shift. Drive or Sport returns after Manual Override Timeout, see Manual Override.
IgnoreUp Shift and Down Shift presses do nothing in Drive or Sport. Select Manual to shift with the switches.

Holding Down Shift in 1st to select Neutral, and holding Up Shift in Neutral to select Drive, work with either setting (see Drive Modes).


Monitoring

ChannelDescription
Auto Shift StatusWhat automatic shifting is doing, see below.
Auto Up Shift SpeedThe up shift point for the current gear, in Speed Reference units, including any Hill Control and Shift Lead Time Compensation change. 0 means no up shift.
Auto Down Shift SpeedThe down shift point for the current gear, with the same changes. 0 or below means no down shift.
Kickdown SpeedThe current Manual mode kickdown speed. 0 when Kickdown is off or the gear is at or below Kickdown Minimum Gear.
Auto Shift Gear TableGear Request mode: the interpolated table value.
Hill Ascent Control, Hill Descent ControlON while Hill Control is active.
Requested GearThe gear the TCM is asking for.
GearThe engaged gear.
Shift Request StatusWhy a requested shift is being refused, see Shift Request Status.
Up Shift Status, Down Shift StatusReady when the next shift in that direction may start.
Transmission Drive ModeDrive, Sport or Manual.
Pitch Angle (X)The pitch used by Hill Control.

The automatic shift channels read 0 (Auto Shift Status: Off) in Park, Reverse and Neutral.

Auto Shift Status

StatusMeaning
OffAutomatic shifting is off, or the TCM is in Park, Reverse or Neutral. In Manual, none of the Manual mode automatic shifts are on.
No ShiftRunning, and no shift is wanted.
Up Shift Trigger Delay, Down Shift Trigger DelayA shift point has been crossed and the Shift Trigger Delay is running. In Manual, the short fixed delay of Auto Up/Down Shift.
Up Shift Disabled - Enable Table, Down Shift Disabled - Enable TableA shift point has been crossed, but the Up/Down Shift Enable table is off.
Gear Request HoldGear Request mode, and the table value is below 1.
Hill Ascent, Hill DescentHill Control has raised the down shift point (and up shift point), and no shift is wanted.
Stopped - Shifting to Initial GearThe car has stopped above the Initial Gear, see Coming to a Stop.
Up Shift Requested, Down Shift RequestedThe shift is being requested. If it doesn’t happen, check Shift Request Status.
KickdownManual mode Kickdown is active.

Tuning Procedure

  1. Basics first. Check the gear ratios, Number of Forward Gears, Initial Gear, Input Shaft Speed Min and Input Shaft Speed Max, and Next Up Shift Delay / Next Down Shift Delay. Get the shifts themselves working well with the switches in Manual (see Multi-Clutch Shifting).
  2. Choose the mode. Pick a Table Mode and, for the Speed modes, a Speed Reference. Input Shaft Speed with Speed - Simple is the quickest start. Gear Request suits a road-speed based shift map.
  3. Start simple. Set both stacking limits to 1, and leave Sport Tables, Shift Lead Time Compensation and Hill Control off. Set the enable tables to 1 everywhere and the trigger delays to a few hundred milliseconds.
  4. Up shifts. Fill the up shift tables: early at light pedal, near the top of the engine’s useful speed range at full pedal.
  5. Down shifts. Fill the down shift tables, leaving a clear gap below the speed each up shift lands at, and make sure each gear down shifts before the car slows to a stop.
  6. Drive and log. Look for hunting (repeated up and down shifts), shifts that come too late at full pedal, and lugging at light pedal. Adjust the tables and trigger delays. When an expected shift doesn’t happen, Auto Shift Status and Shift Request Status show why.
  7. Refine. Add enable table conditions (fluid temperature, cornering), Sport tables, skip shifts and Shift Lead Time Compensation, one at a time.
  8. Hill Control and Manual mode. Set these up last, on a known grade and with Manual selected.

Channels worth logging while tuning:

  • Auto Shift Status
  • Gear
  • Requested Gear
  • Transmission Drive Mode
  • Auto Up Shift Speed
  • Auto Down Shift Speed
  • Auto Shift Gear Table (Gear Request mode)
  • Shift Request Status
  • Your Speed Reference
  • Pedal Position or Throttle Position
  • Input Shaft Speed
  • Your table axes

Copyright © 2026 Emtron Australia Pty Ltd

Clutch Capacity Adaption

The Clutches Geometry Model and engine inertia value will control the majority of the clutch torque applied during a shift. During a shift, the closed loop PID algorithm will make adjustments to the final clutch torque to try and keep the slip curve on target. After a shift, as long as the conditions are met, the Clutch Capacity Adaption system will look at the previous shift’s closed loop output and make small adjustments to the relevant clutch’s Learned Capacity Scaler.

Clutch Learned Capacity Scaler Tables

Each Clutch has a Learned Capacity Scaler Table.

  • A value of 100% means no correction is applied. Clamping pressure remains unchanged.
  • A value below 100% suggests that the actual clutch capacity is less than described by the clutch geometry model. More clamping pressure will be applied.
  • A value above 100% suggests that the actual clutch capacity is higher than described by the clutch geometry model. Less clamping pressure will be applied.

These tables are stored automatically on power off.

Uploading a cal file will NOT overwrite the tables.
Important

Clutch Learned Capacity Scaler Table’s have strict axis requirements:

  • X Axis: MUST be Transmission Fluid Temperature.
  • Y Axis: MUST be Gear or Off.
  • Z Axis: Not used.

Copyright © 2026 Emtron Australia Pty Ltd

Clutch Modelling

The TCM will use the clutch geometry model to calculate the torque capacity of each clutch. These settings are critical to correct transmission behavior.

alt text alt text

Clutch Geometry

Clutch geometry is taken into account in two directions:

  • Calculating how much pressure to apply to hold a given torque.
  • Calculating how much torque a given pressure can hold.

Plate Count

The number of friction plates in the clutch assembly. Aftermarket clutch kits often have increased plate counts, make sure to enter the correct number here.

Friction Diameters

The inner and outer diameters of the friction plate(s) should be entered accurately. Ideally these should be physically measured.

Hydraulic Piston Diameters

The hydraulic piston refers to the chamber that is filled with fluid in order to apply clamping force to the clutch. In the case of a fully open chamber without a shaft running through it (cylinder as opposed to a doughnut), an inner diameter of 0.0mm is valid.

Estimated Efficiency

Estimates the inefficiencies or mechanical losses involved in converting a given hydraulic pressure to a clamping torque capacity.

Typical Value: 85.0%

Pressure Curve Linearity

Bends the clutch’s Torque to Pressure translation into a non linear curve.

1.00 = Linear
< 1.00 = More pressure at lower torque
> 1.00 = Less pressure at lower torque

Clutch Pressure Curve Linearity Clutch Pressure Curve Linearity

Typical Value: 1.00

Capacity Correction

Enables a table that allows the user to manipulate the final calculations.

In most cases this should NOT be used.

Typical Value: OFF


Clutch Friction Coefficient

Clutch Friction Coefficient Clutch Friction Coefficient

This table controls the frictional behavior of the clutch. Typically a wet clutch will have an increase in friction as it heats up with moderate slip, before falling back off as slip increases.

If you’re unsure, a generic table is provided that can be loaded in as a good starting point.

Centrifugal Pressure

Wet clutch drums spinning at speed generate centrifugal hydraulic pressure that acts on the piston independently of commanded pressure. At high drum speeds this can cause an offgoing clutch to partially engage even when you command only touch-point pressure.

On some transmissions dragging will be evident as a torque interruption or slip resistance during rev-matched downshifts. It may feel like the car is being pushed when the clutches should be fully slipping.

Select the mode used to calculate Clutch Centrifugal Pressure.

  • Modelled = Clutch geometry based.
  • Coefficient = Uses a coefficient that is independent of clutch geometry.

Modelled Centrifugal Pressure

When Clutch Centrifugal Pressure is in Modelled mode, the Clutch’s Centrifugal Pressure is calculated using the clutch geometry. Cancellation Efficiency represents how well the clutch resists the build up of centrifugal pressure.

  • 0% = Full Modelled Centrifugal Pressure, maximum correction.
  • 100% = No Modelled Centrifugal Pressure, no correction.

Centrifugal Pressure Coefficient

The coefficient compensates by subtracting from the total target pressure for the offgoing clutch.

  • Start at 0 (disabled).
  • Increase in steps of 20-30.

At 3000 RPM, each step of 10 removes appox. 0.09 bar of commanded pressure.

Typical Value: 0 or 100 - 200


Clutch Gear Load Factor

Not required for DCT Transmissions
Tip

This table is considered “Set & Forget”. It should be setup early on and left, rather than used as a tuning table.

Multi-clutch automatic transmissions use multiple clutches and brakes to create each gear. These elements do not share torque equally. Depending on the gear ratio and planetary gearset layout, one element may carry much more reaction torque than another. Each clutch will often have a different input torque applied to it depending on the combinations of clutches and gears also applied for a particular gear.

Clutch Gear Load Factor Table Clutch Gear Load Factor Table

The Clutch Gear Load Factor table accounts for this internal torque multiplication on a per gear and per clutch basis.

This allows the TCM to estimate how much torque capacity each applied element needs in each gear.

Important
  • X Axis must be “Clutch #”
  • Y Axis must be “Gear”
  • Z Axis is not used

The values in this table are not gear ratios or pressure multipliers. They are torque-capacity multipliers used before the torque-to-pressure calculation.

The resultant input torque for each clutch is shown by the “Clutch N Input Torque” runtime.

Clutch N Input Torque = Clutch Input Torque x Load Factor

Important Notes:

  • Load Factors can be calculated from the transmissions gear set.
  • Only elements that are applied in a gear should have non-zero values. Elements that are released in that gear should be set to zero.
  • Increasing a value will increase the calculated torque capacity requirement for that element in that gear, resulting in higher commanded pressure.
  • Decreasing a value will reduce the calculated pressure requirement.
  • If the value is too low, the clutch or brake may slip under load.
  • If the value is too high, the shift or gear engagement may become harsh, inefficient, or create unnecessary clutch stress.
  • It’s recommended to set each Clutch’s Learned Capacity Scaler Table Y axis of “Gear”. This allows the clutches to learn on a per-gear basis.

Copyright © 2026 Emtron Australia Pty Ltd

Clutch Pressure Control

The TCM needs to apply pressure to the clutch(s) in two main scenarios:

  • In Gear (Active Clutch Pressure)
  • During a shift

Other sub systems such as Takeup can takeover the clutch pressure control. They’re documented separately.


Active Clutch Pressure

The Active Clutch Pressure refers to the pressure applied to a clutch that is transmitting normal in-gear torque. The primary influencing factor on Active Clutch Pressure is Torque.

Clutch Pressure Setup Clutch Pressure Setup

Input Shaft Torque Source

Torque based clutch pressure uses the Input Shaft Torque runtime for it’s calculations. The source of Input Shaft Torque can come from:

  • Engine Torque (Supplied)
  • Engine Torque (Available)
  • Engine Torque (Supplied & Inertia Corrected)

Most setups would use Engine Torque (Supplied).

Clutch Pressure Target Source

The pressure applied can be calculated in a number of ways:

  • Torque Modelled
  • User Defined
  • Line Pressure Controlled
Tip

DCT Transmissions should almost always use Torque Modelled mode.

Target Source: Torque Modelled

---
title: Torque Modelled Clutch Pressure
---
graph LR;
  Prs(Clutch Pressure) -->|Bar| PID(PID)
  Tq(Input Shaft Torque) -->|Nm| TqCap{Sum: Required Torque Capacity} 
  Clamp(Clamping Torque Margin) -->|Nm| TqCap 
  TqCap -->|Nm| Geo(Clutch Model)
  Geo -->|Bar| Src{<strong>Clutch Pressure Target Source</strong>}
  Src -->|Bar| Sol(Solenoid Translation)
  Sol -->|Amps| PID
  PID --> |Amps| Curr[Solenoid Current]
  Src -->|Bar| PID
It is absolutely critical that the engine torque data is accurate.

Clutch Pressure is calculated using the Clutch’s geometry model. The pressure that comes out of the clutch model is intended to be the minimum pressure required to hold a given input torque, no more. The user can (and should) apply a Clamping Torque Margin on top of the Input Shaft Torque so that the clutch is commanded to hold slightly more torque and apply a slightly higher pressure as a result.

PID Control can be enabled if a Clutch Pressure Sensor is available.

For detailed information on how to setup the clutch model, see the Clutch Model documentation.

Target Source: User Defined

---
title: User Defined Clutch Pressure
---
graph LR;
  Prs(Clutch Pressure) -->|Bar| PID(PID)
  Tgt(Active Clutch Pressure Target) -->|Bar| TgtFnl{Target * Correction \+ Offset} 
  Corr(Active Clutch Pressure Correction) -->|%| TgtFnl
  Offs(Active Clutch Pressure Offset) -->|Bar| TgtFnl
  TgtFnl -->|Bar| Src{<strong>Clutch Pressure Target Source</strong>}
  Src -->|Bar| Sol(Solenoid Translation)
  Sol -->|Amps| PID
  PID --> |Amps| Curr[Solenoid Current]
  Src -->|Bar| PID

In user defined mode, the Clutch Pressure Target simply comes from a Table. Optionally a Correction and Offset can be applied.

PID Control can be enabled if a Clutch Pressure Sensor is available.

Target Source: Line Pressure Controlled

---
title: Line Pressure Controlled Clutch Pressure
---
graph LR;
  LnPrs(Line Pressure) -->|Bar| Src{<strong>Clutch Pressure Target Source</strong>}
  
  PrsMax(Clutch Model: Max Pressure) --> |Bar| Sol(Solenoid Translation)
  Sol --> |Amps| Curr[Solenoid Current]

This mode is a special case for transmissions that simply expose all active clutches to full line pressure when in gear. This is the case for transmissions such as the ZF 8HP.

The Pressure Target and Solenoid Current are completely decoupled in this mode:

  • The clutch solenoid is held at the current that achieves the maximum pressure (as configured in the Clutch Setup) according to it’s Solenoid Translation table.
  • Line Pressure is copied into the Active Clutch Pressure and Clutch # Pressure Target runtimes simply to give them something useful to display.

PID control cannot be used.


Shift Pressures

During a shift, the clutch pressure is fully modelled. No user defined pressure mode is available. The process of controlling a shift with user defined tables would put an enormous tuning burden on the end user that would require a lot of time to configure. The user can still tune a lot about how the shift feels, they just don’t have to worry about the actual pressures involved.

Calculating the pressure during a shift is very similar to when in gear, but the input torque will depend on weather the clutch is oncoming or offgoing, and the phase of the shift.

---
title: Torque Modelled Clutch Pressure
---
graph LR;
  Prs(Clutch Pressure) -->|Bar| PrsPid(Pressure PID)
  Tq(Input Shaft Torque) -->|Nm| ShtTq{Clutch/Phase/Slip Torque Manipulation}
  EngIn(Engine Inertia) -->|kg⋅m²| ShtTq
  EngSpdDt(Engine Speed Delta) -->|RPM/s| ShtTq
  GearSpd(Oncoming/Offgoing Gear Speeds) -->|RPM| ShtTq
  SlpTgt(Slip Target) -->|RPM| ShtTq
  Slip(Clutch Slip) -->|RPM| ShtTq
  ShTime(Shift Time Targets) -->|ms| ShtTq

  SlpTgt(Slip Target) -->|RPM| ShtPid
  Slip(Clutch Slip) -->|RPM| ShtPid
  ShtTq -->|Nm| ShtPid(Shift PID)
  ShtPid -->|Nm| TqFinal(Shift Torque)
  TqFinal -->|Nm| Geo(Clutch Model)
  PrsRate(Clutch Pressure Rate Limits) -->|Bar/s| Src
  Geo -->|Bar| Src{<strong>Clutch Pressure Target</strong>}
  Src -->|Bar| Sol(Solenoid Translation)
  Sol -->|Amps| PrsPid
  PrsPid --> |Amps| Curr[Solenoid Current]
  Src -->|Bar| PrsPid
It is absolutely critical that the engine torque data is accurate.

For detailed information on the shift phases, see the Multi-Clutch Shifting documentation.

For detailed information on how to setup the clutch model, see the Clutch Model documentation.

Copyright © 2026 Emtron Australia Pty Ltd

Clutch Touch Points

One of the most important things to setup on a new installation is the clutch touch points.

The touch point refers to the amount of pressure applied to the clutch before any meaningful torque capacity is applied.

  • Below the touch point, the clutch is fully slipping.
  • Above the touch point, the clutch is starting to hold torque.

The clutch’s torque capacity starts at the touch point. It’s effective pressure is it’s total pressure less it’s touch point. For example:

Touch Point: 1.0 Bar
Torque to Pressure Ratio (simplified): 50 Nm/Bar
Torque Capacity @ 0.5 Bar = 0 Nm
Torque Capacity @ 1.0 Bar = 0 Nm << Touch Point
Torque Capacity @ 1.5 Bar = 25 Nm
Torque Capacity @ 2.0 Bar = 50 Nm
The user MUST find the touch point of each clutch. Failing to do so will result in poor drivability and shifting.

Touch Point Tuning

alt text alt text

To find the touch points, the following condition must be met:

  • Transmission Fluid Temperature: 60-90°C
  • Gear: Neutral
  • Brake: ON
  • Input Shaft Speed: 500-2000 RPM
  • Output Shaft Speed: 0 RPM

Automated Touch Point Learning

You can put the TCM into automated learning mode for a given clutch. For this system to work, the engine idle speed needs to be very stable. On engines where the idle speed is rough (large camshafts etc), it’s likely better to do manually.

Set the clutch to be tested and the TCM will engage all relevant surrounding clutches that would result in a driving gear using the clutch in question. It will then slowly ramp the clutch pressure up and look for a dip in Input Shaft Speed. This process will be repeated 5 times and the result of those tests will be averaged to find the final touch point.

The test will exit if the entry conditions are no longer met, Eg: The user releases the brake.

If the automated test errors out, an erroneous value may be applied to the clutch’s touch point and the test should be run again.

Manual Touch Point Learning

  1. Set the clutch to be tested and the TCM will engage all relevant surrounding clutches that would result in a driving gear using the clutch in question.
  2. Slowly increase the Touch Point Setting and watch for the moment where the clutch starts to drag on the input shaft.
  3. The actual touch point will be a little before this, where any more pressure results in noticeable drag.

alt text alt text

In this example, as Clutch B reaches ~1.85 Bar, the Input Shaft Speed begins to noticeably dip as drag is applied to the input shaft. The actual touch point, before the clutch begins to drag on the input shaft, would be slightly before that at about 1.75 Bar.

Touch Point Correction

A correction scaler can be applied on either a global or per-clutch level. If you find that at varying fluid temperatures the touch points need adjustment, these corrections can address that.

alt text alt text

Here, at 20°C a nominal Touch Point of 1.75 Bar would become 1.57 Bar.

Copyright © 2026 Emtron Australia Pty Ltd

Data Logging

The TCM has a built-in data logger that records selected channels to eMMC memory.

Logging Specs
Max Capacity8GB
Max Channels500
Max Frequency1000 Hz

Data Logging Setup Data Logging Setup

Logging Enable must be ON in Data Logging Setup, and at least one channel must be selected. With Logging Enable OFF the logger is completely inactive and ignores all arming conditions.


Sessions

Each time the logger arms, a new recording session starts. Everything recorded until it disarms belongs to that session.

A single download can contain many sessions (e.g. several on/off cycles across a track day). When the log is downloaded, all sessions are joined together in time order, with a marker at each session boundary so they can still be told apart on a chart.


Channels

A maximum of 500 channels can be selected for logging.

Each channel can be recorded at any of the following frequencies:

  • 1 Hz
  • 2 Hz
  • 5 Hz
  • 10 Hz
  • 25 Hz
  • 50 Hz
  • 100 Hz
  • 250 Hz
  • 500 Hz
  • 1000 Hz

Each frequency option can have a maximum of 255 channels assigned.
For Example: You can choose 255 channels at 100 Hz and 100 Channels at 50Hz, but you cannot choose 355 channels at 100 Hz.

Channels are moved from Available Channels into Logged Channels, where each one is assigned a rate. Default Rate sets the rate newly added channels start at, and the rate of several channels can be changed at once from the right-click menu. The setup screen will not allow either channel limit to be exceeded.

A channel list (channels and rates) can be saved to a file and reloaded with Export and Import. This is useful for keeping a few standard setups (e.g. “track day”, “dyno session”) and switching between them, or between vehicles.

Tip

To maximize memory usage, only log channels as fast as necessary.

  • Slow moving signals like temperature’s only need to be 5-25 Hz
  • Fast moving signals like clutch pressure benefit from being faster (100-250 Hz)

Capacity

The maximum capacity of the logging memory is a little under 8GB. Some space is reserved for config storage and other system functions. The memory capacity used by the Data Logging system can be set from 128MB to 8GB. Downloading a log from a fully filled 8GB capacity will take a very long time (over an hour), so it can be useful to limit the maximum logging capacity to make it more practical.

One-Shot / Circular Mode

Data logging can be used in two distinct modes:

  • One-Shot: Once full, logging stops. No new data is recorded until the memory is erased.
  • Circular: Once full, the oldest data will be overwritten with new data.

Circular mode is extremely useful for set and forget logging. You can enable it and leave it running. In the event that something happens that you want to review, the most recent data will always be available.

Limiting the total capacity in circular mode makes periodic log downloads more manageable.

Example:
A typical “full coverage” logging set might have 400 channels in it. Setting the capacity to 512MB might result in about 1.5 hours of total logging time, which will only take a couple of minutes to download in the event that you want to review it.

Partial Sessions
In circular mode, when the logging capacity is reached and a logging session is still recording, writing wraps back to the start of the memory, overwriting the oldest session data. A session that gets overwritten will loose it’s channel information first, followed by it’s oldest data. If the user has not changed the logging channel selection or frequencies, the partially overwritten data can still be decoded as it’s channel layout will match the newer sessions. If the user changes the channel or frequency layout, the entire old session will be lost.

Note

Switching from Circular back to One-Shot after the log has wrapped will erase the log. Once data has been overwritten in a loop, there is no single continuous recording left to keep.

Estimated Logging Time

Data Logging Setup shows a live Estimated Logging Time for the selected channels and rates. This is the figure to check before a recording session.

As a guide to the scale involved, the table below uses 10 channels at a single rate, assuming a typical mix of channel sizes:

RateData rateFills 1 GB inFills 8 GB in
1 Hz~40 B/s~310 days~6.8 years
2 Hz~80 B/s~155 days~3.4 years
5 Hz~200 B/s~62 days~1.4 years
10 Hz~400 B/s~31 days~249 days
25 Hz~1.0 KB/s~12.4 days~99 days
50 Hz~2.0 KB/s~6.2 days~50 days
100 Hz~4.0 KB/s~3.1 days~25 days
250 Hz~10 KB/s~30 hours~10 days
500 Hz~20 KB/s~15 hours~5 days
1000 Hz~40 KB/s~7.5 hours~2.5 days

Logging 10 channels at every rate at once (100 channels) comes to roughly 76 KB/s, which fills 1 GB in around 4 hours and 8 GB in around 31 hours. Choosing a sensible rate for each channel is the biggest factor in how long a recording lasts.


Arming / Disarming

The logger can be armed in a number of ways:

ConditionDescription
Logging Enable SwitchWhen ON, the logger will run as long as Engine Speed Min is exceeded.
Arming User FunctionThe logger will run when the selected User Function is ON and Engine Speed Min is exceeded.
Info

If Engine Speed Min is greater than zero, it will lockout the logger until it’s exceeded.

If the Logging Enable Switch is OFF AND Arming User Function is OFF, the logger will enable when Engine Speed Min is exceeded. This is the absolute minimum required arming condition.

Arming / Disarming Delays

  • Arming Delay: Delays arming until the arming conditions have been true for the delay time (0-25 seconds).
  • Disarming Delay: Delays disarming until the arming conditions have false for the delay time (0-25 seconds).

Downloading

Logging is paused while a log is downloaded, and resumes automatically afterwards if the logger is still armed. Logging and downloading cannot happen at the same time.

Before downloading, the number of sessions recorded since the last erase and how full the memory is are shown. If nothing has been recorded since the last erase, Download and Erase are unavailable.

Downloads run over Ethernet at roughly 1.5 MB/s. As a guide, a full 1 GB log takes around 12 minutes to download, and a full 8 GB log around an hour and a half.

Once downloaded, a Log Details screen is shown before the log file is saved. Vehicle and Transmission are filled in from the Device Label and Transmission Label settings, and the remaining details (driver, venue, weather, notes, etc.) can be added.

Erasing

Erasing clears the entire log. Logging is paused and resumed automatically around the erase, and confirmation is requested if the log contains data.


Log Markers

When configured, the Log Marker Switch input can be used to mark moments in time in the logged data.

On the rising edge of the switch, the next single batch of log data will be marked. This mark will show up in the plotted data as a dotted blue line.


Power Loss Behavior

The logging system commits data from RAM to permanent memory approximately once per second. The TCM should be wired to be in control of it’s own power supply. This allows it to shutdown the data logging system and ensure that any pending data sitting in RAM is committed before powering itself down.

In the event of an unexpected power loss, any data still in RAM will be lost. This is typically ~1 second worth of data.

Copyright © 2026 Emtron Australia Pty Ltd

Drive Modes

Drive Modes refer to the main transmission states such as Park, Reverse, Neutral, and Drive (Auto, Sport, Manual). Selection of the desired drive mode can be achieved a variety of ways including:

  • CAN bus shifter (preset or custom)
  • Analog shifter position
  • Digital shifter position matrix
  • Switches or buttons
  • Up Shift & Down Shift switches
  • Combinations of the above

Drive Mode Input Priorities

Drive mode input sources have fixed priorities. This allows them to be used in conjunction with one-another with predictable results. Inputs with higher priority will override inputs with lower priority.

PriorityInput Source
1 (Highest)Park Request Switch
2Neutral Request Switch
3Shifter Position (Park / Reverse / Neutral)
4Reverse Request Switch
5Manual Switch
6Sport Switch
7Drive Switch
8Shifter Position (Drive / Sport / Manual)
9Up Shift Switch
10 (Lowest)Down Shift Switch

Example: If the shifter is in the Neutral position, but the Park Request Switch is enabled and in the active (ON) state, the transmission will remain in Park until the Park Request Switch becomes inactive (OFF) because the Park Switch has higher priority than the Shifter Position input.


Manual Override

Manual Override puts the TCM into Manual while Drive or Sport is selected, without the driver having to select Manual. It is applied after the input priorities above, and can come from the Manual Override Switch or from the Up Shift & Down Shift switches.

While the Manual Switch has selected Manual, the Manual Override inputs have no effect.

Manual Override Switch

While the Manual Override Switch is ON, selecting Drive or Sport gives Manual instead. Turning the switch OFF returns the TCM to Drive or Sport.

This works however Drive or Sport is selected (shifter, Drive or Sport Switch, or holding Up Shift from Neutral), and whether the switch is turned ON before or after Drive or Sport is selected.

Example: The Manual Override Switch is already ON when the TCM starts up. Selecting Drive from Neutral goes straight to Manual. Turning the switch OFF then changes to Drive.

Selecting Park, Reverse or Neutral ends the override. If the switch is still ON when Drive or Sport is selected again, the TCM goes back to Manual.

Up / Down Shift Switches

Set Up / Down Shift Switch Behaviour (Automatic Shift > Auto Shift Setup) to Manual Override to have an Up Shift or Down Shift press in Drive or Sport change to Manual. The press also requests the shift.

The TCM returns to Drive or Sport when any of the following happens:

  • Manual Override Timeout: No Up Shift or Down Shift press has been made for this time. Each press restarts the timer. Set to 0 to stay in Manual until cancelled.
  • The Manual Switch is pressed.
  • Park, Reverse or Neutral is selected.

If the Manual Override Switch is also ON, the TCM stays in Manual until that switch is turned OFF.

Cancelling with the Manual Switch

Pressing the Manual Switch only cancels the override when the switch is connected to a TCM input. It doesn’t work when the Manual Switch comes from CAN or a script.

Copyright © 2026 Emtron Australia Pty Ltd

Engine Torque

Important

Accurate engine torque modelling is critical for transmission performance.

Engine Inertia

Engine inertia is used to calculate the clutch torque required to sync the engine speed during a shift. It also informs the rev-match torque calculation.

Vehicle Setup Vehicle Setup

Engine / configurationTypical Inertia (kg·m²)
Small 4-cyl light flywheel0.12 – 0.20
Typical 4-cyl production0.18 – 0.28
Performance 6-cyl (light flywheel)0.20 – 0.32
Heavier 6-cyl / street flywheel0.28 – 0.40
Big heavy flywheel / truck0.40 – 0.70+

Copyright © 2026 Emtron Australia Pty Ltd

Launch Control

Warning

Launch Control is a motorsport orientated function can lead to transmission and/or other driveline component damage if not used correctly.

Launch Control Launch Control

Overview

Launch Control can be configured in a variety of way depending on the desired control outcome.

Launch control can be configured to:

  • Control clutch torque and clutch torque rate.
  • Generate an Engine Speed Target to be sent to the engine.
  • Generate a torque limit to to be sent to the engine.

There are 5 main states/phases the Launch system can be in:

Disarmed → Armed → Static → Preload (optional) → Moving
StateMeaning
DisarmedOff, or arming conditions not currently met.
ArmedArming conditions met, waiting for launch lockouts to clear.
StaticCar stationary, launch active. Clutch is typically held open/slipping to a torque target.
Preload(Optional) Clutch is pre-loaded to a torque target for a fixed dwell time before the final dump.
MovingClutch torque is actively controlled through the launch. Ends when a disarm condition is met.

Set Enable to ON in Launch Control Setup to turn Launch Control on. While disabled, it has no effect on clutch pressure, engine speed target or torque limit.


Clutch Control

The primary function of Launch Control is to override the clutch pressure by generating a clutch torque request.

Clutch Control is enabled in Launch Control Setup.

Launch Control never engages a clutch that isn’t already part of the currently selected gear. It can only override the pressure target of a clutch the TCM has already activated for that gear. It cannot bring in an extra clutch on its own.

Launch Control Clutch Select

Care should be taken to ensure the Launch Control Clutch Select table is set up correctly. In most case the table will be identical to the Takeup Clutch Select table.

Important

The Clutch Select table’s X axis MUST be Clutch #. The table is re-evaluated each time the system re-arms into the Static phase. This allows the table’s Y axis to be another channel such as Gear.

When Clutch Control is disabled, Launch Control does not touch clutch pressure at all — only the engine RPM target / torque limit outputs (if enabled) are active.


Arming & Disarming

Arming

The system arms when every configured arming condition is simultaneously true. Each condition is independently optional (Eg: 0 = OFF). Enable only the conditions relevant to your application.

At least one condition must be configured, or the system will report “Disarmed - No Arming Config” and never arm.
ConditionEnable viaThreshold
Launch SwitchLaunch Arming Switch = ONLaunch Arming Switch = ON
Brake SwitchBrake Switch Arming = ONBrake Switch 1 = ON
Brake PressureArming Brake Pressure Minimum > 0Brake Pressure Front > Threshold
Transbrake SwitchTransbrake Switch Arming = ONTransbrake Switch= ON
User FunctionArming User Function ≠ OffUser Function # Status = ON
Static → Moving

Releasing any configured arming condition while in Static or Preload is what triggers the transition into Preload/Moving.

Lockouts (Armed → Static)

Once armed, the system waits for all configured lockouts to clear before entering the Static phase.

At least one lockout must be configured, or the system will report “Lockout - No Lockout Config” and will not enter Static.
LockoutEnable viaCondition to clear
GearAlways activeGear ≥ 1st
Clutch By WireAlways activeCBW must not be active
Pedal/throttle positionStatic Lockout Pedal/Throttle Position > 0Pedal Position* ≥ Threshold
Output Shaft SpeedStatic Lockout Output Shaft Speed > 0Output Shaft Speed < Threshold
Drive SpeedStatic Lockout Drive Speed > 0Drive Speed < Threshold
Engine speedStatic Lockout Engine Speed > 0Engine Speed > Threshold
User FunctionStatic Lockout User Function ≠ OffUser Function # Status = ON

* If Pedal Position input is not configured, Throttle Position is used.

Disarming (Static / Preload / Moving → Disarmed)

While active, the system aborts back to Disarmed immediately if:

  • The TCM begins a shift.
  • The gear selector leaves Drive/Manual (enters Park/Neutral/Reverse)
  • Any one of the following (each optional) stays true for longer than the Disarming Time (ms):
Disarm conditionEnable viaTrips when
Pedal/Throttle PositionDisarming Pedal/Throttle Position > 0Pedal Position* < Threshold
Output Shaft SpeedDisarming Output Shaft Speed > 0Output Shaft Speed > Threshold
Drive SpeedDisarming Drive Speed > 0Drive Speed > Threshold
Engine SpeedDisarming Engine Speed > 0Engine Speed < Threshold
Clutch SlipDisarming Clutch Slip > -1000Clutch Slip < Threshold (clutch locked)

* If Pedal Position input is not configured, Throttle Position is used.

If no disarming condition is configured, the system disarms immediately (nothing is holding it active).

Active Launch Phases

Static

In the Static phase the car is stationary with the engine is held at the desired launch RPM (this is to be controlled by the engine ECU). The TCM can generate a torque limit and/or Engine Speed Target to be issued to the engine via CAN.

Static Clutch Torque: Typically the clutch is either fully open or a small amount of torque is applied for the engine to load up against.

Caution

Applying clutch torque during static phase will lead to very high clutch temperatures and should be treated with caution.

Preload (optional)

Enabled when Preload Stage = ON in Launch Control Setup.

Preload is a dwell phase between Static and Moving where the clutch can be held at a preload torque target for a calibrated time, before the final dump.

It can be triggered in three ways:

TriggerEnable viaBehaviour
AutoPreload Stage = ON, Preload User Enable = OFF, Preload Switch = OFFEntered automatically the instant the arming condition is released.
Preload SwitchPreload Switch = ONEntered as soon as Launch Preload Switch = ON. Can be requested before the arming condition is released, to preload ahead of the Moving phase.
Preload User EnablePreload User Enable ≠ OFFEntered as soon as User Function # Status = ON. Can be requested before the arming condition is released, to preload ahead of the Moving phase.
Preload → Moving
  • Preload will exit to Moving when Launch Control Preload Time table value expires, or Max Preload Time expires.
  • If Preload was entered manually (User Function or Preload Switch) rather than automatically, releasing the arming condition while still in Preload will cut it short and transition immediately to Moving.

Preload Clutch Torque: Typically, a small amount of torque is applied for the engine to load up against. The clutch torque rate is relatively slow so the engine doesn’t suddenly get dragged down.

Example:

  • The driver arms launch with the Launch Switch and enters Static.
  • A generous but not excessive time is entered into the Preload Time table (and Max Preload Time).
  • Moments before launching the Preload Switch is pressed and the system enters Preload.
  • Clutch pressure is ramped up & engine torque increases.
  • Before the Launch Preload Time expires, the Launch Switch is released at the exact moment the driver wishes to launch.
  • The system then enters the Moving phase and ramps the clutch up to full lock torque.

In this scenario, the clutch can be loaded before launching, clutch temperature is minimised, and the driver is still in full control of the moment of launch.

Moving

During the moving phase, clutch torque is ramped up to full lock torque at a controlled rate.

Moving Clutch Torque: The final clutch torque should result in the clutch being fully locked. In a properly modelled system, the clutch will lock when it’s applied torque meets or exceeds the Input Shaft Torque. In a multi-clutch transmission with gear clutch load factors other than 1.0, this may vary and should be considered.

Moving Clutch Torque Rate: Clutch torque should be ramped in fast enough to minimise slip and engine flaring, while not dragging the engine speed down.

Tip

Most of the fine tuning time will be spent dialing in a suitable Moving Clutch Torque Rate.


Per-Phase Calibration Tables

Each of Static / Preload / Moving phases has its own set of tables. Torque Limits are enabled per-phase.

OutputEnable via (per phase)Table(s)
Engine Speed TargetEngine Speed Target Tables = ON (applies to all 3 phases)Static/Preload/Moving Engine Speed Target
Engine Torque LimitStatic/Preload/Moving Torque Limit = ONStatic/Preload/Moving Torque Limit
Clutch TorqueClutch Control = ON (applies to all 3 phases)Static/Preload/Moving Clutch Torque
Clutch Torque RateClutch Control = ON (applies to all 3 phases)Static/Preload/Moving Clutch Torque Rate

A phase’s torque limit is only applied while that phase is active. It’s released as soon as Launch Control moves to a phase without one, so a limit is never carried over from an earlier phase.


Runtime Channels

The following runtime channels are generated by the Launch control system:

  • Launch Control Status (see Launch Control Status enumeration)
  • Launch Control Engine Speed Target
  • Launch Control Torque Limit
  • Launch Control Clutch Torque
  • Launch Control Static Time
  • Launch Control Preload Time
  • Launch Control Moving Time

Launch Control Status reports the current phase, or which arming condition or lockout is being waited on, which makes it the first channel to check when Launch Control won’t activate. The Static, Preload and Moving Time channels record how long each phase of the most recent launch took, for review after the run.


Interaction with Other Systems

Caution

Care should be taken to ensure other system lockouts are configured, in particular: Takeup.

  • Transbrake: Transbrake clutches are unconditionally part of the active clutch set while held; Launch Control can overlay pressure on them like any other active clutch but never adds to the set itself.
  • Takeup: If Takeup’s own Launch Control Lockout option is set, Takeup control locks itself out whenever Launch Control is active (Static/Preload/Moving), so the two won’t fight over clutch pressure.
  • Clutch-By-Wire (CBW): An active CBW request blocks Launch Control from ever reaching Static (see lockout table above).

Copyright © 2026 Emtron Australia Pty Ltd

Multi-Clutch Shifting

Shifting on multi-clutch transmissions happens over 4 phase:

  1. Fill
  2. Torque Transfer
  3. Inertial Sync
  4. Lock

Shift Pressure Phases Shift Pressure Phases

A simplified representation of the clutch pressures during the 4 shift phases.

The TCM will calculate all required clutch pressures based on supplied and available engine torque. As long as the clutch geometry is configured reasonably and the torque data from the engine is accurate, there’s very little tuning required.

It is absolutely critical that the engine torque data is accurate.

For detailed information on how the TCM converts torque to clutch pressure, see this section on Shift Pressures.

For detailed information on how to setup the clutch model, see the Clutch Model documentation.


Line Pressure

Caution

DO NOT try to tune the shifting on a multi-clutch transmission by manipulating the Line Pressure.

Line Pressure should be sufficient to supply all the pressure the clutches need during a shift, but the clutches should control their own pressures.

Clutch pressure can be considered a minimum value for the Line Pressure Target.

Some transmissions will require the Line Pressure to be set very high for the duration of a shift, giving maximum flow control to the clutch solenoids.

Depending on the transmission in question, setting the Line Pressure to “Downstream Pressure Offset” mode can simplify this process.


Fill Phase

Any clutch that is disengaged will have it’s pressure fully bled off. The job of the fill phase is simply to ensure that the oncoming clutch pressure chamber is filled with fluid so that it can operate as fast as possible once the shift actually starts.

Generally, the clutch pressure at the end of the Fill phase will be the clutch’s touch point pressure. The Fill phase is not intended to apply any meaningful clutch pressure.

Unlike the rest of the shift phases, the fill phase doesn’t use torque, it is purely pressure based.

The Fill phase is broken into 3 sub phases:

  1. Pre-Fill
  2. Fast Fill
  3. Stable Fill

The amount of time spent in each phase is limited by the Total Fill Time table and the phase order.

Stable Fill time = Total Fill Time - (Pre-fill + Fast Fill)

Example:

  • Pre-fill = 20ms
  • Fast fill = 40ms
  • Total fill time = 100ms

Stable fill = 100 - (20 + 40) = 40ms

Setting a fill phase time to zero will result in that phase being skipped. It’s perfectly valid in many cases to skip the Pre-fill or the Fast Fill phase. It’s also common for high torque, high speed shifts to consist of only the Fast-Fill phase. In this case, the Pre-fill Time would be 0 and the Fast Fill Time would take up the entire Total Fill Time.

Regardless of the Pre-fill and Fast Fill times, the Fill phase will always exit once the Total Fill Time has elapsed.

Pre-Fill

The Pre-fill phase simply opens the clutch pressure solenoid at the very start of the shift. The specified pressure is absolute and disregards the touch point.

Pre-fill pressure does not usually exceed the touch point pressure.

Typical Pressure: 0.5 - 1.5 Bar Typical Time: 0-100ms

Setting the Pre-Fill Time to 0 will skip the Pre-fill phase.

Fast Fill

alt text alt text

During Fast Fill, the clutch pressure solenoid is driven very high for a short period. The intention is to allow a fast in-rush of fluid to fill the clutch chamber as fast as possible.

Caution

A correctly configured combination of Fast Fill Pressure and Fast Fill Time should result in the actual pressure ramping up very quickly to, but never in excess of the touch point.

Typical Pressure: 3.0 - 5.0 Bar Typical Time: 20-50ms

Stable Fill

After the Pre-fill and Fast Fill phases are complete, any remaining Fill Time will be spent in the Stable Fill phase.

The pressure specified during Stable Fill is an offset of the clutch’s touch point pressure.

Example:

  • Touch Point = 1.3 Bar.
  • Stable Fill Pressure Offset = -0.1 Bar.

Stable Fill Pressure = 1.3 + -0.1 = 1.2 Bar.

Typical Pressure Offset: 0.0 Bar (Settle on the Touch Point)


Torque Transfer Phase

The Torque transfer phase begins the process of transferring supplied engine torque over to the oncoming clutch. In most cases, the oncoming clutch will still be fully slipping by the end of the phase, but it will be holding most of if not all the torque.

Up Shift & Overrun Down Shift

Torque is transferred to the oncoming clutch while the offgoing clutch is mostly released. By the end of the phase, the oncoming clutch will be carrying all the torque, but it will still be fully slipping at the offgoing gear speed. It’s the Inertial Sync phase’s job to reduce the slip to zero.

Up Shift Transfer Torque Up Shift Transfer Torque

Note the engine speed is still matching Clutch A (offgoing) at the end of the transfer phase.

Driven Down Shift

During a driven down shift, the offgoing clutch’s torque capacity is reduced to deliberately introduce a controlled amount of slip that will bring the Input Shaft Speed up to the ongoing gear speed. As the clutch slip approaches zero, the oncoming clutch is ramped in to catch the input load, while the offgoing clutch is tapered out.

By the end of the Transfer phase the oncoming clutch slip should be near zero.

Driven Down Shift Driven Down Shift

Driven Down Shift with ideal speed synchronization.

Down Shift Rev Match

During a rev match, both the offgoing and oncoming clutch are reduced to zero torque capacity. They will both settle on their touch points, allowing the engine to freely rev.

As the oncoming slip approaches zero, the oncoming clutch is ramped in to catch the input torque load.

Fast Fill During Transfer

When enabled, the Fast fill (and stable fill) phases are merged into the Torque Transfer phase. Both the transfer pressure and the fast/stable fill pressure are calculated at once. The highest of two is applied to the clutch.

This results in shorter shift times and faster pressure rates as the transfer pressure will simply take over as soon as it exceeds the fill pressure.

During fast shifts, the drop back to stable fill pressure can be effectively skipped.

Pre-fill always happens first if it’s time is non-zero.

Inertial Sync Phase

During this phase, clutch slip is reduced to near zero and the Input Shaft Speed is synced to the oncoming gear speed. Additional torque capacity is applied to the oncoming clutch to achieve this.

The engine’s inertia and torque is considered when calculating how much torque to apply to control the slip.

At high input torque, prolonged sync times will result in increased clutch heat and wear.

The main “Gear” runtime will change to the next gear at the start of the Inertial Sync phase.

Inertial Phase Torque Inertial Phase Torque

The Engine Speed is now matching Clutch B (oncoming) at the end of the Inertial Sync phase.

Torque Reductions

Any torque reduction that is enabled by the user is applied now to aid in syncing the Input Shaft Speed. Using torque reductions mean less clutch capacity is needed to achieve synchronization.

Up Shift Torque Limit Up Shift Torque Limit

Up shift torque limit gets applied at the start of the Inertial Sync phase and is removed as slip approaches zero.

Tip

If the engine continues to limit torque after the clutch is synced and locked, the shift will feel harsh.

There are 3 tables that control the up shift torque limit:

  • Up Shift Torque Limit Enable: determines if a torque limit is allowed or not.
  • Up Shift Torque Limit: Absolute explicit torque limit value.
  • Up Shift Torque Reduction: Torque reduction as a percentage of Engine Torque (Available).

The lowest torque limit output from the tables will be used.

For Example:

Engine Torque (Available): 800 Nm
Up Shift Torque Limit Enable: ON
Up Shift Torque Limit: 500 Nm
Up Shift Torque Reduction: 40%
Up Shift Torque Reduction = 800 - (40% of 800) = 800 - 320 = 480 Nm.

Because 480 Nm is less than the 500 Nm absolute limit, 480 Nm will be used.


Lock Phase

The Lock phase is used to eliminate any remaining clutch slip. A user definable amount of additional torque capacity is applied to the clutch during the lock phase.


Shift Tuning

The torque modelled approach to shifting dramatically reduces the tuning complexity of gear shifts for the end user, provided the input torque is accurate and the Clutch Configuration is accurate.

The goal when tuning a shift is simply to achieve the slip target throughout the shift. If the slip is on target then the only thing left to do is dial in the feel by manipulating the shift target times.

The runtimes to watch are Oncoming Clutch Slip Target and Oncoming Clutch Slip. Ideally they should lay over each other.

If a shift feels harsh, check the slip curve. If the slip is on target, extend the shift times before looking for a way to alter the clutch pressure or clutch torque capacity.

Tuning Considerations:

Ideal Shift Slip Example Ideal Shift Slip Example

Ideal clutch slip curve during an upshift.

Shift Runtimes

When looking to see what’s happening during a shift there are several important runtime channels to watch:

  • Shift Phase: Shows which phase the shift is currently in.
  • Clutch Input Torque: This is the torque that all the clutch pressure calculations use as their input reference. Most of the time this is the same as Engine Torque (Supplied).
  • Clutch # Input Torque: Each clutch may have a different input torque depending on it’s current Gear Load Factor Table value. Clutch # Input Torque = Clutch Input Torque x Clutch # Gear Load Factor
  • Oncoming Clutch Torque Split: During a shift, this is the calculated torque that the oncoming clutch is required to hold. The value seen here is before any closed loop intervention. It’s the raw output of the shift modelling and inertia factors.
  • Offgoing Clutch Torque Split: During a shift, this is the calculated torque that the offgoing clutch is required to hold. The value seen here is before any closed loop intervention. It’s the raw output of the shift modelling and inertia factors.
  • Oncoming Clutch Slip Target: How much slip the oncoming clutch should have for an ideal shift, to meet the user’s shift time targets.
  • Oncoming Clutch Slip: The actual slip of the oncoming clutch. During ideal shift conditions, this will usually lay over the top of the target value. It’s very possible and expected that under some conditions this will not be the case, for example: During a rev-matched downshift where the synchronization of the engine speed is not controlled by the TCM.
  • Shift P Gain: Shift closed loop control proportional output.
  • Shift I Gain: Shift closed loop control integral output.
  • Shift D Gain: Shift closed loop control derivative output.
  • Clutch # Torque Capacity: The actual calculated torque capacity of the clutch derived from it’s currently applied pressure. This value is after all closed loop control and rate limiting has been applied.

Touch Points

Important

It is critical that the Clutch Touch Points are setup at the outset. Poorly configured touch points will always lead to bad shifting and drivability.

For detailed information on setting touch points see here.


Clutch Capacity Learning

The Clutches Geometry Model and engine inertia value will control the majority of the clutch torque applied during a shift. During a shift, the closed loop PID algorithm will make adjustments to the final clutch torque to try and keep the slip curve on target. After a shift, as long as the conditions are met, the Clutch Capacity Adaption system will look at the previous shift’s closed loop output and make small adjustments to the relevant clutch’s Learned Capacity Scaler.

Copyright © 2026 Emtron Australia Pty Ltd

Shift Fork Control

This guide covers setup and calibration of the hydraulically actuated Shift Forks used to control gear selection in Dual Clutch Transmissions (DCT).

Shift Fork Log Shift Fork Log


Concepts

Axes

A DCT has two input shafts (“axes”), each carrying its own clutch. While one axis is transmitting drive, the other is free to pre-select the next gear so that the shift itself is just a clutch hand-off, with no torque interruption. Every gear (including Reverse) belongs to one of these two axes:

ClutchAxisTypical Gears
AAEven gears
BBOdd gears

The active axis is whichever axis currently has a gear engaged and is transmitting drive.
The inactive axis is free to move its fork(s) to pre-select the next gear.

Clutch Axes

The TCM will always assume that the clutch and axis are a matched pair:

  • Clutch A is on Axis A
  • Clutch B is on Axis B

Shift Forks

A shift fork is a physical selector that can sit in one of three positions (“slots”):

SlotMeaning
LowEngages the fork’s “Low” gear
CentreNeutral (no gear engaged on that fork)
HighEngages the fork’s “High” gear

Each fork belongs to one axis (or, for a shared Reverse fork, both axes) and is responsible for up to two gears, one on its Low side and one on its High side.
Up to 8 forks and 8 shift solenoids are supported.

While driving:

  • The active axis must already have its current gear’s fork engaged (all other forks on that axis in Neutral).
  • The inactive axis may have, at most, the pre-selected next gear’s fork engaged (all others in Neutral).

Only one fork is ever moved at a time. A fork on the active axis is never moved unless it’s explicitly required (e.g. a shift out of Neutral/Park), and a fork that needs to return to Neutral is always preferred over one that’s about to engage a new gear, so the way is cleared before a new gear goes in.

Fork Position Sensing

Each fork has a position sensor that is scaled and calibrated to report the fork’s measured position in millimeters. Some forks also have a secondary tracking sensor used purely for cross-checking / diagnostics.

Fork Position 1-8 inputs are configured in Input Setup.

The fork’s calibrated Low / Centre / High positions and tolerance bands are what translate this raw position into a slot (Low / Centre / High / Moving).


Fork Management

At all times the shift fork system is actively performing the following tasks:

  • Each fork’s target is set:
    • Active-axis forks target the current gear.
    • Inactive-axis forks target the pre-selected gear.
    • Everything else targets Neutral.
  • Each fork’s own position/slot state is updated.
  • Axis “binding” is detected if more than one fork on an axis reports being in gear at once.
  • An axis fault is raised if any fork on that axis is in a position error state.

Fork Movement

  • If a fork is currently moving, its movement is monitored until complete.
  • Otherwise, the next fork that needs to move is found (inactive axis first, unless an active-axis move is explicitly allowed) and its movement begins.
  • The physical shift solenoids are driven to move the current fork, or to hold the idle/default solenoid pattern when nothing is moving.
  • If Axis Pressure Control solenoids are in use, their pressure is modulated to control fork movement speed.
  • The moving fork is driven either toward its target position (default), or through a series of engagement phases when Engagement Phase Control is enabled.

Shift Procedure

  1. The currently engaged gear and its axis are marked as active.
  2. The Preselection system predicts the next shift direction (up or down) and selects the next gear on the inactive axis.
  3. On a shift request, the next gear’s fork is determined and pre-selected (if it’s not already) on the inactive axis.
  4. Once the pre-selected gear’s axis is ready (fork in target slot, no axis error), the clutch hand-off for the shift can proceed.
  5. After the shift completes, the new gear’s axis is marked as active, the offgoing axis is marked inactive.
  6. The Preselection system resumes prediction of the next shift on the newly inactive axis.

Configuration & Calibration

Shift Fork Setup (Global)

These apply to whichever fork is currently moving, regardless of which fork it is.

SettingDescription
Shift Fork Stable Velocity (+/-)Fork velocity threshold (± mm/s). Once a fork is inside its target slot’s tolerance band and below this velocity, its “stable” timer starts. Set to 0 to disable the velocity check (stability then depends only on being in-slot)
Shift Fork Stable TimeTime (ms) the fork must remain in-slot and stable before the move is considered complete
Engagement Phase ControlSelects how a moving fork is driven. OFF = the fork is driven toward its target position. ON = the fork is driven through a series of engagement phases, see Engagement Phase Control
Fork Move Idle TargetIdle speed requested from the ECU while a gear is engaged from Neutral or Park at a standstill. Engagement Phase Control only, see Standstill Engagement Aids

Shift Fork Setup (Per-Fork)

Each fork (numbered 1–8) is independent and must be configured individually. Below, “#” stands for the fork number, eg: “Shift Fork 3 Axis”.

SettingDescription
Shift Fork # AxisParent axis: Disabled / Axis A / Axis B / Both (shared, e.g. Reverse)
Shift Fork # LabelFree-text label for the fork (shown in the tuning software UI)
Shift Fork # Position L GearGear engaged when the fork is in its Low slot. OFF = slot unused.
Shift Fork # Position H GearGear engaged when the fork is in its High slot. OFF = slot unused.
Shift Fork # Position LTarget fork position for the Low slot (mm)
Shift Fork # CentreTarget fork position for the Centre (Neutral) slot (mm)
Shift Fork # Position HTarget fork position for the High slot (mm)
Shift Fork # Position L Tolerance (+/-)Position tolerance (± band) around the Low slot (mm)
Shift Fork # Centre Tolerance (+/-)Position tolerance (± band) around the Centre slot (mm)
Shift Fork # Position H Tolerance (+/-)Position tolerance (± band) around the High slot (mm)
Shift Fork # Error DetectionEnables position error detection; bit 1 auto-clears the error once the fork returns to its target slot
Shift Fork # Error Auto ClearAuto-clears the error once the fork returns to its target slot
Shift Fork # Error DelayTime the fork may be out of its target slot before a position fault is raised (0–25.0 s)
Shift Fork # Retry LimitNumber of retries allowed after the first attempt before the fork raises a position fault. 0 = a single attempt only. See Per-Fork Position Error and Stalls and Retries
Shift Fork # TestBench/service test override: Off / Force Low, / Force Centre, / Force High. Only takes effect while the requested gear is Neutral or Park

Notes:

  • The Low and High slot positions do not need to be numerically low/high — the firmware automatically detects whether the fork’s travel is inverted (i.e. the Low position is a larger number than Centre) and corrects the shift-direction logic accordingly.
  • Whichever gear ends up on the Low slot vs. High slot is purely a function of fork travel direction — set the Low/High gear assignments to match the physical gear each end of travel actually engages.
  • A fork does not need both slots populated — a single-sided fork (e.g. Reverse-only) should leave the unused Low/High gear assignment at 0.

Shift Solenoid Selection

Which solenoids are energised to move a fork in a direction is controlled by the solenoid select tables.

Shift Solenoid Select Shift Solenoid Select

TableDescription
Shift Fork # Positive Solenoid SelectSelects which shift solenoid(s) (1–8) are energised to move the fork in the positive position direction (+ mm)
Shift Fork # Negative Solenoid SelectSelects which shift solenoid(s) (1–8) are energised to to move the fork in the negative position direction (- mm)
Shift Fork Idle Solenoid SelectShift solenoid(s) held on when no fork is currently moving (idle hold pattern)
Default Shift Solenoid SelectShift solenoid(s) always added to the active pattern in addition to the moving/idle pattern, when the default overlay is enabled
Default Shift Solenoid EnableEnables/disables the default solenoid overlay above (non-zero = enabled)
Important

The solenoid select table’s X-axes must be Shift Solenoid #. Multiple solenoids can be selected at once.

Per-Fork Position Sensor Calibration

Shift Fork n Position is reported in mm. Each fork has a position sensor that can be calibrated in Input Config > Transmission Inputs > Shift Fork Positions.
It is critical that these position sensor inputs are assigned and calibrated correctly.

Fork Movement Pressure Control

While a fork is moving, its physical movement can optionally be driven by a closed-loop position PID acting on hydraulic pressure (rather than a fixed pressure). The need for pressure control will depend on the transmission design.
When enabled, the Axis Pressure solenoids are controlled to achieve the desired pressure.

With Engagement Phase Control ON, the PID is not used. The pressure is instead set by the force of the current engagement phase, as a percentage of the maximum fork movement pressure (see Engagement Phase Control).

Setting / TableDescription
Axis Pressure OverrideEnables the axis pressure override: while set, the axis pressure of whichever axis is physically moving is driven by the fork-movement PID (or by Engagement Phase Control) instead of the normal active/inactive axis pressure targets
Fork Movement Pressure BaseBase (feed-forward) pressure added ahead of the PID output (Bar). Engagement Phase Control OFF only
Fork Movement Pressure Proportional GainPID proportional gain for fork movement pressure control. Engagement Phase Control OFF only
Fork Movement Pressure Integral GainPID integral gain for fork movement pressure control. Engagement Phase Control OFF only
Fork Movement Pressure Derivative GainPID derivative gain for fork movement pressure control. Engagement Phase Control OFF only
Axis Pressure Override Integral Min / MaxPID integral clamp (Bar). Engagement Phase Control OFF only
Axis Pressure Override Min / MaxOutput pressure clamp (final PID output is constrained to this range) (Bar)
Fork Movement Pressure MaxMaximum fork movement pressure (Bar). The lower of this table and Axis Pressure Override Max is used. 0 = use Axis Pressure Override Max. With Engagement Phase Control ON, this is the pressure that equals 100% fork force

Fork Movement Current Control

Transmissions that set fork force through the shift solenoid current rather than axis pressure (e.g. Getrag GS7) use Variable Force shift solenoids. While a solenoid is energised, its current is taken from its Shift Solenoid # Current table. The table’s axis can be chosen to suit the fork movement mode:

Table AxisBehaviour
Active Shift Fork Position ErrorHigh current far from the target slot, tapering as the fork arrives. Suits position control (Engagement Phase Control OFF).
Shift Fork Force DemandCurrent follows the force requested for the fork (0 - 100%), so the table becomes a force-to-current map. Required for Engagement Phase Control.

Leave Axis Pressure Override OFF on these transmissions.

Torque Limiting During Fork Movement

Active Axis Fork Movement Torque Limit can be applied applied while a fork on the currently active axis is moving (e.g. Shifts out of Neutral/Park, where the axis being engaged is also the “active” axis).


Engagement Phase Control

Engagement Phase Control is an alternative way of driving a moving fork, built around how a synchroniser engages a gear. Instead of simply pushing the fork toward its target position, the TCM steps the fork through a series of phases (approach, synchronise, engage and settle), each with its own force. If the fork stalls, it’s backed off, rested and tried again with a little more force, rather than being held hard against the synchroniser.

This makes the biggest difference when engaging a gear from Neutral or Park at a standstill, where drag from the open clutch keeps the shaft spinning. A fork that is just pushed harder tends to sit on the synchroniser, using it as a brake against the clutch drag. Engagement Phase Control detects this, backs off and retries, and limits how hard and how long the synchroniser is worked.

It works with both pressure-actuated forks (e.g. Nissan GR6) and forks whose force is set by the shift solenoid current (e.g. Getrag GS7).

Enabling Engagement Phase Control

Set Engagement Phase Control to ON in Shift Fork Setup. The Shift Fork Engagement Phase Control folder will then appear, containing the settings and tables described below.

All fork forces are set as a percentage (0 - 100%) of the fork’s maximum force. How that percentage is turned into an output depends on how the forks are actuated:

Fork ActuationSetup
Axis Pressure (e.g. Nissan GR6)Set Axis Pressure Override to ON. 100% force is the lower of Fork Movement Pressure Max and Axis Pressure Override Max. Axis Pressure Override Min sets the minimum pressure while a fork is moving. The fork movement PID tables are not used.
Shift Solenoid Current (e.g. Getrag GS7)Leave Axis Pressure Override OFF. Set the Solenoid Type of the shift solenoids that move the forks to Variable Force, and set the axis of each of their Shift Solenoid # Current tables to Shift Fork Force Demand. The table then converts the requested force (%) into solenoid current.
Axis Pressure Example
  • Fork Movement Pressure Max = 18.0 Bar
  • Current phase force = 40%
  • Fork movement pressure = 40% of 18.0 Bar = 7.2 Bar

Fork Travel and Sync Slip

Two channels are central to how Engagement Phase Control works, and to tuning it:

  • Shift Fork Travel is the moving fork’s progress, from 0% at the slot it’s leaving to 100% at its target slot. Where the synchroniser sits within that travel is set by Sync Zone Start and Sync Zone End. The sync zone is shared by all forks in both directions, so it must cover every fork’s synchroniser.
  • Shift Fork Sync Slip is the speed difference the synchroniser has to remove before the gear can engage: the speed of the target axis clutch compared to the speed the target gear would turn it at. The shaft is considered synchronised once this falls below Synchro Slip Complete Threshold. Correct clutch speed and output shaft speed readings are required.

Move Phases

Each fork move steps through the following phases, reported by Shift Fork Move Phase:

PhaseDescription
IdleNo fork is moving.
ApproachThe fork leaves its slot at Shift Fork Approach Force and travels toward the synchroniser, until it reaches Sync Zone Start.
SyncThe synchroniser is loaded. Force starts at Shift Fork Sync Force Start and rises at Sync Force Ramp Rate up to the force ceiling for this attempt (Sync Force Max on the first attempt). Sync ends once the blocker ring releases and the fork passes Sync Zone End.
EngageThe blocker ring has released and the fork rides the dog teeth into the slot. Once the shaft is synchronised, the force changes to Shift Fork Engage Force. Until then, the force the ring released at is held, as the ring lets go slightly before the shaft is fully synchronised. If the fork is pushed back onto the ring, it returns to Sync.
SettleThe fork has reached its target slot and the shift solenoids are off. The move is complete once the fork has been stable in the slot for Shift Fork Stable Time (see Shift Fork Stable Velocity). If the fork bounces out of the slot, the solenoids stay off until it has come to rest, so a fork overshooting Neutral isn’t pushed back and forth between the two directions. If it comes to rest outside the slot, it’s driven back in.
Back OffAfter a stall, the fork is pulled back toward the slot it came from by Back-Off Distance at Back-Off Force, for no longer than Back-Off Time. The fork is never pulled back past the slot it came from.
RestThe shift solenoids are turned off for Retry Rest Time, allowing the synchroniser to re-centre before the next attempt.
ErrorAll attempts have been used. The fork enters its position error state, see Per-Fork Position Error.

A fork returning to Neutral has no synchroniser to work against, so it goes straight from Approach to Engage.

Stalls and Retries

When a fork stops making progress toward its target, the TCM records why in Shift Fork Stall Type, backs the fork off, rests, then tries again.

Stall TypePhaseCause
None-No stall has occurred during this move.
MechanicalApproachThe fork stopped making progress for Approach Stall Time, or didn’t reach Sync Zone Start within Approach Timeout. The stall timer only starts once the fork has begun to move.
Blocker RingSyncThe blocker ring didn’t release within Sync Timeout. Or, the shaft was synchronised but the fork didn’t move for Synchro Settled Timeout with the force at its ceiling (clutch drag is holding the ring in place).
EquilibriumSyncWith the force at its ceiling, Shift Fork Sync Slip didn’t fall by at least Synchro Slip Progress Validation within each Synchro Slip Progress Window. The synchroniser can’t overcome the clutch drag, so the attempt is abandoned early rather than using the synchroniser as a brake for the full Sync Timeout.
Dog TeethEngageThe fork sat, or bounced, on the dog teeth without making progress for Dog Engagement Stall Time.

Retries work as follows:

  • Each retry raises the Sync force ceiling by Sync Retry Force Step (up to 100%). The first attempt can be gentle, with force only increasing when the synchroniser needs it.
  • Each fork is allowed its Shift Fork # Retry Limit retries after the first attempt. Once they have all failed, the fork enters its position error state.
  • The fork’s Error Delay still limits the total time of the whole move, including every attempt.
  • After a synchroniser stall (Blocker Ring or Equilibrium), the rest ends early as soon as the shaft is synchronised.
  • After a Dog Teeth stall, the rest ends early as soon as the shaft has turned relative to the gear, giving the teeth a new position to engage.

Shift Fork Crash Count counts (per fork, since power up) engagements where the dog teeth went in while the shaft was still slipping above Synchro Slip Complete Threshold, i.e. the gear was forced through the synchroniser. A rising count means the Sync force ceiling is too high, or there is too much drag on the target axis.

Synchroniser Heat Protection

Repeated attempts heat the synchroniser. Shift Fork Sync Energy estimates this for each fork by accumulating slip x force x time while the synchroniser is loaded, and decays over roughly 20 seconds.

While Shift Fork Sync Energy is above Sync Energy Limit, the rest between attempts is extended from Retry Rest Time to Sync Energy Limit Cooldown. Set Sync Energy Limit to 0 to disable.

Standstill Engagement Aids

Two optional functions help engage a gear from Neutral or Park while the vehicle is stationary.

Dog Engagement Stall Clutch Pulse
If the fork stalls on the dog teeth with the shaft already synchronised, the teeth are likely sitting tip to tip. When enabled, the target axis clutch is briefly applied during the rest, at its touch point + Dog Engagement Stall Clutch Pulse Pressure for Dog Engagement Stall Clutch Pulse Time. This turns the shaft a few degrees so the teeth can line up on the next attempt.

  • Only the clutch on the axis being engaged is pulsed, and only while nothing is engaged on that axis.
  • It’s never used after a synchroniser stall.
  • Shift Fork Clutch Pulse Status is ON while the pulse is applied, and the clutch status reports On - Shift Fork Clutch Pulse.

Fork Move Idle Target (Shift Fork Setup)
A lower engine idle speed means less clutch drag for the synchroniser to overcome. While a gear is being engaged from Neutral or Park at a standstill, the Fork Move Idle Target is output on Shift Fork Idle Speed Request (0 at all other times). To use it, transmit Shift Fork Idle Speed Request to the ECU in a CAN message and configure the ECU to use it as its idle target. Set to 0 to disable.

Engagement Phase Settings

Found in Shift Fork Engagement Phase Control > Shift Fork Engagement Phase Setup.

SettingDescription
Approach Stall TimeTime the fork may go without making progress during Approach before a Mechanical stall is declared. The timer only starts once the fork has begun to move, so it doesn’t need to allow for break-away (ms)
Approach TimeoutApproach must reach Sync Zone Start within this time, or a Mechanical stall is declared (ms)
Sync Zone StartFork travel at which the fork reaches the blocker ring and the Sync phase begins (0% = slot being left, 100% = target slot). Set comfortably below the travel where forks are seen to stall on the synchroniser (%)
Sync Zone EndFork travel at which the blocker ring is considered released and the Engage phase begins. Set above the highest synchroniser stall position, and below where the dog teeth are reached (%)
Sync TimeoutLongest time the synchroniser is loaded in one attempt before the fork backs off. Limits synchroniser heating (ms)
Sync Force Ramp RateRate the force rises from Shift Fork Sync Force Start up to the force ceiling. A slow ramp spends longer at a force where the synchroniser can work. A fast ramp reaches the ceiling quickly and is more likely to push through the blocker ring before the shaft is synchronised (%/s)
Sync Force MaxForce ceiling for the first attempt. Should be below the force that pushes the fork through the blocker ring while the shaft is still spinning (%)
Sync Retry Force StepAdded to the force ceiling on each retry, up to 100% (%)
Synchro Slip Progress ValidationWith the force at its ceiling, Shift Fork Sync Slip must fall by at least this much every Synchro Slip Progress Window, or an Equilibrium stall is declared (RPM)
Synchro Slip Progress WindowTime window over which slip progress is checked (ms)
Synchro Slip Complete ThresholdShift Fork Sync Slip below which the shaft is considered synchronised (RPM)
Synchro Settled TimeoutIf the shaft is synchronised with the force at its ceiling, but the fork isn’t moving for this long, a Blocker Ring stall is declared so the ring can re-centre (ms)
Sync Energy LimitSynchroniser heat limit, compared with Shift Fork Sync Energy. 0 = disabled
Sync Energy Limit CooldownRest time used instead of Retry Rest Time while the synchroniser is over its Sync Energy Limit (ms)
Dog Engagement Stall TimeTime the fork may go without making progress on the dog teeth during Engage before it backs off (ms)
Back-Off DistanceHow far the fork is pulled back toward the slot it came from after a stall. Enough to fully unload the blocker ring or clear the dog teeth (mm)
Back-Off TimeLongest time the back off is driven if Back-Off Distance isn’t reached (ms)
Back-Off ForceForce used to pull the fork back after a stall. It only needs to unload the ring or lift the fork off the dog teeth, not move quickly (%)
Retry Rest TimeTime the shift solenoids are off between attempts (ms)
Dog Engagement Stall Clutch PulseEnables the dog stall clutch pulse, see Standstill Engagement Aids
Dog Engagement Stall Clutch Pulse PressurePressure above the clutch touch point applied during the pulse. Just enough to turn an unloaded shaft (Bar)
Dog Engagement Stall Clutch Pulse TimeLength of the pulse. The rest between attempts is held until the pulse has finished (ms)

Force Tables:

TableDescription
Shift Fork Approach ForceForce from leaving the slot until the fork reaches Sync Zone Start. Enough to move the fork briskly, without throwing it at the blocker ring. Too low and the fork won’t break away, resulting in a Mechanical stall (%)
Shift Fork Sync Force StartForce when the fork first loads the blocker ring. The synchroniser works best at a moderate force, so starting low gives it a chance to synchronise the shaft before the force ramps up. Consider spanning this table against Output Shaft Speed, so pre-selection while driving starts closer to the ceiling and only standstill engagements start gently (%)
Shift Fork Engage ForceForce used to push the fork through the dog teeth into the slot once the shaft is synchronised. Too low and the fork will stall on the dog teeth. Too high and it will slam into the slot (%)

Tuning Engagement Phase Control

  1. Complete the standard Calibration Procedure first. Fork travel is measured between the calibrated slot positions, so these must be accurate.

  2. Check Shift Fork Sync Slip reads sensibly during a fork movement. It relies on correct clutch speed and output shaft speed readings.

  3. Set up the force range for the fork actuation type, see Enabling Engagement Phase Control.

  4. Enable Engagement Phase Control and log a number of engagements from Neutral at a standstill, as well as pre-selections while driving. Log Shift Fork Move Phase, Shift Fork Stall Type, Shift Fork Move Attempt, Shift Fork Travel, Shift Fork Sync Slip, Shift Fork Force Demand and Shift Fork Crash Count, along with each fork’s Position.

  5. Set the sync zone from Shift Fork Travel at the point where each fork stalls on the synchroniser. Sync Zone Start should be below the lowest stall point, and Sync Zone End above the highest.

  6. Set Shift Fork Sync Force Start low enough that the synchroniser has a chance to work before the force ramps up to its ceiling. Only then raise Sync Force Max if forks still fail to engage.

  7. Watch Shift Fork Crash Count. A rising count means the force ceiling is overpowering the blocker ring rather than letting the synchroniser work. The fix is less force or less drag (e.g. a lower idle with Fork Move Idle Target), not more force.

  8. Review stall types at a standstill. Repeated Equilibrium stalls mean clutch drag is too high for the synchroniser to overcome, so reduce drag rather than adding force. Repeated Dog Teeth stalls with the shaft synchronised can be helped by the Dog Engagement Stall Clutch Pulse.

  9. Set each fork’s Retry Limit and Error Delay last, once engagement is reliable.


Errors & Diagnostics

Per-Fork Position Error

If a fork’s error-detection is enabled, a fork that fails to reach its target slot within its Error Delay (or whose position sensor reports a fault) raises a Fork # Movement fault and enters an internal error state.

From the error state, the firmware automatically retries the move, up to the fork’s Retry Limit, 1 second apart. With Engagement Phase Control ON, retries are made within the move itself (see Stalls and Retries), so there are no further automatic retries once the fork has entered the error state. If Error Auto Clear is enabled, the error clears automatically once the fork successfully reaches its target slot again (and the position sensor is healthy) — this is normally only allowed to happen when the fork’s target is Centre (Neutral), so a fork always has to prove it can get back to a safe state before being trusted again.

Using the tuning software’s “Clear All Codes” action also resets every fork’s retry count, in addition to clearing the fault codes themselves — so a fork that had exhausted its retries gets a fresh set of attempts on its next movement, rather than immediately re-latching into a fault.

Axis errors

Each axis is also monitored as a whole:

FaultCause
Axis A Bound / Axis B BoundMore than one fork on that axis reports being in gear simultaneously — i.e. the axis is mechanically bound between two gears
Axis A Fault / Axis B FaultAt least one fork on that axis is in a position error state

While an axis is in fault, no fork on that axis will be moved until the fault clears.

See Runtime Channels for the full list. Each fork’s Status and Position Error, and the Moving Shift Fork channel, are usually the first things worth logging when diagnosing a shift fork issue.


Runtime Channels

Per-Fork Channels (# = fork number, 1–8):

ChannelDescription
Shift Fork # PositionMeasured fork position, mm
Shift Fork # Position TargetTarget fork position, mm
Shift Fork # Position ErrorPosition error (target − measured), mm
Shift Fork # VelocityMeasured fork velocity, mm/s
Shift Fork # Statussee Shift Fork Status enumeration
Shift Fork # TrackingSecondary/tracking position sensor reading (diagnostic only)

System-Wide Channels:

ChannelDescription
Selected Gear AGear currently engaged on Axis A
Selected Gear BGear currently engaged on Axis B
Active Gear Shift ForkFork responsible for the currently active (engaged) gear
Preselected Gear Shift ForkFork responsible for the pre-selected next gear
Moving Shift ForkFork currently moving
Active Shift Fork PositionPosition of whichever fork is currently moving
Active Shift Fork Position TargetTarget position of whichever fork is currently moving
Active Shift Fork Position ErrorPosition error of whichever fork is currently moving
Active Axis Pressure TargetActive axis clutch pressure target, Bar
Inactive Axis Pressure TargetInactive axis clutch pressure target, Bar
Active Axis Fork Movement Torque LimitTorque limit currently applied due to active-axis fork movement
Shift Fork Movement PressureFork movement pressure demand output, Bar
Shift Fork Movement Pressure BaseFork movement pressure base/feed-forward term
Shift Fork Movement Pressure P GainFork movement pressure PID proportional term
Shift Fork Movement Pressure I GainFork movement pressure PID integral term
Shift Fork Movement Pressure D GainFork movement pressure PID derivative term
Shift Fork Force DemandForce requested for the moving fork, % of maximum. Also reported with Engagement Phase Control OFF while Axis Pressure Override is ON

Engagement Phase Control Channels:

ChannelDescription
Shift Fork Move PhasePhase of the moving fork, see Shift Fork Move Phase enumeration
Shift Fork Stall TypeReason for the most recent back off, see Shift Fork Stall Type enumeration and Stalls and Retries
Shift Fork Move AttemptAttempt number of the current move, 1 = first attempt. 0 when no fork is moving
Shift Fork Phase TimeTime spent in the current phase, ms
Shift Fork TravelFork progress from the slot it’s leaving (0%) to its target slot (100%)
Shift Fork Sync SlipSpeed difference the synchroniser has to remove, RPM. 0 for a return to Neutral
Shift Fork Crash CountNumber of engagements of the moving fork, since power up, where the dog teeth went in with the shaft still slipping
Shift Fork Sync EnergyHeat estimate for the moving fork’s synchroniser, compared with Sync Energy Limit
Shift Fork Clutch Pulse StatusON while the Dog Engagement Stall Clutch Pulse is applied
Shift Fork Idle Speed RequestIdle speed requested from the ECU during a standstill engagement, RPM. 0 when not requested

Calibration Procedure

  1. Enable each fork — set the Axis setting for every physical fork fitted (Axis A, B, or Both for a shared Reverse fork). Leave unused fork slots OFF.

  2. Wire up and calibrate position sensors first, via the standard analog input mapping/translation tools, so that each fork’s Position channel reads a correctly-scaled value (mm) across the whole range of travel.

  3. Set tolerance bands (Low/Centre/High Tolerance) tight enough to confirm the dog teeth/synchro are actually engaged, but loose enough to tolerate normal sensor noise and mechanical play.

  4. Assign gears to each slot via Position L Gear / Position H Gear. You may have to put some educated guesses into the positions initially.

  5. Assign shift solenoids per fork (Positive/Negative Solenoid Select) and confirm direction — command a move with Test mode and verify the fork moves the correct way and its Status reports moving in the expected direction, then settles into the correct slot.

  6. Set idle/default solenoid patterns (Idle Solenoid Select, Default Select / Enable) as required by the actuator hardware.

  7. Find and record the three slot positions for each fork with the vehicle safely supported and the driveline free to move by hand, or using the fork’s Test setting to command it to each slot in turn (only works while the requested gear is Neutral or Park):

    • Force to Low, record the settled Position reading into Position L.
    • Force to Centre, record Centre position.
    • Force to High, record Position H.
    • Set Test back to Off when done.
  8. Tune move-complete detection — Stable Velocity and Stable Time — so a fork isn’t reported as “done” while still settling, but without adding unnecessary delay to every shift.

  9. Tune fork movement pressure (if using closed-loop pressure control): set the Movement Pressure Base and PID gains, and the Pressure Override Min/Max and Integral Min/Max clamps, then set Axis Pressure Override to ON if pressure-based fork actuation is desired instead of fixed axis pressure targets. If using Engagement Phase Control, follow Tuning Engagement Phase Control instead.

  10. Set error detection last, once movement is proven reliable. Set each fork’s Error detect / Auto-Clear and Error Delay, generous enough to allow for normal shift timing but tight enough to catch a stuck fork.

  11. Verify full shift sequences in all gears, both directions, watching the Active Gear Shift Fork, Preselected Gear Shift Fork and Moving Shift Fork channels. Watch each fork’s Status & Position, for consistent, movement and engagement. Confirm no Axis Bound/Axis Fault faults occur across the full gear range.

Copyright © 2026 Emtron Australia Pty Ltd

Takeup

Takeup manages the smooth application (and release) of clutch torque from a standing start. The equivalent of a driver gently feeding out a manual clutch pedal, done automatically. It’s a critical function for dual-clutch transmissions, and an optional feature on multi-clutch transmissions that are also equipped with a torque converter.

Takeup doesn’t select gears or bring in extra clutches on its own — it only takes over the pressure of whichever clutch is already engaged for the current gear, for as long as the car is moving off from (or slowing to) a stop.

Takeup Takeup


Enabling and Selecting the Clutch

Set Enable to turn Takeup on. Once enabled, the Takeup Clutch Select table determines which clutch Takeup is allowed to take control of, per gear. This only has effect for a clutch that’s already part of the active clutch set for the current gear; it cannot bring in a clutch on its own. Configure one clutch per gear for a standard standing-start setup.

Takeup Clutch Select Table
  • X Axis: MUST be Clutch #.
  • Y Axis: MUST be Gear.
Select a clutch for each gear, even if it’s not intended for normal operation.

If a clutch is not selected for the current gear, the Takeup system will not arm in that gear. In the event of a failure where the transmission is forced to stay in a unintended gear, this may result in the car being undriveable.


Speed Target Mode

Speed Target Mode sets what the closed-loop slip controller is trying to synchronize to.

ModeBehaviour
OffTakeup Target Mode is 0 — Takeup is disabled regardless of the Enable setting.
Engine SpeedThe Takeup Engine Speed Target table gives a target Engine Speed. The controller works out the clutch slip and synchronous Output Shaft Speed needed to bring the engine to that RPM in the current gear.
Input Shaft SpeedThe Takeup Input Shaft Speed Target table gives a target Input Shaft Speed directly, again converted to a slip target and synchronous Output Shaft Speed for the current gear.
Clutch SlipThe Takeup Slip Target table is used directly as a raw the clutch slip target. No speed synchronization is calculated.

In all three modes, as the car accelerates and Output Shaft Speed approaches the calculated Takeup Sync Speed, the required slip target tapers down toward zero — this is what lets the clutch lock up smoothly instead of stepping straight from “slipping” to “locked”.


Takeup States

Takeup is a 5-state machine:

Off → Ready ⇄ Active ⇄ Exit → Driving ⇄ Active
StateMeaning
OffFunction disabled, or just enabled while already moving faster than the Arming Output Shaft Speed.
ReadyCar stopped/slow. Clutch is held at a small Initial Clutch Torque (optionally preceded by a Fast Fill pulse). Waiting for the driver to get on the throttle.
ActiveThe car is actually launching. A closed-loop controller slips the clutch through to lock-up, tracking the Speed Target Mode’s target.
ExitTakeup Sync Speed and Takeup Slip Target have been met. Pressure ramps the rest of the way up to full lock-up at a dedicated rate.
DrivingFully locked, normal driving. Takeup is watching Output Shaft Speed in the background in case the car slows back down to a stop.

Ready → Active

The transition from Ready to Active happens once all of the following are true:

  • Brake Switch is off
  • Pedal/Throttle is above Pedal/Throttle Min
  • Engine Torque (Supplied) is above Engine Torque Min.

The system transitions back to Ready if any of the same three conditions reverse (with a small amount of built-in hysteresis so it doesn’t chatter back and forth right at the threshold).

Ready → Exit

If the car picks up speed past Takeup Sync Speed while still in Ready, before the driver has touched the pedal (e.g. rolling away on a hill, or creeping forward under a positive Initial Clutch Torque), Takeup skips Active and goes straight to Exit. The clutch is ramped up to full lock at the Takeup Exit Pressure Ramp Rate rather than sitting at Initial Clutch Torque while the car outruns it. This doesn’t happen while Bleed Off is active.

Active → Exit

Once Output Shaft Speed has risen above the calculated Takeup Sync Speed and Clutch Slip has fallen below the Exit Slip Threshold, the system hands off to the Exit state. The clutch pressure is ramped the rest of the way to full pressure at the Takeup Exit Pressure Ramp Rate.

If Output Shaft Speed falls back below Takeup Sync Speed (minus Output Shaft Speed Sync Hysteresis) before the ramp finishes, it returns to Active rather than continuing to lock up.

Exit → Driving

Once the ramped pressure has caught up to the normal fully-locked clutch pressure, Takeup hands off to the Driving state and stops actively managing that clutch’s pressure.

Driving → Active (coming back down to a stop)

Takeup continuously compares Output Shaft Speed against a re-arming point: Takeup Sync Speed (minus Output Shaft Speed Sync Hysteresis), optionally adjusted earlier by Decel Arming Lead Time during a fast deceleration so the release has a head start rather than only reacting once the car has nearly stopped.

If Arming Output Shaft Speed is set above 0, Output Shaft Speed must also drop below that fixed speed before Takeup re-arms. Set it to 0 to rely on the synchronous-speed comparison alone.

Caution

Pay attention to the table axis setup of the selected slip target table. The Takeup Sync Speed will likely move around if the table is spanned against channels such as Pedal Position. This can result in unintended Takeup re-arming. The Arming Output Shaft Speed setting is useful for eliminating this concern.

Stall-Saver: If Output Shaft Speed drops to the point that Input Shaft Speed would fall below the transmission’s configured Input Shaft Speed Min, Takeup re-arms immediately regardless of the above.

The same re-arming point also gates the way back out. Active (and Ready, when the car rolls past sync on its own) won’t hand off to Exit until Output Shaft Speed is above the re-arming point plus Output Shaft Speed Sync Hysteresis (or above Takeup Sync Speed, whichever is higher). This stops a fast coast-down from bouncing between Exit and Active, which would otherwise show up as a saw-tooth on the clutch pressure.


Lockouts

Takeup is held out of operation — clutch pressure and state are frozen — whenever any of the following are true:

LockoutConditionCooldown
Engine stoppedEngine Speed = 0 RPM—
Neutral / ParkSelected Gear = Neutral or Park—
User LockoutThe assigned User Function is OFF (only checked if one is assigned)—
Clutch By WireClutch By Wire Scaler is below Clutch By Wire Lockout (set the lockout to 100% to disable this check entirely)Clutch By Wire Lockout Cooldown Time
TransbrakeEnabled via Transbrake Lockout; trips while the Transbrake is on or in its bump cooldownTransbrake Lockout Cooldown Time
Launch ControlEnabled via Launch Control Lockout; trips while Launch Control is activeLaunch Control Lockout Cooldown Time

The Clutch-By-Wire, Transbrake, and Launch Control lockouts each have their own cooldown timer. Once the underlying condition clears, Takeup stays locked out for the configured cooldown period before it’s allowed to resume, rather than snapping back on the instant the condition goes away. When Takeup comes back out of one of these three lockouts, it re-evaluates whether the car is already moving fast enough to go straight to Driving, or whether it should resume in Ready.

Tip

If Takeup is enabled alongside Launch Control’s clutch override, it’s strongly recommended to enable the Launch Control Lockout so the two systems don’t fight over the same clutch.


Bleed Off

When enabled, Bleed Off removes all pressure from the takeup clutch, so it’s ready to fill from empty. It can be triggered by the Brake Switch (Bleed Off with Brake Switch) and/or the Takeup Bleed Off Enable table.

Two optional lockouts prevent Bleed Off from kicking in:

  • Bleed Off Pedal/Throttle Max
  • Bleed Off Output Shaft Speed Max

Above either one, Bleed Off is locked out even if the brake/table would otherwise call for it. Setting one of these lockouts to 0 will disable that particular check.


Fast Fill

Once Bleed Off ends (e.g. the brake is released), the clutch chamber has to be filled from empty before it can hold any torque. Fast Fill Pressure and Fast Fill Time open the solenoid to a higher target pressure for a short period to fill the chamber quickly.

Too much of either and the clutch will grab; too little and take-up will feel soft/delayed.


Initial Clutch Torque

After the fill, the clutch is held at Takeup Initial Clutch Torque (a torque value, converted to a pressure using the clutch’s own torque/pressure model and touch point) while waiting in Ready for the driver to get on the throttle. A positive value here makes the car creep, like a manual gearbox car with the clutch slightly out.


Active State: Closed-Loop Control

Once Active, clutch torque is the sum of a feed-forward term and a PID correction, clamped to Takeup Torque Min/Takeup Torque Max, then converted to a pressure via the clutch’s torque/pressure model and added to its touch point.

Feed forward — set via Torque Feed Forward Mode:

  • User Defined — looked up directly from the Takeup Clutch Torque Feed Forward table.
  • Calculated (Experimental) — derived automatically from input shaft torque and the current slip ratio. It’s recommended to start with the User Defined table and let the PID do most of the work rather than relying on the experimental mode.

PID control closes the gap between actual clutch slip and the target computed from Speed Target Mode, using:

  • Proportional Gain
  • Integral Gain
  • Derivative Gain
  • Integral Min / Integral Max

The resulting torque command is converted to pressure and then rate-limited by Takeup Pressure Positive Ramp Rate/Takeup Pressure Negative Ramp Rate so the clutch can’t be commanded to move faster than the driveline can physically respond to.

An engine torque limit (optional, via Torque Limit = ON in Takeup Setup) applies the Takeup Engine Torque Limit to the engine while the clutch is actively slipping, to stop the slipping clutch from being overdriven (see Engine Torque Limiting).


Engine Torque Limiting

Two separate, independent torque limits can apply while Takeup is running:

  • Takeup Engine Torque Limit: Applies continuously while the clutch is in Active or Exit (i.e. actively slipping). This protects the slipping clutch from being overdriven by the engine.
  • Shift Torque Limit: Applies only if a gear shift starts while Takeup is Active — it caps engine torque to 0 Nm for the duration, to stop the engine flaring and the clutch grabbing hard as the shift completes and control hands back to Takeup.

Both limits automatically defer to Launch Control’s torque limit if Launch Control is also active, so the two functions don’t fight each other.


Interaction with Automatic Shifting

Suppress Auto Mode Up Shifts During Takeup and Suppress Auto Mode Down Shifts During Takeup independently block automatic up/down shifts for as long as Takeup is actively slipping the clutch (Active or Exit), so a shift can’t be requested out from under an in-progress launch. Manual shift requests are not affected.


Runtime Channels

The Takeup system generates the following runtime channels:

  • Takeup Status (see Takeup Status enumeration)
  • Takeup Slip Target
  • Takeup Slip Error
  • Takeup Sync Speed
  • Takeup Clutch Pressure
  • Takeup Torque Feed Forward
  • Takeup Clutch Torque
  • Takeup Gain P
  • Takeup Gain I
  • Takeup Gain D

Copyright © 2026 Emtron Australia Pty Ltd

Torque Converter Lockup

The torque converter lockup clutch mechanically joins the engine to the transmission input, bypassing the converter’s fluid coupling. With the clutch locked there is no converter slip: less heat in the transmission oil, better fuel economy, and a direct connection between the throttle and the wheels. With it unlocked the converter can slip and multiply torque, which helps launches and low-speed driving.

The TCM decides when the lockup clutch should be locked or unlocked, how much pressure to apply, and how quickly to apply and release it. Each of these can be tuned separately for each phase of operation (takeup, launch, in gear, up shifts and down shifts).

Torque Converter Lockup applies to transmissions with a torque converter, such as the ZF 8HP. Dual-clutch transmissions don’t have a converter and don’t use it.


Enabling

Assign the lockup solenoid to an output in Output Config > Transmission Functions (Torque Converter Lockup Solenoid Output). Once an output is assigned, the Torque Converter Lockup folder appears.

The TC Lockup Setup page holds the general settings:

SettingDescription
OutputThe output pin driving the lockup solenoid.
Active LevelThe drive level of the output.
PWM FrequencyThe solenoid drive frequency.
Solenoid Effective ResistanceThe solenoid’s effective resistance, used for current control. Only shown for solenoid outputs.
Per Gear TablesOff: a single TC Lockup In Gear State table is used in every gear. On: a separate TC Lockup Gear # State table is used for each forward gear (up to the configured Number of Forward Gears), and TC Lockup Gear Reverse State in Reverse.
Inertia Corrected TorqueOff: the lockup pressure is calculated from Engine Torque (Supplied). On: it uses Engine Torque (Inertia Corrected), see Lockup Pressure.
Cold Fluid InhibitKeeps the clutch unlocked while the fluid is cold, see Fluid Temperature and Brake.
Hot Fluid LockLocks the clutch in forward gears while the fluid is hot, see Fluid Temperature and Brake.
Brake Switch UnlockUnlocks the clutch while the brake switch is on, see Fluid Temperature and Brake.
Cold Fluid Threshold, Hot Fluid Threshold, Fluid Temp HysteresisSee Fluid Temperature and Brake.
Brake Pressure UnlockSee Fluid Temperature and Brake.
Input Shaft Speed MinimumLockout, see Lockouts.
Output Shaft Speed MinimumLockout, see Lockouts.
Drive Speed MinimumLockout, see Lockouts.
Engine Speed MinimumLockout, see Lockouts.
User EnableLockout, see Lockouts.
Max PressureThe highest pressure the lockup clutch will ever be commanded to. This must be above 0 or the clutch will never be applied (the TC Lockup Config Invalid DTC is set).
Lock ThresholdConverter slip (RPM) below which the clutch is reported as locked. Used for status only, see Monitoring.
Lock HysteresisExtra slip allowed before a locked clutch is reported as no longer locked. Used for status only.
Slip ThresholdSee Slip Monitoring. Only shown when Slip Protection is not Off.
Slip TimeSee Slip Monitoring. Only shown when Slip Protection is not Off.
Slip ProtectionSee Slip Monitoring.
Dyno ModeSee Dyno Mode.
Dyno Mode User EnableThe User Function that switches Dyno Mode on and off, when Dyno Mode is set to ON - User Function Controlled.

Solenoid Translation

TC Lockup Solenoid Translation converts the target lockup pressure (bar) into a solenoid current (A). Fill it in from the solenoid and valve body characteristics, the same way as the clutch solenoid translation tables (see Clutch Pressure Control).

TC Lockup Solenoid Translation Table
  • X Axis: MUST be Torque Converter Lock Up Pressure.
  • Y Axis: Optional, for example Transmission Fluid Temperature to compensate the solenoid for temperature.

The TCM always looks this table up by the lockup pressure, so the X axis values must be in bar. If the X axis is set to any other channel, the TC Lockup Config Invalid DTC is set.


Operating Phases

At any moment the lockup system is in one phase, and each phase has its own set of tables. Phases are listed here from highest to lowest priority; the first one that applies is used.

PhaseActive whenState tableRate tablesStatus
DynoDyno Mode is onTC Lockup Dyno StateTC Lockup In Gear Apply/Release RateOn - Dyno
LaunchLaunch Control is activeTC Lockup Launch StateTC Lockup Launch Apply/Release RateOn - Launch
TakeupTakeup is controlling the clutch from a stop (before it reaches Driving)TC Lockup Takeup StateTC Lockup Takeup Apply/Release RateOn - Takeup
Up ShiftAn up shift is in progressTC Lockup Up Shift StateTC Lockup Up Shift Apply/Release RateOn - Up Shift
Down ShiftA down shift is in progressTC Lockup Down Shift StateTC Lockup Down Shift Apply/Release RateOn - Down Shift
Hot FluidHot Fluid Lock is on, the fluid is hot, and the transmission is in a forward gearNone, always locksTC Lockup In Gear Apply/Release RateOn - Fluid Temp High
In GearNone of the aboveTC Lockup In Gear State, or with Per Gear Tables on, TC Lockup Gear # State (TC Lockup Gear Reverse State in Reverse)TC Lockup In Gear Apply/Release RateOn - In Gear

The Launch folder is only shown when Launch Control is enabled, and the Dyno Mode folder is only shown when Dyno Mode is not Off.

Reverse

With Per Gear Tables off, Reverse uses TC Lockup In Gear State, the same table as the forward gears. Make sure that table keeps the lockup clutch unlocked at reversing speeds. With Per Gear Tables on, Reverse has its own TC Lockup Gear Reverse State table. It is all 0 (never lock) until you change it.


State Tables: When to Lock

Each phase’s State table decides whether the lockup clutch should be locked:

Table valueResult
100Lock
0Unlock
Anything in betweenNo change, keep the current state

Fill the cells with 0 and 100 and let the interpolation between neighbouring cells form the hysteresis. The value has to reach 100 to lock and 0 to unlock, so the lock and unlock points are exactly where the 100 and 0 cells are. For example, with the X axis on Output Shaft Speed, a cell of 0 at 1200 RPM and a cell of 100 at 1600 RPM gives:

  • Lock when rising to 1600 RPM.
  • Unlock when falling to 1200 RPM.

Spacing the two cells further apart widens the hysteresis.

The axes can be any channel. Typical choices are Output Shaft Speed or Drive Speed against Pedal Position or Throttle Position. Useful extras:

  • Transmission Fluid Temperature: unlock earlier or lock later as the fluid temperature changes. For a simple cold-fluid inhibit or hot-fluid lock, use the built-in options instead (see Fluid Temperature and Brake).
  • Pedal position: unlock at high pedal so the converter can multiply torque when accelerating hard.
Holding the state through a shift

The lock request carries over when the phase changes. Filling the TC Lockup Up Shift State or TC Lockup Down Shift State table with 50 keeps the clutch in whatever state it was in when the shift started. Use 0 to always unlock for shifts, or 100 to always lock.

For standing starts, the TC Lockup Takeup State and TC Lockup Launch State tables are normally left at 0, so the converter can slip and multiply torque. Lock after the launch using a speed axis.


Lockouts

Any of the following lockouts unlocks the clutch, regardless of the State tables:

LockoutConditionStatus
UserThe User Enable User Function is OFF (only checked if one is assigned)Lockout - User
Fluid Temp LowCold Fluid Inhibit is on and the fluid is below Cold Fluid ThresholdLockout - Fluid Temp Low
BrakeThe brake is applied, see Brake UnlockLockout - Brake
Input Shaft SpeedInput Shaft Speed is below Input Shaft Speed MinimumLockout - Input Shaft Speed
Output Shaft SpeedOutput Shaft Speed is below Output Shaft Speed MinimumLockout - Output Shaft Speed
Drive SpeedDrive Speed is below Drive Speed MinimumLockout - Drive Speed
Engine SpeedEngine Speed is below Engine Speed MinimumLockout - Engine Speed
TransbrakeThe Transbrake is activeLockout - Transbrake
Park/NeutralThe transmission is in Park or NeutralLockout - Park/Neutral
Sensor FaultAn engine speed, input shaft speed or output shaft speed sensor DTC is setLockout - Sensor Fault
Slip FaultSlip Monitoring detected slip with Slip Protection set to UnlockLockout - Slip Fault
OverrideThe TCM is holding the clutch unlocked, for example during Automated Touch Point LearningLockout - Override

Lockouts release the clutch at TC Lockup In Gear Release Rate. Setting a minimum to 0 disables that check. If more than one lockout is active at the same time, the status shows only one of them.

Tip

Use the State tables to unlock the clutch as the car slows down, and set the lockout minimums a little lower as a backstop. A speed has to stay below its minimum for a short time before the lockout acts, so a single noisy reading won’t unlock the clutch. The lockout ends as soon as the speed is back above the minimum, and the clutch only locks again when the State table asks for it.

The User Enable lockout can be used to add your own conditions, for example a dash switch or a User Function based on other channels.


Fluid Temperature and Brake

Cold Fluid Inhibit

With Cold Fluid Inhibit on, the lockup clutch stays unlocked while Transmission Fluid Temperature is below Cold Fluid Threshold (Lockout - Fluid Temp Low). Cold fluid makes the lockup slow and harsh, and letting the converter slip warms the fluid up faster. The lockout ends once the fluid is Fluid Temp Hysteresis above Cold Fluid Threshold.

Hot Fluid Lock

With Hot Fluid Lock on, the lockup clutch is locked in forward gears while Transmission Fluid Temperature is above Hot Fluid Threshold, whatever the In Gear or Gear # State table asks for. The status shows On - Fluid Temp High. A slipping converter is one of the biggest heat sources in the transmission, so locking it helps the fluid recover. Once the fluid has cooled Fluid Temp Hysteresis below Hot Fluid Threshold, the State table is in control again.

  • Only the In Gear phase is forced. The Up Shift, Down Shift, Launch and Takeup State tables still apply. Fill the shift State tables with 50 to keep the clutch locked through shifts while hot.
  • All lockouts still apply, including the speed minimums and the brake, so the clutch is never forced locked at a standstill.
  • Reverse is never forced.
Caution

While Hot Fluid Lock is active, the converter can’t multiply torque, including at high pedal where the In Gear State table would normally unlock. Set Hot Fluid Threshold high enough that it only acts when the fluid really is overheating.

Neither Cold Fluid Inhibit nor Hot Fluid Lock acts while the transmission fluid temperature sensor has a fault DTC.

Brake Unlock

Pressing the brake can unlock the lockup clutch (Lockout - Brake), using either or both of:

  • Brake Switch Unlock: unlocks while Brake Switch 1 is on.
  • Brake Pressure Unlock: unlocks while Brake Pressure Front is at or above this pressure. The lockout ends once the pressure falls below half of it, so a light brake pressure hovering around the setting doesn’t make the clutch lock and unlock. 0 turns it off.

The clutch unlocks at any speed. When the brake is released, it locks again if the State table asks for lock.


Lockup Pressure

While lockup is requested, the TCM calculates the lockup clutch pressure from the engine torque:

  1. Take the engine torque, in either direction (driving or engine braking), and add TC Lockup Clutch Torque Margin.
  2. Convert the result to a pressure using TC Lockup Clutch Torque Capacity.
  3. Add TC Lockup Clutch Touch Point.
  4. Limit the result to Max Pressure.

So the clutch is applied firmly under load and gently at light load, and the pressure follows the engine torque while the clutch is locked. The engine torque comes from Engine Torque (Supplied), so an accurate torque source matters (see TCM Torque Model and Engine Torque).

With Inertia Corrected Torque on, Engine Torque (Inertia Corrected) is used instead. A locked clutch also has to carry the torque from the engine speeding up or slowing down, which is large through an up shift or a rev-matched down shift. Using the inertia corrected torque sizes the pressure for that, instead of relying on TC Lockup Clutch Torque Margin. Check Torque Converter Lock Up Pressure in a log after turning it on: the inertia term can be noisy, and the pressure follows torque increases immediately while locked.

When line pressure is set to target automatically, the TCM keeps it at or above the lockup pressure, so the lockup clutch always gets the pressure it is commanded.

TableUnitsDescription
TC Lockup Clutch Touch PointbarThe pressure at which the lockup clutch starts to carry torque.
TC Lockup Clutch Torque CapacityNm/barThe torque the clutch can carry for each bar above the touch point. A higher value gives a lower pressure for the same torque. Every cell must be above 0 (otherwise the TC Lockup Config Invalid DTC is set).
TC Lockup Clutch Torque MarginNmExtra capacity on top of engine torque, to cover torque estimate errors and sudden torque changes.

Fast Fill

When the clutch is applied from fully released, TC Lockup Clutch Fast Fill Pressure is commanded straight away for TC Lockup Clutch Fast Fill Time to fill the lockup piston quickly. When the fill ends, the pressure drops straight to the calculated lockup pressure if the fill pressure was higher, or rises to it at the Apply Rate if the fill pressure was lower. Fast fill is only used again once the clutch has been fully released.

Too much fast fill pressure or time makes the lockup harsh. Too little makes it slow to lock.

Apply and Release Rates

Each phase has an Apply Rate and a Release Rate table (bar/s) that limit how fast the lockup pressure changes:

  • Apply Rate: sets how quickly the pressure rises from the end of the fast fill up to the calculated lockup pressure. This is what sets how firmly the clutch locks. Once the pressure has reached the calculated lockup pressure, it follows increases in engine torque immediately, so the clutch doesn’t slip when the throttle is opened while locked.
  • Release Rate: sets how quickly the pressure falls when unlocking, and when engine torque drops while locked.

The rates of the phase that is active at the time are used. For example, an unlock requested by the Up Shift State table releases at TC Lockup Up Shift Release Rate. Lockouts always release at TC Lockup In Gear Release Rate.

A rate of 0 means no limit: the pressure changes to its new value immediately.

Caution

A cell that interpolates between a 0 cell and a non-zero cell gives a small, slow rate, not an immediate change. Fill each Apply Rate and Release Rate table with either 0 or a sensible rate for the phase, and avoid tiny values.


Slip Monitoring

Slip monitoring checks that the lockup clutch actually locks. Once the lockup pressure has reached its calculated value, if Converter Slip stays above Slip Threshold for longer than Slip Time, the TC Lockup Slip DTC is set and the Slip Protection action is applied:

Slip ProtectionBehaviour
OffSlip is not monitored.
DTC OnlyThe DTC is set. Control is unchanged. The DTC clears when the slip is back under the threshold.
Max PressureThe lockup clutch is commanded to Max Pressure until the slip is back under the threshold. The DTC then clears and the pressure returns to normal at the Release Rate.
UnlockThe lockup clutch is unlocked (Lockout - Slip Fault) and stays unlocked until the State table next asks for unlock (0), or another lockout releases the clutch. The DTC clears at the same time.

A slipping lockup clutch at load puts a lot of heat into the lining and the fluid, so it’s worth setting up even if you only use DTC Only. Common causes are a Torque Capacity that is too high (pressure too low for the torque), an engine torque reading that is lower than the real torque, and a worn clutch.

Tip

Set Slip Time longer than a normal lockup takes to pull the slip down, or the DTC will set during every apply. Log a few lockups and use the time from the end of the pressure ramp until Converter Slip settles, plus a margin.


Dyno Mode

Dyno Mode makes the lockup clutch follow the TC Lockup Dyno State table in every phase. The In Gear Apply and Release Rate tables are used, and are also shown in the Dyno Mode folder (they are the same tables).

Dyno ModeBehaviour
OffNormal operation.
ON - User Function ControlledDyno Mode is on while the Dyno Mode User Enable User Function is ON.
ON - Disable on PowerupDyno Mode is on until the TCM is next powered up, then returns to Off.

The lockouts still apply in Dyno Mode. On a dyno without a vehicle speed signal, set Drive Speed Minimum to 0.

Warning

Dyno Mode replaces the State tables for launches, takeup and shifts. Only use it on the dyno.


Monitoring

The lockup system generates the following runtime channels:

ChannelDescription
Torque Converter Lock Up StatusThe active phase, or the active lockout (see Torque Converter Lockup Status).
Torque Converter Lock Up RequestON while lockup is requested (the State table has asked for lock and no lockout is active).
Torque Converter Lock Up PressureThe lockup pressure target, after fast fill and rate limits.
Torque Converter Lock Up Solenoid Current TargetThe solenoid current from the translation table.
Torque Converter Lock Up Solenoid CurrentThe measured solenoid current.
Torque Converter Lock Up CapacityThe estimated torque the lockup clutch can carry at the current pressure.
Torque Converter Lock Up Clutch StatusOpen, Slip, Sync or Lock (see TC Lockup Clutch Status).
Converter SlipEngine Speed minus Input Shaft Speed.
Info

Torque Converter Lock Up Status shows which phase’s tables are in control, not whether the clutch is locked. For example, it shows On - In Gear even while the In Gear State table is asking for the clutch to be unlocked. Use Torque Converter Lock Up Request to see whether lockup is requested, and Torque Converter Lock Up Pressure and Converter Slip to see what the clutch is actually doing.

Torque Converter Lock Up Clutch Status reports Open whenever Torque Converter Lock Up Pressure is at or below TC Lockup Clutch Touch Point. Above the touch point it reports Lock when Converter Slip is within Lock Threshold (plus Lock Hysteresis once locked), and otherwise Sync, Slip or Open by comparing the estimated lockup capacity against engine torque. It is for display and logging only and doesn’t change how the clutch is controlled.


Tuning Procedure

  1. Output and translation. Assign the output and fill in TC Lockup Solenoid Translation with its X axis on Torque Converter Lock Up Pressure. Set Max Pressure to the highest pressure the lockup clutch should ever see.
  2. Start unlocked. Set every State table to 0, and set Engine Speed Minimum comfortably above idle as a stall backstop.
  3. Touch point. Use the transmission’s specification if you have one. Otherwise, lock the clutch at a steady light-throttle cruise with a slow In Gear Apply Rate, and log Torque Converter Lock Up Pressure and Converter Slip. The touch point is the pressure at which Converter Slip first starts to fall.
  4. Capacity and margin. Lock the clutch at cruise, then add load. If Converter Slip rises while the clutch should be locked, the pressure is too low: lower TC Lockup Clutch Torque Capacity or raise TC Lockup Clutch Torque Margin. If lockup is harsh at light load, the pressure is higher than needed.
  5. In Gear State. Lock in the higher gears above a cruising speed, and unlock well before the car slows to the lockout minimums. Optionally unlock at high pedal for torque multiplication. Turn on Cold Fluid Inhibit, Hot Fluid Lock and brake unlock as needed.
  6. Apply and release feel. Adjust TC Lockup Clutch Fast Fill Pressure/Time and the Apply Rate tables until lockup is quick without a bump. Adjust the Release Rate tables so unlocking is smooth but finishes before the car needs converter slip.
  7. Shifts. Decide per shift direction whether to unlock (0), hold (50) or lock (100), then check shift quality in the logs.
  8. Takeup and Launch. Normally leave these at 0 and let the In Gear table lock the clutch once the car is moving.
  9. Slip monitoring. Once lockup is working, choose a Slip Protection action, then set Slip Threshold and Slip Time from your logs.

Channels worth logging while tuning:

  • Torque Converter Lock Up Status
  • Torque Converter Lock Up Request
  • Torque Converter Lock Up Pressure
  • Torque Converter Lock Up Solenoid Current
  • Torque Converter Lock Up Clutch Status
  • Converter Slip
  • Engine Torque (Supplied)
  • Output Shaft Speed
  • Gear
  • Your State table axes

Copyright © 2026 Emtron Australia Pty Ltd

Transbrake

Warning

Transbrake is a motorsport orientated function can lead to transmission and/or other driveline component damage if not used correctly.

The Transbrake function locks up the transmission so that engine load can be applied against the torque converter for staging and launching. It works by applying additional clutches along with the clutches required for the current forward gear. Typically this is achieved by engaging Reverse and First gear at the same time, effectively binding the transmission.


Transbrake Mode

There are two modes of operation:

  • Forward + Reverse: Engages the clutches for reverse AND the current forward gear (eg: 1st).
  • Clutch Select Table: User definable clutch selection to be applied in combination with the current forward gear’s clutches.

Activation

The Tranbrake is activated by the Transbrake Switch input. The switch input is configured separately in Input Config.


Lockouts

Any of the following lockout conditions will result in the Transbrake being disabled:

  • Output Shaft Speed Max: If the output shaft speed exceeds this value, the Transbrake is disabled.
  • Gear Max: The transbrake will be disabled above this gear.
  • User Enable: A User Function can be selected to act as a lockout. The selected User Function must be ON or the Transbrake will be disabled.

Bump

During a bump, the Transbrake is momentarily released to allow the car to increment forward for staging. Bump is activated by the Transbrake Bump Switch input. The switch input is configured separately in Input Config.

  • Bump Time: The Transbrake is released for this amount of time, regardless of the Bump Switch being held for longer.
  • Bump Cooldown Time: After a bump, another one cannot be requested until this time has elapsed.
Repeated Bumps

To request subsequent bumps, the Transbrake Bump Switch switch must be released and re-pressed. Holding the bump switch will not result in repeated bumps.


Interaction with Other Systems

Caution

Care should be taken to ensure other system lockouts are configured, in particular: Takeup.

  • Takeup: If Takeup’s own Transbrake Lockout option is set, Takeup control locks itself out whenever the Transbrake is active, so the two won’t fight over clutch pressure.
  • Clutch-By-Wire (CBW): An active CBW request blocks the Transbrake from ever activating.

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Datasheets

TM16 Datasheet

Emtron TM16 Emtron TM16

The Emtron TM16 is a fully programmable Transmission Control Module aimed at controlling the most complex transmission and driveline components. Designed with an over abundant amount of processing power to allow for the implementation of extremely complex, no compromise control strategies.

Overview

  • 2x 650 MHz 32bit Automotive Processors
  • Xilinx 7 Series FPGA
  • 512 MB DDR3 RAM
  • 8 GB Data Logging Memory
  • Fully protected power supply inputs
  • 16x Low Side Proportional Current Solenoid Outputs
  • 8x Half-Bridge Auxiliary Outputs
  • 4x Protected Solenoid Power Supply Outputs
  • 4x Analogue Outputs
  • 16x Analogue Inputs
  • 16x Digital Inputs
  • 4x 2 Wire Hall Effect Wheel Speed Inputs
  • IMU (3 Axis Accelerometer & Gyroscope)
  • Onboard Barometric Pressure Sensor
  • 2x CAN 2.0A/B Busses
  • 1x RS232 Interface
  • 2x 5V Sensor Supplies
  • 1x 8V Sensor Supply
  • Ethernet PC Tuning

Applications

  • Dual Clutch Transmissions
  • Multi-Clutch Automatic Transmissions
  • Conventional Automatic Transmissions

Wiring Pinout

TM16 Pinout TM16 Pinout

Looking into TCM

Connector A

InfoMating Connector: 4-1437290-0
PinFunction
A1ANV 1
A2ANV 2
A3ANV 3
A4ANV 4
A5ANV 5
A6ANV 6
A7ANV 7
A8ANV 8
A9Sensor 0V Ref
A10ANV 9
A11ANV 10
A12ANV 11
A13ANV 12
A14ANV 13
A15ANV 14
A16ANV 15
A17ANV 16
A18DI 1
A19DI 2
A20DI 3
A21DI 4
A22DI 5
A23DI 6
A24DI 7
A25DI 8
A26DI 9
A27DI 10
A28DI 11
A29DI 12
A30DI 13
A31DI 14
A32DI 15
A33DI 16
A34Sensor 0V Ref

Connector B

InfoMating Connector: 4-1437290-1
PinFunction
B1Aux 1
B2Aux 2
B3Aux 3
B4Aux 4
B5Aux 5
B6Aux 6
B7Aux 7
B8Aux 8
B9GND
B10Solenoid 1
B11Solenoid 2
B12Solenoid 3
B13Solenoid 4
B14Solenoid 5
B15Solenoid 6
B16Solenoid 7
B17Solenoid 8
B18Solenoid 9
B19Solenoid 10
B20Solenoid 11
B21Solenoid 12
B22Solenoid 13
B23Solenoid 14
B24Solenoid 15
B25Solenoid 16
B26Analog Out 1
B27Analog Out 2
B28Analog Out 3
B29Analog Out 4
B30Solenoid 1-4 Supply Output
B31Solenoid 5-8 Supply Output
B32Solenoid 9-12 Supply Output
B33Solenoid 13-16 Supply Output
B34GND

Connector C

InfoMating Connector: 3-1437290-7
PinFunction
C1Battery Hot Supply
C2Aux 1-4 Supply
C3Aux 5-8 Supply
C4Solenoid 1-8 Supply
C5Solenoid 9-16 Supply
C6Ignition Switch
C7GND
C8CAN 1 Hi
C9CAN 2 Hi
C10Hall 1
C11Hall 2
C12Hall 3
C13Hall 4
C14CAN 1 Lo
C15CAN 2 Lo
C165V0 Ref Output 1
C175V0 Ref Output 2
C188V0 Ref Output
C19Sensor 0V Ref
C20Ethernet Rx+
C21Ethernet Rx-
C22Ethernet Tx+
C23Ethernet Tx-
C24RS232 Rx
C25RS232 Tx
C26GND

Features

Power Supply

  • Reverse polarity protection
  • Over temperature protection
  • Over current protection
  • Current & voltage diagnostic monitoring
  • 1x Battery constant supply
  • 2x Auxiliary output driver supplies
  • 2x Solenoid supplies
  • 1x Ignition switch input
  • 24V Compatible

Processor

  • Dual Core, 650 MHz, 32bit Automotive Processor
  • Xilinx 7 Series FPGA
  • 512MB DDR3 RAM

Solenoid Outputs

16x Proportional Current Solenoid Drivers

  • 0.1 – 20 KHz PWM
  • Low side only
  • 1.5A max current setpoint in single mode
  • 2.7A max current setpoint in paired mode
  • 1.8A continuous current per pin
  • Current monitoring and control on all pins
  • Current dither for reduced stiction and faster solenoid response
  • Flywheel diodes connected to solenoid power supply outputs (see below)
  • Unused solenoid outputs can be used as low side auxiliary outputs

Solenoid Power Supply Outputs x4

4x Protected Solenoid Supply Outputs

  • Protected and monitored solenoid supply pins
  • Over current protected
  • Current & voltage diagnostic monitoring

Auxiliary Outputs

8x Auxiliary Outputs

  • Half-Bridge Drivers
  • 0.1 – 20 KHz PWM
  • High Side / Low Side 35A peak, 8A continuous
  • Bi-directional current monitoring on all pins

Analog Outputs

4x Analog Outputs

  • 0-5V, 10 bit, 4.88 mV resolution
  • 11 mA per channel

Analog Inputs

16x Analog Inputs

  • 0-5V
  • 12 bit, 1.22mV resolution
  • Switchable 1K pullups to 5V Out 1 on pins 1-8
  • Switchable 1K pullups to 5V Out 2 on pins 9-16
  • 100K Ohms to ground

Digital Inputs

16x Digital Inputs

  • 0.5 – 20KHz
  • 0-39V Analog Input on all pins
  • 12 bit, 9.52mV resolution
  • Hall effect & Reluctor sensor compatible
  • Switchable 4K7 pullup to 8.0V on all pins
  • Switchable 330R pulldown to GND on pins 1-8

Digital Input 1-8:

  • Programmable 0-5V high trigger threshold
  • Programmable 0-5V low trigger threshold

Digital Input 9-16:

  • Fixed high trigger threshold: 2.4V
  • Fixed low trigger threshold: 0.5V

Hall Sensor Inputs

4x 2-Wire Hall Effect Sensor Inputs

  • 0.5 – 20KHz
  • Open circuit detection
  • Short to Battery detection
  • Short to Ground detection

Inertial Measurement Unit

  • 3 Axis Accelerometer, ±2/4/8/16 g
  • 3 Axis Gyroscope, ±125 - ±4000 dps

On board Sensors

  • Barometric Pressure Sensor
  • PCB Temperature Sensor

Communications

  • 10/100 Ethernet PC tuning interface, high speed, high noise immunity
  • 2x CAN 2.0A/B Interfaces, fully user configurable, selectable termination.
  • 1x RS232 Serial Interface

Data Logging

  • 8GB Onboard eMMC logging memory.

Programming

All device configuration and firmware updates are done via ethernet connection with our free TMtune PC Software.

Copyright © 2026 Emtron Australia Pty Ltd

TM16-R35 Adapter Datasheet

The TM16-R35 Adapter allows Plug-n-Play control of the Nissan GR6 DCT transmission in the 2007+ R35 GTR.

Pinout

Nissan GR6 TCM Pinout Nissan GR6 TCM Pinout

Connector A (Black)

OEM PinFunctionTM16 Pin
1+14V (TCM Relay)C2, C3, C4, C5
2-
3GNDB9, B34, C7, C26
4GNDB9, B34, C7, C26
5+14V (TCM Relay)C2, C3, C4, C5
6-
7GNDB9, B34, C7, C26
8GNDB9, B34, C7, C26
9Batt +14VC1
10Reverse Light OutputSol 15 (B24)
11CAN 1 HC8
12-
13-
14TCM Power RelaySol 16 (B25)
15CAN 1 LC14
16Brake Switch 1DI 10 (A27)
17Ignition SwitchC6
18-
19Starter Relay EnableAux 8 (B8)
20-
21-
22-
23Manual Switch 1DI 7 (A24)
24-
255V Ref 2C17
265V Ref 2C17
27Shifter Pos Switch 1ANV 9 (A10)
28Manual Switch 2DI 8 (A25)
29-
30-
31Engine Speed (Tracking)DI 4 (A21)
32-
33Shifter Pos Switch 2ANV 10 (A11)
34Snow Mode SwitchDI 13 (A30)
35Shifter Pos Switch 4ANV 12 (A13)
36-
37R Mode SwitchDI 12 (A29)
38Shifter Pos Switch 3ANV 11 (A12)
39Up Shift SwitchDI 5 (A22)
40-
41-
42Down Shift SwitchDI 6 (A23)
43Shifter Pos Switch 5ANV 13 (A14)
44Shifter Pos Switch 6ANV 14 (A15)
45R Mode LampSol 13 (B22)
46Shift Lock SolenoidAux 6 (B6)
47Snow Mode LampSol 14 (B23)
48-

Connector B (Brown)

OEM PinFunctionTM16 Pin
49Shift Solenoid 1Aux 1 (B1)
50-
51Shift Solenoid 3Aux 3 (B3)
52-
53Shift Solenoid 5Aux 5 (B5)
54Shift Solenoid 2Aux 2 (B2)
55-
56Shift Solenoid 4Aux 4 (B4)
57Solenoid SupplySol 1-4 +V (B30)
58-
59Solenoid SupplySol 5-8 +V (B31)
60-
61-
62Axis A SolenoidSol 3 (B12)
63-
64Axis B SolenoidSol 7 (B16)
65-
66Sensor GNDA9, A34, C19
67Shift Fork 1 Pos (Main)ANV 4 (A4)
68Sensor GNDA9, A34, C19
69Sensor GNDA9, A34, C19
70Shift Fork 4 Pos (Main)ANV 8 (A8)
715V Ref 1C16
72Clutch A SpeedDI 1 (A18)
735V Ref 1C16
745V Ref 1C16
755V Ref 1C16
76Speed Sensor +(From TCM Relay)
77Line Pressure SensorANV 1 (A1)
78Speed Sensor +(From TCM Relay)
79Shift Fork 1 Pos (Tracking)ANV 5 (A5)
80Sensor GNDA9, A34, C19
815V Ref 1C16
82Clutch B SpeedDI 2 (A19)
83Sensor GNDA9, A34, C19
84Sensor GNDA9, A34, C19
85Shift Fork 2 Pos (Main)ANV 6 (A6)
86Sensor GNDA9, A34, C19
87Trans Fluid TempANV 15 (A16)
885V Ref 1C16
89Park SwitchDI 14 (A31)
90-
91Sensor GNDA9, A34, C19
92Shift Fork 3 Pos (Main)ANV 7 (A7)
93-
94Sensor GNDA9, A34, C19
95-
96-

Connector C (Grey)

OEM PinFunctionTM16 Pin
975V Ref 1C16
98Clutch A PressureANV 2 (A2)
99Sensor GNDA9, A34, C19
100-
101-
1025V Ref 1C16
103Clutch B PressureANV 3 (A3)
104Sensor GNDA9, A34, C19
105Speed Sensor +(From TCM Relay)
106Output Shaft SpeedDI 3 (A20)
107Sensor GNDA9, A34, C19
108-
109-
110-
111-
112-
113Line Pressure SolenoidSol 9 (B18)
114-
115Lubrication Flow SolenoidSol 11 (B20)
116-
117-
118Solenoid SupplySol 9-12 +V (B32)
119-
120Solenoid SupplySol 9-12 +V (B32)
121Solenoid SupplySol 1-4 +V (B30)
122-
123Solenoid SupplySol 5-8 +V (B31)
124-
125-
126Clutch A SolenoidSol Pair 1&4 (B10+B13)
127-
128Clutch B SolenoidSol Pair 5&8 (B14+B17)

Changelog

Version 1.1 - 31/07/2026

Clutch solenoids now use Solenoid Pairs 1&4, 5&8 to allow more than 1.5A

The OEM solenoid current limit is 1.5A, which is also the setpoint limit of a single TM16 solenoid output. At 1.5A of current, the clutch will achieve approximately 17 Bar of clutch pressure. Solenoid outputs can be paired to achieve up to 2.7A (It’s unlikely that more than 2.0A is useful). Version 1.1 hardware supports the solenoid pairing.

The cal file should be updated to use the solenoid pairs in the output config.

Version 1.0 hardware can utilize the additional current by modifying the wiring to splice the TM16’s solenoid outputs 1&4 together, and 5&8 together.

Version 1.0 - 01/04/2026

Initial Release

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of Transmissions

Getrag GS7

Beta Notice

The GS7 base cal file has been built using a dedicated track car as the test platform. While it is fully functional and drives very well, it may not be optimized in all aspects.

Wiring

The OEM Mechatronic unit must be removed so that the transmission can be run directly by the TCM.

The example below uses the DomiWorks Install Board.

The pullup resistors supplied on the board should be removed as pullup control is available on all TCM inputs where required.

GS7 Mech Pads GS7 Mech Pads

Pad Group A

OEM PadFunctionTCM Pin
PA1SGNDSGND
PA2Clutch A PressureAn 3
PA3+5V5V Out 1

Pad Group B

OEM PadFunctionTCM Pin
PB1SGNDSGND
PB2Clutch B PressureAn 1
PB3+5V5V Out 1

Pad Group C

OEM PadFunctionTCM Pin
PC1
PC2Clutch A SpeedHall 1
PC3Clutch B SpeedHall 2
PC4Fork 4/6 PositionAn 2
PC5SGNDSGND
PC6Fork 5/7 PositionAn 4
PC7+5V5V Out 1
PC8Clutch A Temp (NC, marked “redundant” in OEM docs)An 5
PC9+5V5V Out 1
PC10Clutch B Temp (NC, marked “redundant” in OEM docs)An 6
PC11Fork 2/R PositionAn 8
PC12Fork 1/3 PositionAn 7
PC13+5V5V Out 1

Pad Group D

OEM PadFunctionTCM Pin
PD1Shift Solenoid 1Sol 13
PD2Solenoid +12VSol +V Out (B33)
PD3Shift Solenoid 2Sol 14
PD4Solenoid +12VSol +V Out (B33)
PD5Shift Solenoid 3Sol 15
PD6Solenoid +12VSol +V Out (B33)
PD7Shift Solenoid 4Sol 16
PD8Solenoid +12VSol +V Out (B33)

Pad Group E

OEM PadFunctionTCM Pin
PE1
PE2
PE3SGNDSGND
PE4
PE5
PE6Trans Fluid TempAn 9
PE7Input Shaft SpeedHall 3
PE8
PE9
PE10
PE12
PE13
PE14
PE15

Pad Group F

OEM PadFunctionTCM Pin
PF1Axis A SafetySol 2
PF2Solenoid + 12VSol +V Out (B30)
PF3Clutch ASol Pair 1 & 4
PF4Solenoid + 12VSol +V Out (B30)
PF5Axis B SafetySol 6
PF6Solenoid + 12VSol +V Out (B30)
PF7Clutch BSol Pair 5 & 8
PF8Solenoid + 12VSol +V Out (B30)
PF9Line Pressure SolenoidSol 9
PF10Solenoid + 12VSol +V Out (B30)
PF11Cooling Flow SolenoidSol 10
PF12Solenoid + 12VSol +V Out (B30)

Gear Ratios

Short Ratio

GearRatio
R-3.667
1st4.780
2nd2.933
3rd2.153
4th1.678
5th1.390
6th1.203
7th1.000

Clutch Geometry

ClutchPlates (S/D)Friction ID/OD (mm)Piston ID/OD (mm)
Clutch A2(S) + 4(D)190.0 / 218.0190.0 / 208.0 *
Clutch B2(S) + 4(D)121.5 / 162.096.0 / 140.0 *

* Piston diameters are close approximations only

Note

Our test vehicle was a track car with unknown clutch condition. We settled on a Estimated Clutch Efficiency factor of 65% but can’t say for certain if this is correct for all installations.


Shift Forks

The GS7 has 4 shift forks controlled by 4 Shift Solenoids. Operation is fairly simple, with a binary combination of solenoids resulting in a different movement operation.

Manipulating the current through the shift solenoid allows the fork movement to be slowed as it approaches the target.

Shift Solenoid Current Shift Solenoid Current

Selector Forks

ForkGear LowGear High
146
22R
313
457
Reverse and 2nd are on different clutches.

Fork 2 must be assigned to Axis A & B to inform the system that this is not a config mistake.

Gear to Fork Mapping

The following table shows the nominal fork mapping. Actual positions should be fine tuned with real world measurements see during operation.

GearForkPositionVolts
R2-H8.0mm3.830
NALL0.0mm2.500
13-L-8.0mm1.360
22-H-8.0mm1.360
33-H8.0mm3.830
41-L8.0mm3.830
53-H8.0mm1.360
61-H-8.0mm1.360

Shift Solenoids

SolenoidFunction
1Fork Move +/-
2Fork Move +/-
3Fork Select B0
4Fork Select B1

Shift Solenoid Truth Table

ForkGearSol 1Sol 2Sol 3Sol 4
1 (4/6)4 «XX
1 (4/6)» 6XX
2 (2/R)R «X
2 (2/R)» 2X
3 (1/3)1 «XX
3 (1/3)» 3XX
4 (5/7)5 «XXX
4 (5/7)» 7XXX

Line Pressure

The line pressure solenoid reduces line pressure as current increases. Maximum line pressure is achieved when the solenoid is completely off.

No line pressure sensor is available.

Clutch Pressure

Clutch pressure is controlled by a solenoid for each clutch. To achieve maximum pressure they must be driven to approximately 1.8-1.9 Amps. To do so, the solenoids need to be wired to a Solenoid Pair so that more than 1.5A can be targeted.

  • Each clutch has a pressure sensor.
  • Each clutch/axis has a safety solenoid that must be energized to allow clutch pressure to be applied.

Input Shaft Speed

An Input Shaft Speed sensor is available. This effectively measures engine RPM as it’s the speed BEFORE the input to the clutch baskets.

The sensor is 2 wire hall effect type. Use Hall Input 1-4.


Clutch Speeds

Each Clutch has an output speed sensor. The sensor measures the speed of the output side of the clutch basket. This speed varies depending on the selected gear.

Slip is calculated based on the difference between Input Shaft Speed and Clutch A/B Speed.

The sensors are 2 wire hall effect type. Use Hall Input 1-4.


Output Shaft Speed

The GS7 does not have an output shaft speed sensor. Instead, leave the Output Shaft Speed input OFF and the TCM will calculate Output Shaft Speed using the active clutch and it’s currently selected gear.


Lubrication / Cooling Flow

The GS7 has a solenoid dedicated to cooling the clutches.


Copyright © 2026 Emtron Australia Pty Ltd

Nissan GR6

Wiring

Refer to the Emtron TM16-R35 Adapter Kit Datasheet.


Gear Ratios

GearRatio
R-3.383
1st4.056
2nd2.301
3rd1.595
4th1.248
5th1.001
6th0.796
FD3.700

Shift Forks

ForkGear LowGear High
1R1
224
335
46-

Gear to Fork Mapping

GearForkPositionVolts
R1-L-9.0mm1.300 / 3.800*
NALL0.0mm2.500
11-H9.0mm3.800 / 1.300*
22-L9.0mm1.300
33-L9.0mm1.300
42-H-9.0mm3.800
53-H-9.0mm3.800
64-L9.0mm1.300

* Fork 1 has two position sensors.


Shift Solenoids

SolenoidFunction
14 / N
22 / 6
3R / 5
41 / 3
5Fork 3 & 4 Select

Shift Solenoid Truth Table

ForkGearSol 1Sol 2Sol 3Sol 4Sol 5
1 (1/R)R «X
1 (1/R)» 1X
2 (2/4)2 «X
2 (2/4)» 4X
3 (3/5)3 «XX
3 (3/5)» 5XX
4 (6/N)6 «XX
4 (6/N)» NXX

Axis Feed Pressure Solenoids

Active Axis/Clutch Behavior

Maintains about 3.5 bar above the active clutch pressure target.

Inactive Axis/Clutch Behavior

Holds 10 bar at most times. During fork movement, the inactive axis pressure is used to control the shift fork movement force and velocity. Once the fork is in position it returns to 10 bar.


Lubricating Flow Solenoid

Remains active by default, allowing fully lubrication and cooling flow. During a shift or high torque demand it will close off, to reduce pressure drop and allow maximum line pressure availability.


Known Issues / Limitations

Start Button Hold to Start

The R35 TCM is responsible for determining that the engine is safe to crank and supplies the positive side of the starter relay with power when the transmission is in Park or Neutral. The window of time for this to happen when the start button is held from fully off, with brake applied, is only a couple of hundred milliseconds. The TM16’s boot up process takes slightly longer than the factory TCM because it runs a very complex CPU & FPGA. As a result, the starter relay receives power too late. The starter solenoid will click but the BCM will have already given up. The R35 base cal has a deliberate delay added to the user function that drives the starter relay power so that the one shot hold to start does not work at all. Instead the ignition will turn on normally, and the engine will start with a second press of the start button.

Hill Hold

The OEM hill hold function that tells the ABS module to lock the brakes on a hill is not currently supported. We intend to add support for this function in a future update.

Limp Home Skip Shifting

When an axis/clutch detects an error the OEM TCM will lockout the problem axis and skip shift (eg 2 to 4 to 6, ignoring 1,3,5 or visa versa). Current firmware does not support this function. Full fault detection is implemented and every shift fork is monitored for correct positioning at all times including before a shift can occur. In the event of a fault (such as a fork being stuck in the wrong position), rather than skip shift, the transmission will remain in whatever gear is currently driving. Full limp home skip shifting is planned for a future update.

Copyright © 2026 Emtron Australia Pty Ltd

ZF 8HP

Models

Caution

Currently, only 8HP models with 16 pin connectors are compatible. Models with only 10 pins do not have the required IO to allow an external TCM.

ModelSupportComment
8HP45YGen 1
8HP50YGen 2
8HP51N*Gen 3 *Requires Gen 2 valve body
8HP70YGen 1
8HP75YGen 2
8HP76N*Gen 3 *Requires Gen 2 valve body
8HP90YGen 1
8HP95YGen 2

Base Calibration

A base calibration based on the 8HP70 is included with TMtune. Solenoid pressure translation tables are also included separately.


Wiring

Mechatronics Modifications

In order to control the 8HP transmission, the internal mechatronics unit must be bypassed and the control signals routed externally.

  1. Remove the mechatronics assembly from the transmission.
  2. Cut the lid off the OEM TCM enclosure.
  3. Cut all the fine wire connections between the OEM TCM and the interface pads.
  4. Wire connections between pads as follows…
Caution

22 AWG or 24 AWG Tefzel wire should be used to bridge connections as it can withstand the temperatures and oil present inside the transmission.

For simplicity and compatibility we’re using the same pin designations as the DomiWorks 8HP Wiring Kit.

IO Pin (A)Internal Pin (B/C)
A1C2
A2C3
A3C4
A4C16
A5C13
A6C14
A7B2
A8B3
A9B4
A10B5
A11B6
A12B10, B11, B12, B13
A13B10, B11, B12, B13
A14C12
A15C12
A16B7
A17B8
A18B9

8HP Mechatronics Modified 8HP Mechatronics Modified

8HP Mechatronics Pins 8HP Mechatronics Pins

8HP Mechatronics Modified 8HP Mechatronics Modified

Potting

We have found that potting the modified mechatronics units with compounds such as R125 has resulted in repeated failures. There appears to be a negative interaction between R125 and the oil used in the 8HP transmissions. The most reliable results we have seen have come from NOT potting the internal connections.

Gearbox Connector

8HP Connector Pinout 8HP Connector Pinout

Important

Pinout assumes mechatronic modifications have been completed as detailed above.

PinFunctionTCM Pin *1
1Sensor 0V RefSensor GND (A9)
2Line Pressure SolenoidSol 6 (B15)
3Speed Sensor 8V Supply8V Out (C18)
4Accumulator SolenoidSol 10 (B19)
5Park Hold SolenoidSol 9 (B18)
6Park Release SolenoidSol 8 (B17)
7Clutch C SolenoidSol 3 (B12)
8Input Shaft Speed SignalDI 1 (A18)
9Clutch E SolenoidSol 5 (B14)
10Output Shaft Speed SignalDI 2 (A19)
11Brake A SolenoidSol 1 (B10)
12TC Lockup SolenoidSol 7 (B16)
13Trans Fluid Temp SensorAn 1 (A1)
14Solenoid Power SupplySol +V Out (B30+B31) *2
15 (Gen 1)Clutch D SolenoidSol 4 (B13) *3
15 (Gen 2)Brake B SolenoidSol 4 (B13) *3
16 (Gen 1)Brake B SolenoidSol 2 (B11) *3
17 (Gen 2)Clutch D SolenoidSol 2 (B11) *3

1. This pinout matches the supplied 8HP base calibration. You’re free to alter the TCM pin assignments as long as the change is reflected in the config.

2. Ideally each 4 solenoids would have a separate supply bank, but this isn’t possible using the OEM connector. Connecting to two bridged solenoid supplies will suffice.

3. To cater for Gen 1 vs Gen 2, swap the Brake B / Clutch D solenoid assignment in config OR swap pins 15 / 16 in the wiring harness.


Speed Sensors

  • Input Shaft Speed
  • Output Shaft Speed

The sensors are 2-wire hall effect type, however the polarity of the internal wiring means the dedicated hall sensor inputs on the TCM cannot be used. Instead, the sensors can be wired to Digital Inputs 1 to 8. The internal 330R pulldown must to be enabled.

In this arrangement, the signal voltage will sit at around 2V when stationary, and pulse up to around 4V when a tooth passes the sensor.

8HP Speed Sensor Arming 8HP Speed Sensor Arming

The high and low arming thresholds must be set correctly to detect the speed signal. The low threshold must be ABOVE the sensor voltage at rest, and the high threshold must be BELOW the maximum voltage when the sensor is active.

Speed Sensor Calibration

ModelInput Shaft SpeedOutput Shaft Speed
8HP5028 Teeth40 Teeth
8HP7030 Teeth40 Teeth

Solenoids

The ZF 8HP contains nine solenoids. All but the park-release/hold solenoids are Variable‐Force Solenoids (VSF). The park‐release and park‐hold are on/off.

Shift Elements

The 8HP uses the following “shift elements”:

  • Two fixed multidisc brakes (brake A and B)
  • Three rotary multidisc clutches (clutch C, D and E).

The multidisc clutches (C, D and E) feed the drive torque to the planetary gear. The multidisc brakes (A and B) support the torque against the transmission housing.

SolenoidShift ElementNote
Clutch Solenoid ABrake AVFS, normally vented (no pressure when off).
Clutch Solenoid BBrake BVFS, normally vented (no pressure when off).
Clutch Solenoid CClutch CVFS, normally applied (high pressure when off).
Clutch Solenoid DClutch DVFS, normally applied (high pressure when off).
Clutch Solenoid EClutch EVFS, normally applied (high pressure when off).

Line Pressure Solenoid

VFS, normally applied. Modulates the valve-body pressure regulator to maintain the transmission’s main hydraulic (line) pressure under all operating conditions.

Torque Converter Clutch (TCC) Solenoid

VFS, normally vented. Controls apply pressure to the lock-up piston in the torque converter for smooth lock/unlock transitions.

Park Release Solenoid

On/Off, normally open. When energized, it directs line pressure to the park-release valve to retract the parking pawl, allowing selection of Drive or Reverse.

Park Hold Solenoid

Mechanical. Clips onto and holds the park-release piston in its disengaged position after the pawl is withdrawn. Does not flow hydraulic oil.


Clutch Geometry

The following data is provided as a guide based on the best information available at time of writing.

8HP70

ClutchPlates (S/D)Friction ID/OD (mm)Piston ID/OD (mm)
Brake A5 (D)126.0 / 144.099.5 / 144.1
Brake B5 (D)176.0 / 196.0168.9 / 206.5
Clutch C6 (D)139.0 / 163.044.8 / 95.7
Clutch D4 (D)149.0 / 172.047.5 / 126.7
Clutch E5 (D)139.0 / 163.046.0 / 116.0

Gear Sequencing

By engaging different combinations of the five shift elements listed above, the transmission obtains each of its eight forward ratios (plus reverse).

GearBrake ABrake BClutch CClutch DClutch E
P
RXXX
N
1XXX
2XXX
3XXX
4XXX
5XXX
6XXX
7XXX
8XXX

Clutch Gear Load Factor

The ratio of input torque that each clutch/brake element carries for a given gear.

GearBrake ABrake BClutch CClutch DClutch E
R0.3332.594-3.296-
N--—--
10.3333.6951.000--
20.3332.463--0.667
3-1.1031.000-1.000
4-1.111-1.6661.000
5-0.6731.0001.284-
6--1.0001.0001.000
70.220-1.0001.739-
80.222--0.6660.666

Pressure Control

The 8HP does not have any pressure sensors. This means that all internal pressures are inferred from solenoid current. Because the TCM uses pressure targets it’s important to get the solenoid pressure translations as accurate as possible. The supplied 8HP base calibration includes pressure translation tables taken from OEM roms. In most cases these do not need to be changed.

Optionally, you may enable Line Pressure and/or Clutch Pressure estimations to give feedback based on actual solenoid activity and fluid temperature.

Copyright © 2026 Emtron Australia Pty Ltd

Subsections of OEM

BMW F-Series Shifter

F-Series shifter integration is available in firmware v0.35.0 or above.


Wiring

PinFunction
1-
2-
3CAN 1 L
4CAN 1 H
5CAN 2 L (NC)
6CAN 2 H (NC)
7Ignition Switch +12V
8GND
9-
10Battery +12V
Only CAN 1 is required.

CAN Configuration

Important

The shifter operates at a CAN bitrate of 500K. All devices on the bus must operate at the same speed.

Enable the shifter by setting an available CAN Channel mode to BMW F-Seres Shifter.


Switch Inputs

The F-Series shifter will appear to the TCM as a collection of individual switches rather than a Shifter Position Input.

Each of the following switch inputs must have their input source set to CAN (Preset).

SwitchNote
Park Request SwitchButton at top of shifter. Available from Neutral or Reverse. Unlock button on RHS required to exit Park.
Reverse Request SwitchActive when pushed fully forward (2 notches) from Neutral. Unlock button on RHS required.
Neutral Request SwitchActive when pushed forward while from Drive or pulled backward from reverse.
Drive Mode SwitchActive when pulled backward from Neutral, or fully backward (2 notches) from Park with Unlock button.
Manual Override SwitchActive when shifter is pushed left into M/S position. Must be in Drive first.
Up Shift SwitchActive when pulled backwards from left M/S position
Down Shift SwitchActive when pushed forwards from left M/S position
Info

If Drive/Manual is exited while the shifter is in the left M/S position, the shifter will move itself back to the centre rest position.


Backlight Brightness

The brightness of the shifter’s illumination backlight is controlled by the CAN Shifter Brightness table found under OEM Functions.

Copyright © 2026 Emtron Australia Pty Ltd

TMtune Release Notes

Loading release notes…