Showing preview only (590K chars total). Download the full file or copy to clipboard to get everything.
Repository: janimm/RealDash-extras
Branch: master
Commit: cedfdf491b53
Files: 75
Total size: 560.9 KB
Directory structure:
gitextract_56dij45d/
├── CanPlayback/
│ ├── canplayback.py
│ └── readme.md
├── Dashboard-animation-examples/
│ ├── Multiview.rd
│ ├── Multiview_anim.xml
│ ├── README.md
│ ├── RealDash_animation_example.rd
│ ├── RealDash_animation_example_anim.xml
│ ├── value_anim_example.rd
│ └── value_anim_example_anim.xml
├── LICENSE
├── OBD2/
│ ├── README.md
│ ├── realdash_obd2.xml
│ ├── realdash_obd2_Itelma_M73_E3.xml
│ ├── realdash_obd2_bosch_mp70.xml
│ ├── realdash_obd2_fiat_precan.xml
│ ├── realdash_obd2_gm_ls.xml
│ ├── realdash_obd2_january_5_1.xml
│ ├── realdash_obd2_mitsubishi_mut.xml
│ ├── realdash_obd2_nissan_generic.xml
│ ├── realdash_obd2_opel_kwp2000.xml
│ ├── realdash_obd2_saab_generic.xml
│ ├── realdash_obd2_toyota_celica_corolla_camry.xml
│ ├── realdash_obd2_toyota_gt86.xml
│ ├── realdash_obd2_toyota_jdm_generic.xml
│ ├── realdash_obd2_toyota_jdm_iso9141.xml
│ ├── realdash_obd2_toyota_rav4_supra_lexus_is.xml
│ ├── realdash_obd2_toyota_vitz.xml
│ ├── realdash_obd2_volvo_noncan1.xml
│ └── realdash_obd2_volvo_noncan2.xml
├── README.md
└── RealDash-CAN/
├── Arduino-examples/
│ ├── README.md
│ ├── RealDash_CAN/
│ │ └── RealDash_CAN.ino
│ ├── RealDash_CAN_2way/
│ │ └── RealDash_CAN_2way.ino
│ ├── realdash_can_arduino_test.rd
│ └── realdash_can_example.xml
├── README.md
├── XML-files/
│ ├── AEM/
│ │ ├── aem_22_unit1.xml
│ │ ├── aem_22_unit2.xml
│ │ ├── aem_6_can.xml
│ │ └── aem_infinity.xml
│ ├── Adaptronic/
│ │ ├── adaptronic_can_full.xml
│ │ └── adaptronic_can_simple.xml
│ ├── BMW/
│ │ ├── BMW335i.xml
│ │ ├── BMW_R1200GS_K25_CAN.xml
│ │ └── bmw_siemens_ms42_can.xml
│ ├── Ecumaster/
│ │ ├── ecumaster_emublack.xml
│ │ └── ecumaster_gps.xml
│ ├── Edelbrock/
│ │ └── edelbrock_proflo4.xml
│ ├── Emerald/
│ │ └── emerald_k3_k6.xml
│ ├── Emtron/
│ │ └── emtron_packet_1.xml
│ ├── Flagtronics/
│ │ └── flagtronics_can_v0_4.xml
│ ├── GM/
│ │ ├── gm_ls7_can.xml
│ │ ├── gm_ls_can.xml
│ │ └── gm_ls_can_full.xml
│ ├── Grayhill/
│ │ └── grayhill_touch_encoder.xml
│ ├── Haltech/
│ │ ├── haltech_v2_can.xml
│ │ └── haltech_v3_can.xml
│ ├── Holley/
│ │ ├── dominator_and_terminator_x_can.xml
│ │ ├── holley_efi_can.xml
│ │ └── sniper_v2_can.xml
│ ├── Life Racing/
│ │ └── life_racing_default_can.xml
│ ├── Link/
│ │ ├── displaylink.xml
│ │ └── link_dash2pro.xml
│ ├── MaxxECU/
│ │ └── maxxecu_default_can.xml
│ ├── Megasquirt/
│ │ ├── megasquirt_dashmode_can.xml
│ │ └── megasquirt_realtime_data_broadcasting_can.xml
│ ├── OBR/
│ │ └── obr_euro_8.xml
│ ├── SCS-Delta/
│ │ └── scs-delta.xml
│ ├── syvecs/
│ │ └── syvecs_default_can.xml
│ ├── toyota/
│ │ ├── toyota_corolla_e150.xml
│ │ └── toyota_fj_can.xml
│ ├── tpms/
│ │ └── tiremagic_tpms.xml
│ └── turbolamik/
│ └── turbolamik_tcu.xml
├── realdash-can-description-file.md
└── realdash-can-protocol.md
================================================
FILE CONTENTS
================================================
================================================
FILE: CanPlayback/canplayback.py
================================================
"""
canplayback.py
This program reads a RealDash CAN log file and streams the CAN frames from log
to RealDash.
Usage:
- Start the canplayback program
$ python3 canplayback.py CSVFILE PORT
- Start RealDash and create 'RealDash CAN' connection
- Configure connection to IP address and port shown by the canplayback program
"""
import socket
import csv
import time
import sys
def get_next_line(csvfile):
line = csvfile.readline()
if not line:
csvfile.seek(0)
_ = csvfile.readline()
line = csvfile.readline()
return line
def send_next_frame(client, csvfile):
line = get_next_line(csvfile)
if line:
values = next(csv.reader([line], delimiter = ',', skipinitialspace=True))
#index = values[0]
#time = values[1]
#channel = values[2]
#direction = values[3]
#frame_id = values[4]
#frame_data = values[5]
print("send:", values[4], values[5])
frame_id = int(values[4], 0)
client.sendall(bytes([0x44, 0x33, 0x22, 0x11]))
client.sendall(frame_id.to_bytes(4, 'little'))
frame_data = [int(value, 16) for value in values[5].split(' ') if value != 'x|']
frame_data.extend([0] * (8 - len(frame_data)))
client.sendall(bytes(frame_data))
#time.sleep(0.01)
def main(filename, port):
with open(filename) as csvfile:
_ = csvfile.readline()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("localhost", port))
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.listen(2)
print("Listening at", server.getsockname())
try:
while True:
client, address = server.accept()
print("Connected to ", address)
try:
while True:
send_next_frame(client, csvfile)
except Exception as e:
print(e)
client.close()
csvfile.seek(0)
_ = csvfile.readline()
print("Listening at", server.getsockname())
except (KeyboardInterrupt, Exception):
server.close()
if __name__ == "__main__":
CSV_FILE = sys.argv[1]
port = int(sys.argv[2])
main(CSV_FILE, port)
================================================
FILE: CanPlayback/readme.md
================================================
# **RealDash-extras**
RealDash examples and technical materials
All materials in this repository are licensed with [NoLicense](https://github.com/janimm/RealDash/blob/master/LICENSE)
[realdash.net](https://www.realdash.net)
## **CanPlayback**
This is a simple tool to stream RealDash CAN frames from CAN log files recorded in RealDash CAN Monitor. Usage:
$ python3 canplayback.py CSVFILE PORT
For example:
$ python3 canplayback.py rdcan_2023-03-31_11-33-36.csv 35000
Limitations:
- Only works on <=8 byte frames (0x11223344 frames).
- Frames with less than 8 bytes are padded with zeroes.
- Has no timing, it pushes the frames as quickly as possible.
- Enable 'time.sleep(0.01)' in the code to slow down.
- Has no proper error checking
================================================
FILE: Dashboard-animation-examples/Multiview_anim.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RealDash>
<!-- NOTE: groups in animation XML are depricated and will be removed from future versions of RealDash. -->
<!-- Instead of groups, use the container gauge to animate multiple gauges with single animation. -->
<!-- Deprication of groups from animation XML does not affect released dashboards as animation XML is not contained in dash files. -->
<groups>
<group name="Drive mode values">
<gauge name="Speed value"></gauge>
<gauge name="RPM value"></gauge>
<gauge name="Boost value"></gauge>
<gauge name="Odo value"></gauge>
<gauge name="Trip value"></gauge>
</group>
<group name="Drive mode units">
<gauge name="Speed unit"></gauge>
<gauge name="RPM text"></gauge>
<gauge name="Boost unit"></gauge>
<gauge name="Odo unit"></gauge>
<gauge name="Trip unit"></gauge>
</group>
<group name="RPM arc gauge">
<gauge name="RPM arc gauge"></gauge>
<gauge name="RPM arc gauge background"></gauge>
</group>
<group name="Boost arc gauge">
<gauge name="Boost + arc gauge"></gauge>
<gauge name="Boost - arc gauge"></gauge>
<gauge name="Boost arc gauge background"></gauge>
</group>
<group name="Gear">
<gauge name="Gear value"></gauge>
<gauge name="Gear value N"></gauge>
<gauge name="Gear value R"></gauge>
</group>
<group name="Warning lights">
<gauge name="Oil indicator"></gauge>
<gauge name="Check engine indicator"></gauge>
<gauge name="Door indicator"></gauge>
<gauge name="Battery indicator"></gauge>
<gauge name="Brake indicator"></gauge>
<gauge name="High beam indicator"></gauge>
<gauge name="Turn signal left"></gauge>
<gauge name="Turn signal right"></gauge>
</group>
<group name="Coolant gauge">
<gauge name="Coolant gauge"></gauge>
<gauge name="Coolant background"></gauge>
</group>
<group name="Fuel level gauge">
<gauge name="Fuel level gauge"></gauge>
<gauge name="Fuel level background"></gauge>
</group>
<group name="Car info backgrounds">
<gauge name="CLT graph background"></gauge>
<gauge name="IAT graph background"></gauge>
<gauge name="AFR graph background"></gauge>
<gauge name="ADV graph background"></gauge>
<gauge name="RPM graph background"></gauge>
<gauge name="MAP graph background"></gauge>
</group>
<group name="Info panel speed">
<gauge name="Speed value info panel"></gauge>
<gauge name="Speed unit info panel"></gauge>
</group>
<group name="Info">
<gauge name="Avg speed text"></gauge>
<gauge name="Avg speed unit"></gauge>
<gauge name="Avg speed value"></gauge>
<gauge name="Fuel consumption text"></gauge>
<gauge name="Fuel consumption unit"></gauge>
<gauge name="Fuel consumption value"></gauge>
<gauge name="Avg fuel consumption text"></gauge>
<gauge name="Avg fuel consumption unit"></gauge>
<gauge name="Avg fuel consumption value"></gauge>
</group>
<group name="Graphs">
<gauge name="CLT graph"></gauge>
<gauge name="IAT graph"></gauge>
<gauge name="AFR graph"></gauge>
<gauge name="ADV graph"></gauge>
<gauge name="RPM graph"></gauge>
<gauge name="MAP graph"></gauge>
</group>
<group name="Graph texts">
<gauge name="CLT text graph"></gauge>
<gauge name="CLT value graph"></gauge>
<gauge name="IAT text graph"></gauge>
<gauge name="IAT value graph"></gauge>
<gauge name="AFR text graph"></gauge>
<gauge name="AFR value graph"></gauge>
<gauge name="ADV text graph"></gauge>
<gauge name="ADV value graph"></gauge>
<gauge name="RPM text graph"></gauge>
<gauge name="RPM value graph"></gauge>
<gauge name="MAP text graph"></gauge>
<gauge name="MAP value graph"></gauge>
</group>
<group name="Speedlimit">
<gauge name="Speedlimit value"></gauge>
<gauge name="Speedlimit background"></gauge>
</group>
<group name="Music info">
<gauge name="Song title small"></gauge>
<gauge name="Artist name small"></gauge>
<gauge name="Break line"></gauge>
</group>
<group name="Now playing">
<gauge name="Now playing line"></gauge>
<gauge name="Now playing text"></gauge>
</group>
<group name="Song info">
<gauge name="Artist name music player"></gauge>
<gauge name="Album name music player"></gauge>
</group>
<group name="Playback controls">
<gauge name="Previous track"></gauge>
<gauge name="Play/Pause"></gauge>
<gauge name="Next track"></gauge>
</group>
</groups>
<animations>
<!-- Active mode indicator -->
<animation name="drive-mode" type="morph" target="Active page" end="0.000000000000000,0.212130069732666,0.057812452316284,0.314907848834991" duration="0.3" easing="QuadInOut"></animation>
<animation name="car-info-mode" type="morph" target="Active page" end="0.000000000000000,0.396018981933594,0.057812452316284,0.498796999454498" duration="0.3" easing="QuadInOut"></animation>
<animation name="map-mode" type="morph" target="Active page" end="0.000000000000000,0.582685172557831,0.057812452316284,0.685463190078735" duration="0.3" easing="QuadInOut"></animation>
<animation name="music-player-mode" type="morph" target="Active page" end="0.000000000000000,0.767499804496765,0.057812452316284,0.870277822017670" duration="0.3" easing="QuadInOut"></animation>
<!-- Active mode name -->
<animation name="drive-mode-text-move-in" type="morph" target="Drive mode text" start="0.117083251476288,0.185007512569427,0.256667554378510,0.208156585693359" end="0.117083251476288,0.167414903640747,0.256667554378510,0.190563917160034" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="drive-mode-text-fade-in" type="fade" target="Drive mode text" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="drive-mode-text-move-out" type="morph" target="Drive mode text" end="0.117083251476288,0.149822235107422,0.256667554378510,0.172971308231354" duration="0.3" easing="QuadIn"></animation>
<animation name="drive-mode-text-fade-out" type="fade" target="Drive mode text" end="0.0" duration="0.3" easing="QuadIn"></animation>
<animation name="car-info-mode-text-move-in" type="morph" target="Car info mode text" start="0.117083251476288,0.185007512569427,0.256667554378510,0.208156585693359" end="0.117083251476288,0.167414903640747,0.256667554378510,0.190563917160034" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="car-info-mode-text-fade-in" type="fade" target="Car info mode text" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="car-info-mode-text-move-out" type="morph" target="Car info mode text" end="0.117083251476288,0.149822235107422,0.256667554378510,0.172971308231354" duration="0.3" easing="QuadIn"></animation>
<animation name="car-info-mode-text-fade-out" type="fade" target="Car info mode text" end="0.0" duration="0.3" easing="QuadIn"></animation>
<animation name="map-mode-text-move-in" type="morph" target="Map mode text" start="0.117083251476288,0.185007512569427,0.256667554378510,0.208156585693359" end="0.117083251476288,0.167414903640747,0.256667554378510,0.190563917160034" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="map-mode-text-fade-in" type="fade" target="Map mode text" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="map-mode-text-move-out" type="morph" target="Map mode text" end="0.117083251476288,0.149822235107422,0.256667554378510,0.172971308231354" duration="0.3" easing="QuadIn"></animation>
<animation name="map-mode-text-fade-out" type="fade" target="Map mode text" end="0.0" duration="0.3" easing="QuadIn"></animation>
<animation name="music-player-mode-text-move-in" type="morph" target="Music player mode text" start="0.117083251476288,0.185007512569427,0.256667554378510,0.208156585693359" end="0.117083251476288,0.167414903640747,0.256667554378510,0.190563917160034" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="music-player-mode-text-fade-in" type="fade" target="Music player mode text" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="music-player-mode-text-move-out" type="morph" target="Music player mode text" end="0.117083251476288,0.149822235107422,0.256667554378510,0.172971308231354" duration="0.3" easing="QuadIn"></animation>
<animation name="music-player-mode-text-fade-out" type="fade" target="Music player mode text" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Drive mode values -->
<animation name="drive-mode-values-move-in" type="morph" group="Drive mode values" start="0.220104217529297,0.505925893783569,0.837604939937592,0.965551137924194" end="0.220104217529297,0.425370275974274,0.837604939937592,0.884997963905334" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="drive-mode-values-fade-in" type="fade" group="Drive mode values" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="drive-mode-values-move-out" type="morph" group="Drive mode values" end="0.220104217529297,0.385555386543274,0.837604939937592,0.845184326171875" duration="0.3" easing="QuadIn"></animation>
<animation name="drive-mode-values-fade-out" type="fade" group="Drive mode values" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Drive mode units -->
<animation name="drive-mode-units-move-in" type="morph" group="Drive mode units" start="0.220104217529297,0.581108927726746,0.837604939937592,0.943701326847076" end="0.220104217529297,0.559813261032104,0.837604939937592,0.922405660152435" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="drive-mode-units-fade-in" type="fade" group="Drive mode units" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="drive-mode-units-move-out" type="morph" group="Drive mode units" end="0.220104217529297,0.522777318954468,0.837604939937592,0.885369718074799" duration="0.3" easing="QuadIn"></animation>
<animation name="drive-mode-units-fade-out" type="fade" group="Drive mode units" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Speed arc gauge -->
<animation name="speed-arc-gauge-move-in" type="morph" target="Speed arc gauge" start="0.376042068004608,0.289351642131805,0.681771159172058,0.832870006561279" end="0.376042068004608,0.266203463077545,0.681771159172058,0.809721767902374" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="speed-arc-gauge-fade-in" type="fade" target="Speed arc gauge" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="speed-arc-gauge-move-out" type="morph" target="Speed arc gauge" end="0.376042068004608,0.238425612449646,0.681771159172058,0.781943917274475" duration="0.3" easing="QuadIn"></animation>
<animation name="speed-arc-gauge-fade-out" type="fade" target="Speed arc gauge" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- RPM arc gauge -->
<animation name="rpm-arc-gauge-move-in" type="morph" group="RPM arc gauge" end="0.357552468776703,0.236018478870392,0.699739456176758,0.844350874423981" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="rpm-arc-gauge-fade-in" type="fade" group="RPM arc gauge" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="rpm-arc-gauge-move-out" type="morph" group="RPM arc gauge" end="0.347135961055756,0.236018478870392,0.689322948455811,0.844350874423981" duration="0.3" easing="QuadIn"></animation>
<animation name="rpm-arc-gauge-fade-out" type="fade" group="RPM arc gauge" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Boost arc gauge -->
<animation name="boost-arc-gauge-move-in" type="morph" group="Boost arc gauge" end="0.357552468776703,0.236018478870392,0.699739456176758,0.844350874423981" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="boost-arc-gauge-fade-in" type="fade" group="Boost arc gauge" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="boost-arc-gauge-move-out" type="morph" group="Boost arc gauge" end="0.367968976497650,0.236018478870392,0.710155963897705,0.844350874423981" duration="0.3" easing="QuadIn"></animation>
<animation name="boost-arc-gauge-fade-out" type="fade" group="Boost arc gauge" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Gear break line -->
<animation name="gear-break-line-move-in" type="morph" target="Gear break line" end="0.194271504878998,0.378724455833435,0.210938632488251,0.703734040260315" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="gear-break-line-fade-in" type="fade" target="Gear break line" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="gear-break-line-move-out" type="morph" target="Gear break line" end="0.194271504878998,0.477798759937286,0.210938632488251,0.599107503890991" duration="0.3" easing="QuadIn"></animation>
<animation name="gear-break-line-fade-out" type="fade" target="Gear break line" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Gear -->
<animation name="gear-move-in" type="morph" group="Gear" end="0.152187883853912,0.409814953804016,0.200104117393494,0.657222568988800" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="gear-fade-in" type="fade" group="Gear" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="gear-move-out" type="morph" group="Gear" end="0.128229260444641,0.409814953804016,0.176145434379578,0.657222568988800" duration="0.3" easing="QuadIn"></animation>
<animation name="gear-fade-out" type="fade" group="Gear" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Warning lights -->
<animation name="warning-lights-move-in" type="morph" group="Warning lights" start="0.321093678474426,0.188148319721222,0.727342426776886,0.388518750667572" end="0.321093678474426,0.158518612384796,0.727342426776886,0.358889043331146" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="warning-lights-fade-in" type="fade" group="Warning lights" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="warning-lights-move-out" type="morph" group="Warning lights" end="0.321093678474426,0.114074051380157,0.727342426776886,0.314444482326508" duration="0.3" easing="QuadIn"></animation>
<animation name="warning-lights-fade-out" type="fade" group="Warning lights" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Coolant gauge -->
<animation name="coolant-gauge-move-in" type="morph" group="Coolant gauge" end="0.719791710376740,0.849907159805298,0.954687416553497,0.930462658405304" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="coolant-gauge-fade-in" type="fade" group="Coolant gauge" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="coolant-gauge-move-out" type="morph" group="Coolant gauge" end="0.719791710376740,0.979861140251160,0.954687416553497,1.060416698455811" duration="0.3" easing="QuadIn"></animation>
<animation name="coolant-gauge-fade-out" type="fade" group="Coolant gauge" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Fuel level gauge -->
<animation name="fuel-level-gauge-move-in" type="morph" group="Fuel level gauge" end="0.098958313465118,0.849907100200653,0.333854317665100,0.930462718009949" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="fuel-level-gauge-fade-in" type="fade" group="Fuel level gauge" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="fuel-level-gauge-move-out" type="morph" group="Fuel level gauge" end="0.098958313465118,0.979861080646515,0.333854317665100,1.060416698455811" duration="0.3" easing="QuadIn"></animation>
<animation name="fuel-level-gauge-fade-out" type="fade" group="Fuel level gauge" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Car info backgrounds -->
<animation name="car-info-backgrounds-move-in" type="morph" group="Car info backgrounds" end="0.343750000000000,0.143518984317780,0.954476058483124,0.931020081043243" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="car-info-backgrounds-fade-in" type="fade" group="Car info backgrounds" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="car-info-backgrounds-move-out" type="morph" group="Car info backgrounds" end="0.343750000000000,0.212963581085205,0.954476058483124,1.000462174415588" duration="0.3" easing="QuadIn"></animation>
<animation name="car-info-backgrounds-fade-out" type="fade" group="Car info backgrounds" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Info panel -->
<animation name="info-panel-move-in" type="morph" target="Info panel" end="0.098958313465118,0.143425703048706,0.333854198455811,0.930462718009949" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="info-panel-fade-in" type="fade" target="Info panel" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="info-panel-move-out" type="morph" target="Info panel" end="0.098958313465118,0.212870299816132,0.333854198455811,0.999907612800598" duration="0.3" easing="QuadIn"></animation>
<animation name="info-panel-fade-out" type="fade" target="Info panel" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Info panel speed -->
<animation name="info-panel-speed-move-in" type="morph" group="Info panel speed" end="0.128125369548798,0.319814741611481,0.305729627609253,0.501849770545959" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="info-panel-speed-fade-in" type="fade" group="Info panel speed" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="info-panel-speed-move-out" type="morph" group="Info panel speed" end="0.128125369548798,0.357777774333954,0.305729627609253,0.539811611175537" duration="0.3" easing="QuadIn"></animation>
<animation name="info-panel-speed-fade-out" type="fade" group="Info panel speed" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Info -->
<animation name="info-move-in" type="morph" group="Info" end="0.117083251476288,0.596674323081970,0.316666841506958,0.797417163848877" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="info-fade-in" type="fade" group="Info" end="1.0" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="info-move-out" type="morph" group="Info" end="0.117083251476288,0.636487960815430,0.316666841506958,0.837230801582336" duration="0.3" easing="QuadIn"></animation>
<animation name="info-fade-out" type="fade" group="Info" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Graphs -->
<animation name="graphs-move-in" type="morph" group="Graphs" end="0.359374821186066,0.249535560607910,0.939369916915894,0.903704702854156" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="graphs-fade-in" type="fade" group="Graphs" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="graphs-move-out" type="morph" group="Graphs" end="0.359374821186066,0.274535596370697,0.939369916915894,0.928703963756561" duration="0.3" easing="QuadIn"></animation>
<animation name="graphs-fade-out" type="fade" group="Graphs" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Graph texts -->
<animation name="graph-texts-move-in" type="morph" group="Graph texts" end="0.362292170524597,0.162129878997803,0.936039447784424,0.734815835952759" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="graph-texts-fade-in" type="fade" group="Graph texts" end="1.0" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="graph-texts-move-out" type="morph" group="Graph texts" end="0.362292170524597,0.186204016208649,0.936039447784424,0.758889198303223" duration="0.3" easing="QuadIn"></animation>
<animation name="graph-texts-fade-out" type="fade" group="Graph texts" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Map -->
<animation name="map-move-in" type="morph" target="Map" end="0.000000000000000,0.000000000000000,1.370827674865723,1.000000000000000" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="map-fade-in" type="fade" target="Map" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="map-move-out" type="morph" target="Map" end="0.000000000000000,0.200000000000000,1.370827674865723,1.200000000000000" duration="0.3" easing="QuadIn"></animation>
<animation name="map-fade-out" type="fade" target="Map" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Speedlimit -->
<animation name="speedlimit-move-in" type="morph" group="Speedlimit" end="0.268022060394287,0.243796348571777,0.327395975589752,0.324351787567139" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="speedlimit-fade-in" type="fade" group="Speedlimit" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="speedlimit-move-out" type="morph" group="Speedlimit" end="0.268022060394287,0.282685339450836,0.327395975589752,0.363240778446198" duration="0.3" easing="QuadIn"></animation>
<animation name="speedlimit-fade-out" type="fade" group="Speedlimit" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Music player background -->
<animation name="music-player-background-fade-in" type="fade" target="Music player background" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="music-player-background-fade-out" type="fade" target="Music player background" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Music info -->
<animation name="music-info-move-in" type="morph" group="Music info" end="0.185312807559967,0.013209462165833,0.813746929168701,0.088209271430969" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="music-info-fade-in" type="fade" group="Music info" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="music-info-move-out" type="morph" group="Music info" end="0.185312807559967,-0.056249856948853,0.813746929168701,0.018749952316284" duration="0.3" easing="QuadIn"></animation>
<animation name="music-info-fade-out" type="fade" group="Music info" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Now playing -->
<animation name="now-playing-move-in" type="morph" group="Now playing" start="0.117083251476288,0.307542383670807,0.294687509536743,0.369442045688629" end="0.117083251476288,0.278838574886322,0.294687509536743,0.340738236904144" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="now-playing-fade-in" type="fade" group="Now playing" end="1.0" duration="0.3" delay="0.2" easing="QuadOut"></animation>
<animation name="now-playing-move-out" type="morph" group="Now playing" end="0.117083251476288,0.243653297424316,0.294687509536743,0.305552959442139" duration="0.3" easing="QuadIn"></animation>
<animation name="now-playing-fade-out" type="fade" group="Now playing" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Song title -->
<animation name="song-title-move-in" type="morph" target="Song title music player" start="0.113749921321869,0.510737538337708,0.605932652950287,0.594994783401489" end="0.113749921321869,0.435737669467926,0.605932652950287,0.519997000694275" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="song-title-fade-in" type="fade" target="Song title music player" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="song-title-move-out" type="morph" target="Song title music player" end="0.113749921321869,0.381107866764069,0.605932652950287,0.465367853641510" duration="0.3" easing="QuadIn"></animation>
<animation name="song-title-fade-out" type="fade" target="Song title music player" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Playback controls -->
<animation name="playback-controls-move-in" type="morph" group="Playback controls" start="0.639062523841858,0.827777802944183,0.904374539852142,0.921295940876007" end="0.639063000679016,0.772306978702545,0.904375016689301,0.865824997425079" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="playback-controls-fade-in" type="fade" group="Playback controls" end="1.0" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="playback-controls-move-out" type="morph" group="Playback controls" end="0.639063000679016,0.716753005981445,0.904375016689301,0.810271143913269" duration="0.3" easing="QuadIn"></animation>
<animation name="playback-controls-fade-out" type="fade" group="Playback controls" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Album art -->
<animation name="album-art-move-in" type="morph" target="Album art" start="0.638541638851166,0.303703665733337,0.904166698455811,0.775921523571014" end="0.638541698455811,0.229629993438721,0.904166698455811,0.701847791671753" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="album-art-fade-in" type="fade" target="Album art" end="1.0" duration="0.3" delay="0.5" easing="QuadOut"></animation>
<animation name="album-art-move-out" type="morph" target="Album art" end="0.638541638851166,0.174074053764343,0.904166698455811,0.646291851997375" duration="0.3" easing="QuadIn"></animation>
<animation name="album-art-fade-out" type="fade" target="Album art" end="0.0" duration="0.3" easing="QuadIn"></animation>
<!-- Song info -->
<animation name="song-info-move-in" type="morph" group="Song info" start="0.113749921321869,0.632033169269562,0.605932712554932,0.720552206039429" end="0.113749921321869,0.587590038776398,0.605932712554932,0.676109075546265" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="song-info-fade-in" type="fade" group="Song info" end="1.0" duration="0.3" delay="0.8" easing="QuadOut"></animation>
<animation name="song-info-move-out" type="morph" group="Song info" end="0.113749921321869,0.550554096698761,0.605932712554932,0.639073133468628" duration="0.3" easing="QuadIn"></animation>
<animation name="song-info-fade-out" type="fade" group="Song info" end="0.0" duration="0.3" easing="QuadIn"></animation>
</animations>
<triggers>
<!-- name="name of the trigger" -->
<!-- condition="larger(default)|smaller|equal" -->
<!-- variable="name of the variable, only dummy variables and dummy timers are supported" -->
<!-- tolerance="value to trigger on" for example, if condition="smaller" and tolerance="1", trigger will fire if variable is less than 1 -->
<!-- reset="value to reset (allow trigger to fire again)" this is an inverse of condition, trigger is reset if variable is larger than 1 -->
<!-- cooldown="seconds until this trigger can fire again" -->
<trigger name="Drive mode" condition="equal" variable="Dummy variable 1" tolerance="0.00" reset="0.00" cooldown="0.00">
<actions>
<!-- Drive mode -->
<action name="drive-mode"></action>
<action name="drive-mode-text-move-in"></action>
<action name="drive-mode-text-fade-in"></action>
<action name="drive-mode-values-move-in"></action>
<action name="drive-mode-values-fade-in"></action>
<action name="drive-mode-units-move-in"></action>
<action name="drive-mode-units-fade-in"></action>
<action name="speed-arc-gauge-move-in"></action>
<action name="speed-arc-gauge-fade-in"></action>
<action name="rpm-arc-gauge-move-in"></action>
<action name="rpm-arc-gauge-fade-in"></action>
<action name="boost-arc-gauge-move-in"></action>
<action name="boost-arc-gauge-fade-in"></action>
<action name="gear-break-line-move-in"></action>
<action name="gear-break-line-fade-in"></action>
<action name="gear-move-in"></action>
<action name="gear-fade-in"></action>
<action name="warning-lights-move-in"></action>
<action name="warning-lights-fade-in"></action>
<action name="coolant-gauge-move-in"></action>
<action name="coolant-gauge-fade-in"></action>
<action name="fuel-level-gauge-move-in"></action>
<action name="fuel-level-gauge-fade-in"></action>
<action name="music-info-move-in"></action>
<action name="music-info-fade-in"></action>
<!-- Car info mode -->
<action name="car-info-mode-text-move-out"></action>
<action name="car-info-mode-text-fade-out"></action>
<action name="car-info-backgrounds-move-out"></action>
<action name="car-info-backgrounds-fade-out"></action>
<action name="info-panel-move-out"></action>
<action name="info-panel-fade-out"></action>
<action name="info-panel-speed-move-out"></action>
<action name="info-panel-speed-fade-out"></action>
<action name="info-move-out"></action>
<action name="info-fade-out"></action>
<action name="graphs-move-out"></action>
<action name="graphs-fade-out"></action>
<action name="graph-texts-move-out"></action>
<action name="graph-texts-fade-out"></action>
<!-- Map mode -->
<action name="map-mode-text-move-out"></action>
<action name="map-mode-text-fade-out"></action>
<action name="map-move-out"></action>
<action name="map-fade-out"></action>
<action name="speedlimit-move-out"></action>
<action name="speedlimit-fade-out"></action>
<!-- Music player mode -->
<action name="music-player-mode-text-move-out"></action>
<action name="music-player-mode-text-fade-out"></action>
<action name="music-player-background-fade-out"></action>
<action name="now-playing-move-out"></action>
<action name="now-playing-fade-out"></action>
<action name="song-title-move-out"></action>
<action name="song-title-fade-out"></action>
<action name="playback-controls-move-out"></action>
<action name="playback-controls-fade-out"></action>
<action name="album-art-move-out"></action>
<action name="album-art-fade-out"></action>
<action name="song-info-move-out"></action>
<action name="song-info-fade-out"></action>
</actions>
</trigger>
<trigger name="Car info mode" condition="equal" variable="Dummy variable 1" tolerance="1.00" reset="0.00" cooldown="0.00">
<actions>
<!-- Car info mode -->
<action name="car-info-mode"></action>
<action name="car-info-mode-text-move-in"></action>
<action name="car-info-mode-text-fade-in"></action>
<action name="car-info-backgrounds-move-in"></action>
<action name="car-info-backgrounds-fade-in"></action>
<action name="info-panel-move-in"></action>
<action name="info-panel-fade-in"></action>
<action name="info-panel-speed-move-in"></action>
<action name="info-panel-speed-fade-in"></action>
<action name="info-move-in"></action>
<action name="info-fade-in"></action>
<action name="graphs-move-in"></action>
<action name="graphs-fade-in"></action>
<action name="graph-texts-move-in"></action>
<action name="graph-texts-fade-in"></action>
<action name="fuel-level-gauge-move-in"></action>
<action name="fuel-level-gauge-fade-in"></action>
<action name="music-info-move-in"></action>
<action name="music-info-fade-in"></action>
<!-- Drive mode -->
<action name="drive-mode-text-move-out"></action>
<action name="drive-mode-text-fade-out"></action>
<action name="drive-mode-values-move-out"></action>
<action name="drive-mode-values-fade-out"></action>
<action name="drive-mode-units-move-out"></action>
<action name="drive-mode-units-fade-out"></action>
<action name="speed-arc-gauge-move-out"></action>
<action name="speed-arc-gauge-fade-out"></action>
<action name="rpm-arc-gauge-move-out"></action>
<action name="rpm-arc-gauge-fade-out"></action>
<action name="boost-arc-gauge-move-out"></action>
<action name="boost-arc-gauge-fade-out"></action>
<action name="gear-break-line-move-out"></action>
<action name="gear-break-line-fade-out"></action>
<action name="gear-move-out"></action>
<action name="gear-fade-out"></action>
<action name="warning-lights-move-out"></action>
<action name="warning-lights-fade-out"></action>
<action name="coolant-gauge-move-out"></action>
<action name="coolant-gauge-fade-out"></action>
<!-- Map mode -->
<action name="map-mode-text-move-out"></action>
<action name="map-mode-text-fade-out"></action>
<action name="map-move-out"></action>
<action name="map-fade-out"></action>
<action name="speedlimit-move-out"></action>
<action name="speedlimit-fade-out"></action>
<!-- Music player mode -->
<action name="music-player-mode-text-move-out"></action>
<action name="music-player-mode-text-fade-out"></action>
<action name="music-player-background-fade-out"></action>
<action name="now-playing-move-out"></action>
<action name="now-playing-fade-out"></action>
<action name="song-title-move-out"></action>
<action name="song-title-fade-out"></action>
<action name="playback-controls-move-out"></action>
<action name="playback-controls-fade-out"></action>
<action name="album-art-move-out"></action>
<action name="album-art-fade-out"></action>
<action name="song-info-move-out"></action>
<action name="song-info-fade-out"></action>
</actions>
</trigger>
<trigger name="Map mode" condition="equal" variable="Dummy variable 1" tolerance="2.00" reset="0.00" cooldown="0.00">
<actions>
<!-- Map mode -->
<action name="map-mode"></action>
<action name="map-move-in"></action>
<action name="map-fade-in"></action>
<action name="map-mode-text-move-in"></action>
<action name="map-mode-text-fade-in"></action>
<action name="info-panel-move-in"></action>
<action name="info-panel-fade-in"></action>
<action name="info-panel-speed-move-in"></action>
<action name="info-panel-speed-fade-in"></action>
<action name="info-move-in"></action>
<action name="info-fade-in"></action>
<action name="speedlimit-move-in"></action>
<action name="speedlimit-fade-in"></action>
<action name="fuel-level-gauge-move-in"></action>
<action name="fuel-level-gauge-fade-in"></action>
<action name="music-info-move-in"></action>
<action name="music-info-fade-in"></action>
<!-- Car info mode -->
<action name="car-info-mode-text-move-out"></action>
<action name="car-info-mode-text-fade-out"></action>
<action name="car-info-backgrounds-move-out"></action>
<action name="car-info-backgrounds-fade-out"></action>
<action name="graphs-move-out"></action>
<action name="graphs-fade-out"></action>
<action name="graph-texts-move-out"></action>
<action name="graph-texts-fade-out"></action>
<!-- Drive mode -->
<action name="drive-mode-text-move-out"></action>
<action name="drive-mode-text-fade-out"></action>
<action name="drive-mode-values-move-out"></action>
<action name="drive-mode-values-fade-out"></action>
<action name="drive-mode-units-move-out"></action>
<action name="drive-mode-units-fade-out"></action>
<action name="speed-arc-gauge-move-out"></action>
<action name="speed-arc-gauge-fade-out"></action>
<action name="rpm-arc-gauge-move-out"></action>
<action name="rpm-arc-gauge-fade-out"></action>
<action name="boost-arc-gauge-move-out"></action>
<action name="boost-arc-gauge-fade-out"></action>
<action name="gear-break-line-move-out"></action>
<action name="gear-break-line-fade-out"></action>
<action name="gear-move-out"></action>
<action name="gear-fade-out"></action>
<action name="warning-lights-move-out"></action>
<action name="warning-lights-fade-out"></action>
<action name="coolant-gauge-move-out"></action>
<action name="coolant-gauge-fade-out"></action>
<!-- Music player mode -->
<action name="music-player-mode-text-move-out"></action>
<action name="music-player-mode-text-fade-out"></action>
<action name="music-player-background-fade-out"></action>
<action name="now-playing-move-out"></action>
<action name="now-playing-fade-out"></action>
<action name="song-title-move-out"></action>
<action name="song-title-fade-out"></action>
<action name="playback-controls-move-out"></action>
<action name="playback-controls-fade-out"></action>
<action name="album-art-move-out"></action>
<action name="album-art-fade-out"></action>
<action name="song-info-move-out"></action>
<action name="song-info-fade-out"></action>
</actions>
</trigger>
<trigger name="Music player mode" condition="equal" variable="Dummy variable 1" tolerance="3.00" reset="0.00" cooldown="0.00">
<actions>
<!-- Music player mode -->
<action name="music-player-mode"></action>
<action name="music-player-mode-text-move-in"></action>
<action name="music-player-mode-text-fade-in"></action>
<action name="music-player-background-fade-in"></action>
<action name="now-playing-move-in"></action>
<action name="now-playing-fade-in"></action>
<action name="song-title-move-in"></action>
<action name="song-title-fade-in"></action>
<action name="playback-controls-move-in"></action>
<action name="playback-controls-fade-in"></action>
<action name="album-art-move-in"></action>
<action name="album-art-fade-in"></action>
<action name="song-info-move-in"></action>
<action name="song-info-fade-in"></action>
<!-- Map mode -->
<action name="map-mode-text-move-out"></action>
<action name="map-mode-text-fade-out"></action>
<action name="map-move-out"></action>
<action name="map-fade-out"></action>
<action name="speedlimit-move-out"></action>
<action name="speedlimit-fade-out"></action>
<action name="fuel-level-gauge-move-out"></action>
<action name="fuel-level-gauge-fade-out"></action>
<action name="music-info-move-out"></action>
<action name="music-info-fade-out"></action>
<!-- Car info -->
<action name="car-info-mode-text-move-out"></action>
<action name="car-info-mode-text-fade-out"></action>
<action name="car-info-backgrounds-move-out"></action>
<action name="car-info-backgrounds-fade-out"></action>
<action name="info-panel-move-out"></action>
<action name="info-panel-fade-out"></action>
<action name="info-panel-speed-move-out"></action>
<action name="info-panel-speed-fade-out"></action>
<action name="info-move-out"></action>
<action name="info-fade-out"></action>
<action name="graphs-move-out"></action>
<action name="graphs-fade-out"></action>
<action name="graph-texts-move-out"></action>
<action name="graph-texts-fade-out"></action>
<!-- Drive mode -->
<action name="drive-mode-text-move-out"></action>
<action name="drive-mode-text-fade-out"></action>
<action name="drive-mode-values-move-out"></action>
<action name="drive-mode-values-fade-out"></action>
<action name="drive-mode-units-move-out"></action>
<action name="drive-mode-units-fade-out"></action>
<action name="speed-arc-gauge-move-out"></action>
<action name="speed-arc-gauge-fade-out"></action>
<action name="rpm-arc-gauge-move-out"></action>
<action name="rpm-arc-gauge-fade-out"></action>
<action name="boost-arc-gauge-move-out"></action>
<action name="boost-arc-gauge-fade-out"></action>
<action name="gear-break-line-move-out"></action>
<action name="gear-break-line-fade-out"></action>
<action name="gear-move-out"></action>
<action name="gear-fade-out"></action>
<action name="warning-lights-move-out"></action>
<action name="warning-lights-fade-out"></action>
<action name="coolant-gauge-move-out"></action>
<action name="coolant-gauge-fade-out"></action>
</actions>
</trigger>
</triggers>
</RealDash>
================================================
FILE: Dashboard-animation-examples/README.md
================================================
# **Dashboard animation examples**
How to create animated dashboards with RealDash.
- Name the animation XML file as *dashboardname_anim.xml*
- Place the animation XML file into same folder with *.rd* file
- On Windows version of RealDash, use *File* menu *Import* option to import the XML file (in edit mode).
* This is required since Windows Store apps are not allowed to access files without user interaction.
- When XML has changed, reload the .rd file, or press *F2* on Windows to reload the dash and apply changes.
- Every time .rd file is saved it also contains all animations, there is no need to distribute the XML with .rd file.
**NOTE**
The *groups* and *group* attributes will not be supported in future versions of RealDash. To animate multiple gauges with one animation, use a Container Gauge in RealDash. Container gauge accepts all animation types and applies the animation to all contained gauges. Removal of the support for *groups* in XML does not affect the functionality of previously published dashboards.
## **Files**
| file | description |
|:--------|:----------:|
| RealDash_animation_example.rd</br>RealDash_animation_example_anim.xml | Example dashboard that demonstrates most common animation techniques. |
| value_anim_example.rd</br>value_anim_example_anim.xml | Example of how to animate gauges based on input values. Requires RealDash version 2.4.7 or newer. |
| Multiview.rd</br>Multiview_anim.xml | Multiview dashboard and associated animation XML file. Multiview is available for free in RealDash gallery. |
## **Animations**
### **Animation types**
| type | description |
|:--------|:----------:|
| morph | animate the area of the gauge. Use CTRL+Q in RealDash to copy gauge area to clipboard. |
| position | animate gauge position. Use SHIFT+Q in RealDash to copy gauge center position to clipboard. |
| fade | fade gauge |
| value-morph | animate the area of the gauge based on input value. Requires RealDash version 2.4.7 or newer. |
| value-fade | fade gauge based on input value. Requires RealDash version 2.4.7 or newer. |
### **Animation easing types**
Animations use easing. Multiple easing types are available for animations.
Each easing type may have postfix In, Out, or InOut. Default for all is InOut.
Default easing for all animations is SineInOut.
Examples of easing in action: [https://matthewlein.com/tools/ceaser]
| type |
|:--------|
| Back(In, Out, InOut) |
| Bounce(In, Out, InOut) |
| Circ(In, Out, InOut) |
| Cubic(In, Out, InOut) |
| Elastic(In, Out, InOut) |
| Expo(In, Out, InOut) |
| Linear(In, Out, InOut) |
| Quad(In, Out, InOut) |
| Quart(In, Out, InOut) |
| Quint(In, Out, InOut) |
| Sine(In, Out, InOut) |
[realdash.net](https://www.realdash.net)
================================================
FILE: Dashboard-animation-examples/RealDash_animation_example_anim.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RealDash>
<animations>
<!-- 1st page: S I N G L E G A U G E A N I M A T I O N S -->
<!-- Animations for hiding the RPM needle gauge. "end" is gauge opacity (scale 0-1). -->
<animation name="fade-in-rpm" type="fade" target="RPM needle gauge" end="1.0" duration="0.3"></animation>
<animation name="fade-out-rpm" type="fade" target="RPM needle gauge" end="0.0" duration="0.3"></animation>
<!-- Animations for moving the RPM needle gauge. "end" is gauge center position, you can copy gauge position from RealDash with SHIFT+Q. -->
<animation name="move-rpm-top" type="position" target="RPM needle gauge" end="0.204573631286621,0.311304569244385" duration="0.3" easing="QuadOut"></animation>
<animation name="move-rpm-center" type="position" target="RPM needle gauge" end="0.204573631286621,0.497511565685272" duration="0.3" easing="QuadOut"></animation>
<animation name="move-rpm-bottom" type="position" target="RPM needle gauge" end="0.204573631286621,0.726477205753326" duration="0.3" easing="QuadOut"></animation>
<!-- 2nd page: C O N T A I N E R A N I M A T I O N S -->
<!-- Animations for hiding the Speed Container. "end" is gauge opacity (scale 0-1). -->
<animation name="fade-in-speed-container" type="fade" target="Speed Container" end="1.0" duration="0.3"></animation>
<animation name="fade-out-speed-container" type="fade" target="Speed Container" end="0.0" duration="0.3"></animation>
<!-- Animations for moving the Speed Container. "end" is gauge area, you can copy gauge area from RealDash with CTRL+Q. -->
<animation name="move-speed-container-top" type="morph" target="Speed Container" end="0.037662863731384,0.055070161819458,0.314941763877869,0.656040966510773" duration="0.3" easing="QuadOut"></animation>
<animation name="move-speed-container-center" type="morph" target="Speed Container" end="0.037662863731384,0.241277158260345,0.314941763877869,0.842247962951660" duration="0.3" easing="QuadOut"></animation>
<animation name="move-speed-container-bottom" type="morph" target="Speed Container" end="0.037662863731384,0.398518621921539,0.314941763877869,0.999489367008209" duration="0.3" easing="QuadOut"></animation>
<!-- 3rd page: O T H E R E X A M P L E S A N I M A T I O N S -->
<animation name="fade-out-gauge-2" type="fade" target="Gauge 2" end="0.0" duration="0.3"></animation>
<animation name="fade-in-gauge-2" type="fade" target="Gauge 2" end="1.0" duration="0.3"></animation>
<animation name="move-gauge-container-top" type="morph" target="Gauge Container" end="0.133333265781403,0.066104650497437,0.866666615009308,0.454993665218353" duration="0.3" easing="QuadOut"></animation>
<animation name="move-gauge-1-top" type="morph" target="Gauge 1" end="0.227001130580902,0.078081190586090,0.390214920043945,0.435125350952148" duration="0.3" easing="QuadOut"></animation>
<animation name="move-gauge-2-top" type="morph" target="Gauge 2" end="0.418971776962280,0.078081011772156,0.582185745239258,0.435125589370728" duration="0.3" easing="QuadOut"></animation>
<animation name="move-gauge-3-top" type="morph" target="Gauge 3" end="0.610942482948303,0.078081429004669,0.774156033992767,0.435125172138214" duration="0.3" easing="QuadOut"></animation>
<animation name="move-gauge-container-center" type="morph" target="Gauge Container" end="0.133333325386047,0.237037003040314,0.866666615009308,0.625926017761230" duration="0.3" easing="QuadOut"></animation>
<animation name="move-gauge-1-bottom" type="morph" target="Gauge 1" end="0.076586723327637,0.301762461662292,0.408829927444458,0.798237562179565" duration="0.6" easing="BounceOut"></animation>
<animation name="move-gauge-2-bottom" type="morph" target="Gauge 2" end="0.333878397941589,0.301762461662292,0.666121602058411,0.798237562179565" duration="0.6" delay="0.3" easing="BounceOut"></animation>
<animation name="move-gauge-3-bottom" type="morph" target="Gauge 3" end="0.597476899623871,0.301762461662292,0.929720044136047,0.798237562179565" duration="0.6" delay="0.6" easing="BounceOut"></animation>
</animations>
<triggers>
<!-- S I N G L E G A U G E T R I G G E R S -->
<!-- name="name of the trigger" -->
<!-- condition="larger(default)|smaller|equal" -->
<!-- variable="name of the variable, only dummy variables and dummy timers are supported" -->
<!-- tolerance="value to trigger on" for example, if condition="smaller" and tolerance="1", trigger will fire if variable is less than 1 -->
<!-- reset="value to reset (allow trigger to fire again)" this is an inverse of condition, trigger is reset if variable is larger than 1 -->
<!-- cooldown="seconds until this trigger can fire again" -->
<!-- Triggers for hiding and showing the RPM needle gauge. This is for action type "Rotate value up". -->
<trigger name="Show RPM" condition="smaller" variable="Dummy 01" tolerance="1.00" reset="1.00" cooldown="0.0">
<actions>
<action name="fade-in-rpm"></action>
</actions>
</trigger>
<trigger name="Hide RPM" condition="larger" variable="Dummy 01" tolerance="0.0" reset="0.0" cooldown="0.0">
<actions>
<action name="fade-out-rpm"></action>
</actions>
</trigger>
<!-- Triggers for moving the RPM needle gauge. This is for action type "Set value". -->
<trigger name="Move RPM to top" condition="equal" variable="Dummy 02" tolerance="0.0" reset="0.0" cooldown="0.0">
<actions>
<action name="move-rpm-top"></action>
</actions>
</trigger>
<trigger name="Move RPM to center" condition="equal" variable="Dummy 02" tolerance="1.00" reset="1.00" cooldown="0.0">
<actions>
<action name="move-rpm-center"></action>
</actions>
</trigger>
<trigger name="Move RPM to bottom" condition="equal" variable="Dummy 02" tolerance="2.00" reset="2.00" cooldown="0.0">
<actions>
<action name="move-rpm-bottom"></action>
</actions>
</trigger>
<!-- Triggers for hiding and showing the Speed Container. This is for action type "Rotate value up". -->
<trigger name="Show Speed container" condition="smaller" variable="Dummy 03" tolerance="1.00" reset="1.00" cooldown="0.0">
<actions>
<action name="fade-in-speed-container"></action>
</actions>
</trigger>
<trigger name="Hide Speed container" condition="larger" variable="Dummy 03" tolerance="0.0" reset="0.0" cooldown="0.0">
<actions>
<action name="fade-out-speed-container"></action>
</actions>
</trigger>
<!-- Triggers for moving the Speed Container. This is for action type "Set value". -->
<trigger name="Move Speed container to top" condition="equal" variable="Dummy 04" tolerance="0.0" reset="0.0" cooldown="0.0">
<actions>
<action name="move-speed-container-top"></action>
</actions>
</trigger>
<trigger name="Move Speed container to center" condition="equal" variable="Dummy 04" tolerance="1.00" reset="1.00" cooldown="0.0">
<actions>
<action name="move-speed-container-center"></action>
</actions>
</trigger>
<trigger name="Move Speed container to bottom" condition="equal" variable="Dummy 04" tolerance="2.00" reset="2.00" cooldown="0.0">
<actions>
<action name="move-speed-container-bottom"></action>
</actions>
</trigger>
<!-- O T H E R E X A M P L E S T R I G G E R S -->
<trigger name="Move Gauges to top" condition="equal" variable="Dummy 05" tolerance="0.0" reset="0.0" cooldown="0.0">
<actions>
<action name="fade-in-gauge-2"></action> <!-- For setting Gauge 2 back to visible. -->
<action name="move-gauge-container-top"></action>
<action name="move-gauge-1-top"></action>
<action name="move-gauge-2-top"></action>
<action name="move-gauge-3-top"></action>
</actions>
</trigger>
<trigger name="Move Gauges to center and fade out Gauge 2" condition="equal" variable="Dummy 05" tolerance="1.00" reset="1.00" cooldown="0.0">
<actions>
<action name="fade-out-gauge-2"></action>
<action name="move-gauge-container-center"></action>
</actions>
</trigger>
<trigger name="Move Gauges to bottom with delay" condition="equal" variable="Dummy 05" tolerance="2.00" reset="2.00" cooldown="0.0">
<actions>
<action name="fade-in-gauge-2"></action> <!-- For setting Gauge 2 back to visible. -->
<action name="move-gauge-1-bottom"></action>
<action name="move-gauge-2-bottom"></action>
<action name="move-gauge-3-bottom"></action>
</actions>
</trigger>
</triggers>
</RealDash>
================================================
FILE: Dashboard-animation-examples/value_anim_example_anim.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RealDash>
<!-- This example shows how to make value based gauge animations -->
<!-- NOTE: Still in BETA. Requires RealDash 2.4.7-prerel1 or newer -->
<animations>
<!-- animation types "value-morph" and "value-fade" are used to animate gauge area or transparency based on an input value -->
<!-- attributes 'valueId' and 'range' must be provided. attribute 'duration' is not used as animation is not time based -->
<animation name="speedo-value-morph" type="value-morph" target="Speedo Needle" start="0.472807109355927,0.431491911411285,0.527192890644073,0.568508028984070" end="0.350000083446503,0.215531468391418,0.649999916553497,0.784468412399292" valueId="64" range="0-300"></animation>
<animation name="speedo-value-fade" type="value-fade" target="Speedo Needle" start="0.0" end="1.0" valueId="64" range="0-250"></animation>
<animation name="rpm-value-morph" type="value-morph" target="Rpm Needle" start="0.806337773799896,0.456851065158844,0.840438544750214,0.542762398719788" end="0.587664425373077,0.096483051776886,1.013212442398071,0.903516888618469" valueId="37" range="0-6000"></animation>
<animation name="rpm-value-fade" type="value-fade" target="Rpm Needle" start="0.0" end="1.0" valueId="37" range="0-6000"></animation>
<!-- morph and fade animations are used to restore the state of the gauges -->
<!-- these animations omit the 'start' attribute; that effectively starts the animation from gauges current position/fade -->
<animation name="speedo-back" type="morph" target="Speedo Needle" end="0.350000083446503,0.215531468391418,0.649999916553497,0.784468412399292" duration="0.1"></animation>
<animation name="speedo-back-fade" type="fade" target="Speedo Needle" end="1.0" duration="0.1"></animation>
<animation name="rpm-back" type="morph" target="Rpm Needle" end="0.587664425373077,0.096483051776886,1.013212442398071,0.903516888618469" duration="0.1"></animation>
<animation name="rpm-back-fade" type="fade" target="Rpm Needle" end="1.0" duration="0.1"></animation>
</animations>
<triggers>
<!-- buttons on the dashboard toggle Dummy 01 and Dummy 02 on values between 0 and 1 -->
<!-- if Dummy 01 is greater than 0.5 start the animations in 'actions' -->
<!-- typically this is used to activate animations defined in this file, but any valid action name can be used -->
<!-- reset="0" means that this trigger can fire again if Dummy 01 is set to 0 -->
<trigger name="Activate speedo-value-morph" condition=">" variable="Dummy 01" value="0.5" reset="0">
<actions>
<!-- activate speedometer value based animations -->
<action name="speedo-value-morph"></action>
<action name="speedo-value-fade"></action>
</actions>
</trigger>
<!-- once started, the value based animations run as long as they are replaced with other animation -->
<!-- here, when Dummy 01 changes to 0, non-value based animations are activated to bring gauges back to original state -->
<trigger name="Deactivate speedo-value-morph" condition="<" variable="Dummy 01" value="0.5" reset="1">
<actions>
<action name="speedo-back"></action>
<action name="speedo-back-fade"></action>
</actions>
</trigger>
<!-- repeats the same as above, but with Dummy 02 and RPM gauge animations -->
<trigger name="Activate rpm-value-morph" condition=">" variable="Dummy 02" value="0.5" reset="0">
<actions>
<action name="rpm-value-morph"></action>
<action name="rpm-value-fade"></action>
</actions>
</trigger>
<trigger name="Deactivate rpm-value-morph" condition="<" variable="Dummy 02" value="0.5" reset="1">
<actions>
<action name="rpm-back"></action>
<action name="rpm-back-fade"></action>
</actions>
</trigger>
</triggers>
</RealDash>
================================================
FILE: LICENSE
================================================
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>
================================================
FILE: OBD2/README.md
================================================
# **RealDash-extras**
[realdash.net](https://www.realdash.net)
## **OBD2**
This folder contains OBD2 XML description files used by default in RealDash. These can be used as starting points for custom modifications.
| file | description |
|:--------|:----------:|
| realdash_obd2.xml | RealDash default OBD2 description file.</br>This file is bundled with RealDash app and used as a default. |
| realdash_obd2_bosch_mp70.xml | Description file for 'Bosch mp7.0' ECU |
| realdash_obd2_january_5_1.xml | Description file for 'January 5.1' ECU |
## **OBD2 XML description file**
The communication between OBD2 (via ELM327 compatible adapter) is described for RealDash in a XML text file and is fully customizable.
Note that while there are some similarities, the OBD2 XML file is **not** in same format as [RealDash CAN XML file](../RealDash-CAN/README.md).
The XML file starts and ends with **OBD2** tags and contains two main sections, **init** and **rotation**.
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<!-- contains 'init' and 'rotation' sections-->
</OBD2>
## **The 'init' section**
The commands in init section are send after RealDash has connected to ELM327 adapter. In case you need to activate custom headers or other initialization, this is the correct section to add required commands. Here is the **init** section from RealDash default OBD2 XML:
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="atsp0"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
The **init** section contains list of commands to send. Note that **atl0**, **ate0**, and **ats0** commands are required for RealDash to correctly parse the replys.
The commands **0100** and **0120** are the first ones that expect reply from the vehicle. Their reply contains information on vehicle supported PIDs. When RealDash sends these commands, you will see the *Checking PID support* message in RealDash.
There is good info on standard OBD2 PIDs on [Wikipedia](https://en.wikipedia.org/wiki/OBD-II_PIDs) page.
## **The 'rotation' section**
After commands in init section are sent and responses received, RealDash starts sending the commands in rotation section. These commands are sent to OBD2 until connection is terminated. Here is one command in rotation section as an example:
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command>
**command** tag parameters are:
### **send**
This is the command to send to adapter. In above example **010c**, which is command to request engine RPM.
### **skipCount**
Number of times to skip sending this command. This value can be used to request a certain values less frequently and therefore get more time critical data faster. For example, using 5 as **skipCount** would send the command and later skip sending the command 5 times before sending it again. For some values like ambient temperature **skipCount** can be relatively large value, like 60. Default skipCount is 0.
### **targetId**
This value links the received value into RealDash input. The **targetId="37"** writes the received value to RealDash RPM input. Check out full listing of [RealDash targetIds](https://www.realdash.net/manuals/targetid.php).
### **name [optional to targetId]**
Instead of mapping the value to existing RealDash input, **name** parameter can be used to create new input into RealDash *ECU Specific* category. Name parameter is used only if **targetId** is not present in command. Example:
<command send="010c" skipCount="0" name="MYECU: Special RPM" conversion="V/4"></command>
Note that above example do not use the **targetId**, but **name** instead. When RealDash reads the XML file, a new custom input is created into *ECU Specific* category called **MYECU: Special RPM**. New custom input can be used like any other input in RealDash for gauges and triggers/actions.
Note: if you make your own dashboard that links into custom inputs, remember that other users need to have same XML available for the dashboard to work correctly. Another solution would be to make the dashboard use [RealDash build-in inputs](https://www.realdash.net/manuals/targetid.php) and use the *Input Mapping* feature in RealDash *Settings->Units & Values->Input Mapping*.
### **conversion [optional]**
The **conversion** is a formula that is applied to received value. For example, **conversion="V/4"** takes incoming value and divides it by 4 before writing the value to its input. Conversion can be any valid mathematical formula with these variables:
* V (VALUE). This is the entire returned value as is (all received bytes).
* B0 - First byte of the reply (reading from left)
* B1 - Second byte of the reply
* ...
* B256
* ...
### **conversionABC [optional]**
The **conversionABC** is otherwise identical with **conversion**, but bytes are identified with **A,B,C,...,AA,AB,AC,...**, etc. This makes it easier to convert the Equation from other popular apps. For example **conversion="B0+15*(B1-43)"** and **conversionABC="A+15*(B-43)"** produce the same result.
### **Conversion examples**
conversion="V/10"
- result is incoming value / 10
conversion="B0+15*(B1-43)"
- result is first byte + 15 * (second byte - 43)
### **units [optional]**
Optional info to apply automatic unit conversions. Valid values are **units="C"**, **units="F"**, **units="km/h"**, **units="mph"**, **units="bar"**, **units="psi"**, **units="text"**, **units="bit"**.
If units is set to **bit** the value is considered to be an on/off (0 or 1) valued. RealDash reads the **bit** value from the lowest bit. Therefore there is a need for a bitshift to the right on conversion. For example **conversion="(V>>1)"** will read second bit on incoming value.
The **units="text"** can be used to see the OBD2 reply 'as-is' in RealDash text gauge. This is mainly for development/debug purposes.
### **header [optional]**
Header to set before sending the command. The full AT command to set the header must be specified. If all commands use same header, its best to be placed in **init** section. If rotation uses two or more headers, set the header for every command. Examples of **header** usage:
<command send="010c" header="atsh7e0" skipCount="0" targetId="37" conversion="V/4"></command>
<command send="2010" header="atsh7e5" skipCount="0" name="MYECU: custom value 1" conversion="V/4"></command>
### **ecu [optional]**
The **ecu** parameter specifies which ECU reply to use as the value in case multiple ECUs are replying to the request. Possible values are *first* (default value), *last*, or the ECU identifier, for example *7E8*. Values *first* and *last* takes the according ECU reply in alphabetical order.
<command send="221940" skipcount="5" targetId="138" units="C" ecu="7EA" conversion="B0-40" ></command> <!-- GM Trans fluid temp -->
The above example uses **ecu** to read GM transmission fluid temperature. As typical LS vehicle sends this info from two ECUs (7E8 and 7EA), the **ecu** parameter is used to specify that we want to read the value from ECU 7E8.
### **enum [optional]**
With **enum** parameter, the values in data can be directly interpreted as a text or another value. **enum** is a list of comma separated *value:display value* pairs. For example:
<command send="221951" skipCount="3" name="OBD2: GM Shifter position" enum="72:P,24:R,80:N,48:D,120:S,40:S2,#:err"></command>
The above example uses **enum** to show shifter position as a character in RealDash. If value is 72, the character '**P**' is shown. If value is 24, the character '**R**' is shown, and so on. The hash tag **#** is used as default value, which in above example would show text **err**.
In addition, **enum** supports a range of values with *tilde* **~** operator. For example:
<value name="Custom Shifter position" offset="7" length="1" enum="0~10:P,11~20:R,21~100:N,150~200:D,#:err"></value>
### **rawReply [optional]**
If **command** section contains attribute **rawReply="true"**, every reply byte, including any header bytes are regarded as data bytes. This allows to use custom commands on which the reply does not follow typical ELM327 reply.
### **keepInRotation [optional] (from RealDash 2.4.2)**
RealDash has a feature that removes commands from the rotation if there is no valid response from the vehicle with multiple attempts on the row. Removing invalid/non-supported PID will help respond faster to other PID requests. **keepInRotation="true"** attribute allows to disable automatic removal of commands from the rotation.
### **Receive multiple values on one command**
It is possible to receive multiple values for one sent command. The individual values are listed in **command** as **values**. The parameters for the **value** are the same as with command with only one target value.
<command send="2101" skipCount="0">
<values>
<value targetId="37" conversion="B11*40"></value>
<value targetId="81" units="km/h" conversion="B17"></value>
<value targetId="12" conversion="(B18*12.8/255)+5.2"></value>
<value targetId="14" units="C" conversion="B8-40"></value>
<value targetId="42" conversion="B10"></value>
<value targetId="35" conversion="B22*2.04/255+B23*522.24/255"></value>
<value targetId="0" conversion="14.7*(B9+128)/256"></value>
<value targetId="30" conversion="B26*42.5/255+B27*10880/255"></value>
</values>
</command>
## **How to import customized XML to RealDash**
1. Save your XML file to a place that is accessible from your device running RealDash.
2. Open RealDash Go to Garage, open vehicle door and tap the instrument cluster
3. On the *Connections* list, tap your OBD2 connection.
4. Tap *Select Vehicle* button and then scroll down to find *Custom Channel Description File* and browse to your XML file.
5. Tap the upper left corner *Done* button and exit the Garage.
6. RealDash will reconnect and use your custom XML file for communications.
## **OBD2 communication optimization settings**
RealDash has two settings that may increase the data rate on some vehicles. You can access these settings:
### **Use Multipid Request**
This setting works if you have relatively new vehicle with CAN bus. When this option is enabled, RealDash constructs a *multipid* request command and if supported by vehicle can receive multiple values in one reply. This will considerably increase the data rate. On older vehicles this setting may slow down the time to connect to vehicle and therefore its disabled by default.
### **Request Only First Reply**
On newer vehicles some requested information may be contained in several modules. For example engine RPM may be stored in ECU and TCU of the vehicle. Enabling this option will instruct the adapter to respond with first available value and not wait until all modules have responeded to the request. This may increase the data rate in some cases.
================================================
FILE: OBD2/realdash_obd2.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
RealDash OBD2 communication description file.
Requires RealDash version 1.5.8 or newer
-->
<OBD2>
<init>
<!-- after first init command is sent, RealDash reads whatever data comes from serial during next 1500ms.
This is done to purge the serial buffers. -->
<!-- do not remove 'atl0', 'ate0', or 'ats0' commands. Those settings are assumed when parsing the
reply from adapter. -->
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="atsp0"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<!-- 'send' command to send to OBD2 adapter -->
<!-- 'targetId' links value to RealDash input, see realdash.net/manuals/targetid.php for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, if name is unknown to RealDash, input appears in 'ECU Specific' input category -->
<!-- 'skipCount' number of skips in rotation for that value. Higher the value less frequently its read -->
<!-- 'units' optional info only for automatic unit conversion system. "C","F","km/h","mph","bar","psi","bit".
If units="bit", RealDash always checks the lowest bit as of value on or off. Therefore the bitshift to the right on
conversion, for example conversion="(V>>1)" will read second bit on incoming value -->
<!-- 'header' sets OBD2 header for this command. The full AT command to set the header must be included.
Note that header is not reset automatically on next command, so usually when header is in use it has to be set to all commands.
If all commands use same header, its best to be placed in 'init' section.
Examples:
header="ATSH685AF1"
header="ATSHDA10F1" -->
<!-- 'conversion' if omitted, value is read 'as-is'. Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within
conversion formula, for example:
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" are the same -->
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_Itelma_M73_E3.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
RealDash OBD2 communication description file.
Requires RealDash version 2.0.1 or newer
A special channel descriptions for "Russian Special - Itelma/Avtel M73 E3"
-->
<OBD2>
<init>
<!-- after first init command is sent, RealDash reads whatever data comes from serial during next 1500ms.
This is done to purge the serial buffers. -->
<!-- do not remove 'atl0', 'ate0', or 'ats0' commands. Those settings are assumed when parsing the
reply from adapter. -->
<command send="atd"></command>
<command send="atz"></command>
<command send="atl0"></command>
<command send="ate0"></command>
<command send="ats0"></command>
<command send="atsp5"></command>
<command send="atal"></command>
<command send="atib10"></command>
<command send="atsh8110f1"></command>
<command send="atst32"></command>
<command send="atsw00"></command>
<command send="atfi"></command>
</init>
<!-- 'send' command to send to OBD2 adapter -->
<!-- 'targetId' links value to RealDash input, see realdash.net/manuals/targetid.php for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, if name is unknown to RealDash, input appears in 'ECU Specific' input category -->
<!-- 'skipCount' number of skips in rotation for that value. Higher the value less frequently its read -->
<!-- 'units' [optional] info for automatic unit conversion system. "C","F","km/h","mph","bar","psi","bit".
If units="bit", RealDash always checks the lowest bit as of value on or off. Therefore the bitshift to the right on
conversion, for example conversion="(V>>1)" will read second bit on incoming value -->
<!-- 'header' [optional] sets OBD2 header for this command. The full AT command to set the header must be included.
Note that header is not reset automatically on next command, so usually when header is in use it has to be set to all commands.
If all commands use same header, its best to be placed in 'init' section.
Examples:
header="ATSH685AF1"
header="ATSHDA10F1" -->
<!-- 'conversion' [optional] if omitted, value is read 'as-is'.
Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within conversion formula, for example;
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- From RealDash version 1.6.6, 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the individual bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" produce the same result -->
<!-- conversion values from ABC style to RealDash B# style
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,B49,B50,B51
AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ
-->
<rotation>
<command send="2101" skipCount="0">
<values>
<value targetId="37" conversion="(B7*10200)/255"></value><!--RPM-->
<value targetId="81" units="km/h" conversion="(B5*318.8)/255"></value><!--Speed-->
<value targetId="12" conversion="(B4*18.79)/255"></value><!--Batt voltage-->
<value targetId="14" units="C" conversion="B2*0.75-48"></value><!--CLT-->
<value targetId="42" conversion="B6*99.6/255"></value><!--TPS-->
<value targetId="35" conversion="B16*256+(B17*0.024)"></value><!--PW1-->
<value targetId="30" conversion="(B8*6528)/255+(B9/10)"></value><!--MAF-->
<value targetId="100" conversion="(B12*1530)/255+(B13*5.98)/255"></value><!--Engine Load-->
<value targetId="254" conversion="B27*15.938/255+(B28*0.062/255)"></value><!--Lambda1-->
<value name="Itelma/Avtel M73 E3: Number of errors" conversion="B0"></value>
<value name="Itelma/Avtel M73 E3: Error code" conversion="B0*255"></value>
<value name="Itelma/Avtel M73 E3: MAF voltage" conversion="B8*0.019535"></value>
<value name="Itelma/Avtel M73 E3: UOZ" conversion="SIGNED(B10)*95.3/127"></value>
<value name="Itelma/Avtel M73 E3: Value UOZ of detonation" conversion="-SIGNED(B11)*95.3/127"></value>
<value name="Itelma/Avtel M73 E3: FSM XX" conversion="B19"></value>
<value name="Itelma/Avtel M73 E3: JRPMS XX" conversion="B18*10"></value>
<value name="Itelma/Avtel M73 E3: MAF_XX" conversion="(B8*6528)/255+(B9/10)"></value>
<value name="Itelma/Avtel M73 E3: O2 voltage 1" conversion="B24*1.328/255-0.2"></value>
<value name="Itelma/Avtel M73 E3: Lambda correction" conversion="(B27*15.938)/255"></value><!-- The conversion must be wrong here -->
<value name="Itelma/Avtel M73 E3: Injection puls correction (MC)" conversion="B16*870.40/255+(B17*3.4)/255"></value><!-- The conversion must be wrong here -->
<value name="Itelma/Avtel M73 E3: Multi puls correction" conversion="B30*5+(B31*4.98)/255"></value><!-- The conversion must be wrong here -->
<value name="Itelma/Avtel M73 E3: Adsorber flow" conversion="B29*99.6/255"></value>
<value name="Itelma/Avtel M73 E3: O2 voltage 2" conversion="B24*1.328/255-0.2"></value>
</values>
</command>
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_bosch_mp70.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
RealDash OBD2 communication description file.
Requires RealDash version 1.5.8 or newer
A special channel descriptions for "Russian Special - Bosch mp7.0"
-->
<OBD2>
<init>
<!-- after first init command is sent, RealDash reads whatever data comes from serial during next 1500ms.
This is done to purge the serial buffers. -->
<!-- do not remove 'atl0', 'ate0', or 'ats0' commands. Those settings are assumed when parsing the
reply from adapter. -->
<command send="atd"></command>
<command send="atz"></command>
<command send="atl0"></command>
<command send="ate0"></command>
<command send="ats0"></command>
<command send="atsp5"></command>
<command send="atal"></command>
<command send="atib10"></command>
<command send="atsh8211f1"></command>
<command send="atst32"></command>
<command send="atsw00"></command>
<command send="atfi"></command>
</init>
<!-- 'send' command to send to OBD2 adapter -->
<!-- 'targetId' links value to RealDash input, see realdash.net/manuals/targetid.php for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, if name is unknown to RealDash, input appears in 'ECU Specific' input category -->
<!-- 'skipCount' number of skips in rotation for that value. Higher the value less frequently its read -->
<!-- 'units' [optional] info for automatic unit conversion system. "C","F","km/h","mph","bar","psi","bit".
If units="bit", RealDash always checks the lowest bit as of value on or off. Therefore the bitshift to the right on
conversion, for example conversion="(V>>1)" will read second bit on incoming value -->
<!-- 'header' [optional] sets OBD2 header for this command. The full AT command to set the header must be included.
Note that header is not reset automatically on next command, so usually when header is in use it has to be set to all commands.
If all commands use same header, its best to be placed in 'init' section.
Examples:
header="ATSH685AF1"
header="ATSHDA10F1" -->
<!-- 'conversion' [optional] if omitted, value is read 'as-is'.
Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within conversion formula, for example;
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- From RealDash version 1.6.6, 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the individual bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" produce the same result -->
<!-- conversion values from ABC style to RealDash B# style
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,B49,B50,B51
AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ
-->
<rotation>
<command send="2101" skipCount="0">
<values>
<value targetId="37" conversion="B15*40"></value><!--RPM-->
<value targetId="81" units="km/h" conversion="B14"></value><!--Speed-->
<value targetId="12" conversion="B9*0.0942"></value><!--Batt voltage-->
<value targetId="14" units="C" conversion="B10*0.75-48"></value><!--CLT-->
<value targetId="42" conversion="B13*0.390625"></value><!--TPS-->
<value targetId="35" conversion="(B16*256+B17)*0.024"></value><!--PW1-->
<value targetId="30" conversion="B24*0.1"></value><!--MAF-->
<value targetId="100" conversion="B7*0.05"></value><!--Engine Load-->
<value targetId="254" conversion="B25*0.0044"></value><!--Lambda1-->
<value name="Bosch mp7: Number of errors" conversion="B0"></value>
<value name="Bosch mp7: Error code" conversion="B1*256"></value>
<value name="Bosch mp7: MAF voltage" conversion="B7*0.019535"></value>
<value name="Bosch mp7: UOZ" conversion="B11*(-0.75)-108"></value>
<value name="Bosch mp7: Value UOZ of detonation" conversion="B12*0.75"></value>
<value name="Bosch mp7: FSM XX" conversion="B18"></value>
<value name="Bosch mp7: JRPMS XX" conversion="B22*10"></value>
<value name="Bosch mp7: MAF_XX" conversion="B23*0.25"></value>
<value name="Bosch mp7: O2 voltage 1" conversion="B25*0.0044"></value>
<value name="Bosch mp7: Lambda correction" conversion="B27*1"></value><!-- The conversion must be wrong here -->
<value name="Bosch mp7: Injection puls correction (MC)" conversion="B28*1"></value><!-- The conversion must be wrong here -->
<value name="Bosch mp7: Multi puls correction" conversion="B29*1"></value><!-- The conversion must be wrong here -->
<value name="Bosch mp7: Adsorber flow" conversion="B30*0.390625"></value>
<value name="Bosch mp7: O2 voltage 2" conversion="B33*0.0044"></value>
</values>
</command>
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_fiat_precan.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSH8110F1"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_gm_ls.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
RealDash OBD2 communication description file.
Requires RealDash version 1.5.8 or newer
-->
<OBD2>
<init>
<!-- after first init command is sent, RealDash reads whatever data comes from serial during next 1500ms.
This is done to purge the serial buffers. -->
<!-- do not remove 'atl0', 'ate0', or 'ats0' commands. Those settings are assumed when parsing the
reply from adapter. -->
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="atsp0"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<!-- 'send' command to send to OBD2 adapter -->
<!-- 'targetId' links value to RealDash input, see realdash.net/manuals/targetid.php for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, if name is unknown to RealDash, input appears in 'ECU Specific' input category -->
<!-- 'skipCount' number of skips in rotation for that value. Higher the value less frequently its read -->
<!-- 'units' [optional] info for automatic unit conversion system. "C","F","km/h","mph","bar","psi","bit".
If units="bit", RealDash always checks the lowest bit as of value on or off. Therefore the bitshift to the right on
conversion, for example conversion="(V>>1)" will read second bit on incoming value -->
<!-- 'header' [optional] sets OBD2 header for this command. The full AT command to set the header must be included.
Note that header is not reset automatically on next command, so usually when header is in use it has to be set to all commands.
If all commands use same header, its best to be placed in 'init' section.
Examples:
header="ATSH685AF1"
header="ATSHDA10F1" -->
<!-- 'conversion' [optional] if omitted, value is read 'as-is'.
Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within conversion formula, for example;
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- From RealDash version 1.6.6, 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the individual bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" produce the same result -->
<!-- conversion values from ABC style to RealDash B# style
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,B49,B50,B51
AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ
-->
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="0106" skipCount="0" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0108" skipCount="0" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="221470" skipCount="0" targetId="151" units="bar" conversion="V*0.578*0.06894757"></command> <!-- engine oil pressure -->
<command send="221951" skipCount="3" name="OBD2: GM Shifter position" conversion="B0" enum="72:P,24:R,80:N,48:D,120:S,40:S2,#:err"></command> <!-- Shifter position -->
<command send="22199a" replylength="2" skipcount="3" name="OBD2: GM current gear" conversion="B0"></command> <!-- Current gear -->
<command send="221940" skipcount="5" targetId="138" units="C" conversion="B0-40" ></command> <!-- Trans fluid temp -->
<command send="221154" skipcount="5" targetId="152" units="C" conversion="B0-40" ></command> <!-- Engine Oil Temp -->
<command send="2211a6" skipcount="0" targetId="28" conversion="22.5*B0/256" ></command> <!-- Knock Retard -->
<command send="2212c3" skipcount="0" targetId="35" conversion="((B0*256)+B1)/66.56" ></command> <!-- Inj PWN Bank1 -->
<command send="2212c4" skipcount="0" targetId="36" conversion="((B0*256)+B1)/66.56" ></command> <!-- Inj PWN Bank2 -->
<command send="221131" skipcount="0" name="OBD2: GM Fuel Status" conversion="V" enum="68:Closed Loop,36:Power Enrichment,12:Fuel Cut DFCO" ></command> <!-- GM Fuel status -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_january_5_1.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
RealDash OBD2 communication description file.
Requires RealDash version 1.5.8 or newer
A special channel descriptions for "Russian Special - January 5.1"
-->
<OBD2>
<init>
<!-- after first init command is sent, RealDash reads whatever data comes from serial during next 1500ms.
This is done to purge the serial buffers. -->
<!-- do not remove 'atl0', 'ate0', or 'ats0' commands. Those settings are assumed when parsing the
reply from adapter. -->
<command send="atd"></command>
<command send="atz"></command>
<command send="atl0"></command>
<command send="ate0"></command>
<command send="ats0"></command>
<command send="atsp5"></command>
<command send="atib10"></command>
<command send="atsh8110f1"></command>
<command send="atst10"></command>
<command send="atsw00"></command>
</init>
<!-- 'send' command to send to OBD2 adapter -->
<!-- 'targetId' links value to RealDash input, see realdash.net/manuals/targetid.php for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, if name is unknown to RealDash, input appears in 'ECU Specific' input category -->
<!-- 'skipCount' number of skips in rotation for that value. Higher the value less frequently its read -->
<!-- 'units' optional info only for automatic unit conversion system. "C","F","km/h","mph","bar","psi","bit".
If units="bit", RealDash always checks the lowest bit as of value on or off. Therefore the bitshift to the right on
conversion, for example conversion="(V>>1)" will read second bit on incoming value -->
<!-- 'header' sets OBD2 header for this command. The full AT command to set the header must be included.
Note that header is not reset automatically on next command, so usually when header is in use it has to be set to all commands.
If all commands use same header, its best to be placed in 'init' section.
Examples:
header="ATSH685AF1"
header="ATSHDA10F1" -->
<!-- 'conversion' [optional] if omitted, value is read 'as-is'.
Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within conversion formula, for example;
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- From RealDash version 1.6.6, 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the individual bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" produce the same result -->
<!-- conversion values from ABC style to RealDash B# style
B0, B1, B2, B3, B4, B5, B6, B7, B8, B9, B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
B26,B27,B28,B29,B30,B31,B32,B33,B34,B35,B36,B37,B38,B39,B40,B41,B42,B43,B44,B45,B46,B47,B48,B49,B50,B51
AA AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ
-->
<rotation>
<command send="2101" skipCount="0">
<values>
<value targetId="37" conversion="B11*40"></value><!--RPM-->
<value targetId="81" units="km/h" conversion="B17"></value><!--Speed-->
<value targetId="12" conversion="(B18*12.8/255)+5.2"></value><!--Batt voltage-->
<value targetId="14" units="C" conversion="B8-40"></value><!--CLT-->
<value targetId="42" conversion="B10"></value><!--TPS-->
<value targetId="35" conversion="B22*2.04/255+B23*522.24/255"></value><!--PW1-->
<value targetId="0" conversion="14.7*(B9+128)/256"></value><!--AFR1-->
<value targetId="30" conversion="B26*42.5/255+B27*10880/255"></value><!--MAF-->
<value name="Yanvar 51 target pos. idle" conversion="B13"></value>
<value name="Yanvar 51 target idle rpm" conversion="B19*10"></value>
<value name="Yanvar 51 inj.correction" conversion="(B15/255)+0.5"></value>
<value name="Yanvar 51 inj.correction" conversion="(B15/255)+0.5"></value>
<value name="Yanvar 51 fuel consumption" conversion="B30*1.99/255+B31*2"></value>
<value name="Yanvar 51 idle pos" conversion="B14"></value>
<value name="Yanvar 51 fuel consumption, hour" conversion="B28*5.1/255+B29*1305.6/255"></value>
<value name="Yanvar 51 idle rpm" conversion="B12*10"></value>
</values>
</command>
<command send="2103" skipCount="0" targetId="31" conversion="((B2*5.0/256)+0.234)*50"></command>
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_mitsubishi_mut.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP0"></command>
<command send="ATAL"></command>
<command send="ATIB10"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_nissan_generic.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP5"></command>
<command send="ATAL"></command>
<command send="ATIB10"></command>
<command send="ATSH8110FC"></command>
<command send="ATST32"></command>
<command send="ATSW00"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_opel_kwp2000.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP5"></command>
<command send="ATAL"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_saab_generic.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP3"></command>
<command send="ATIB96"></command>
<command send="ATIIA13"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_celica_corolla_camry.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATIB96"></command>
<command send="ATIIA13"></command>
<command send="ATSH8113F1"></command>
<command send="ATSP4"></command>
<command send="ATSW00"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_gt86.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP6"></command>
<command send="ATAL"></command>
<command send="ATSH7E0"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_jdm_generic.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATIB96"></command>
<command send="ATIIA13"></command>
<command send="ATSH8113F1"></command>
<command send="ATSPA4"></command>
<command send="ATSW00"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_jdm_iso9141.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP3"></command>
<command send="ATAL"></command>
<command send="ATIIA33"></command>
<command send="ATIB10"></command>
<command send="ATSH686AF1"></command>
<command send="ATST32"></command>
<command send="ATSW00"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_rav4_supra_lexus_is.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATIB96"></command>
<command send="ATIIA13"></command>
<command send="ATSH8213F0"></command>
<command send="ATSP4"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_toyota_vitz.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSH8213F1"></command>
<command send="ATIB96"></command>
<command send="ATIIA13"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_volvo_noncan1.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP3"></command>
<command send="ATKW0"></command>
<command send="ATIIA51"></command>
<command send="ATWM825113A1"></command>
<command send="ATSH835113"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: OBD2/realdash_obd2_volvo_noncan2.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<OBD2>
<init>
<command send="atd"></command>
<command send="atz"></command>
<command send="atat1"></command>
<command send="atst62"></command>
<command send="ATSP3"></command>
<command send="ATKW0"></command>
<command send="ATTA13"></command>
<command send="ATRA13"></command>
<command send="ATIIA51"></command>
<command send="ATWM825113A1"></command>
<command send="ATSH845113"></command>
<command send="B90300"></command>
<command send="ate0"></command>
<command send="atl0"></command>
<command send="ats0"></command>
<command send="ath1"></command>
<command send="atdpn"></command>
<command send="0100"></command>
<command send="0120"></command>
</init>
<rotation>
<command send="0104" skipCount="6" targetId="100" conversion="V/2.55"></command> <!-- engine load -->
<command send="010c" skipCount="0" targetId="37" conversion="V/4"></command> <!-- rpm -->
<command send="010b" skipCount="0" targetId="31"></command> <!-- map -->
<command send="010d" skipCount="0" targetId="81" units="km/h"></command> <!-- speed -->
<command send="010e" skipCount="4" targetId="38" conversion="V/2-64"></command> <!-- spark adv -->
<command send="0110" skipCount="1" targetId="30" conversion="V/100"></command> <!-- maf -->
<command send="0114" skipCount="3" targetId="0" conversion="B0/200"></command> <!-- o2 1-8 -->
<command send="0115" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0116" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0117" skipCount="3" targetId="0" conversion="B0/200"></command>
<command send="0118" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0119" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011a" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="011b" skipCount="3" targetId="1" conversion="B0/200"></command>
<command send="0124" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0125" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0126" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0127" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0128" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0129" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="012b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0134" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command> <!-- o2 1-8 -->
<command send="0135" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0136" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0137" skipCount="3" targetId="0" conversion="(B0*256+B1)/32768"></command>
<command send="0138" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="0139" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013a" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<command send="013b" skipCount="3" targetId="1" conversion="(B0*256+B1)/32768"></command>
<!-- <command send="0101" skipCount="35" targetId="65"></command> --> <!-- number of DTCs -->
<command send="0111" skipCount="2" targetId="42" conversion="V/2.55"></command> <!-- tps -->
<command send="010a" skipCount="6" targetId="202" conversion="V*3"></command> <!-- fuel pressure -->
<command send="0105" skipCount="57" targetId="14" units="C" conversion="V-40"></command> <!-- clt -->
<command send="010f" skipCount="15" targetId="27" units="C" conversion="V-40"></command> <!-- iat -->
<command send="0133" skipCount="60" targetId="11"></command> <!-- baro -->
<command send="0146" skipCount="100" targetId="173" units="C" conversion="V-40"></command> <!-- ambient air temp -->
<command send="atrv" skipCount="5" targetId="12"></command> <!-- voltage -->
<command send="012f" skipCount="25" targetId="170" conversion="V/2.55"></command> <!-- fuel level -->
<command send="0106" skipCount="10" targetId="17" conversion="V/1.28-100"></command> <!-- fuel trim 1 -->
<command send="0107" skipCount="50" targetId="102" conversion="V/1.28-100"></command> <!-- long trim bank 1 -->
<command send="0108" skipCount="10" targetId="18" conversion="V/1.28-100"></command> <!-- fuel trim 2 -->
<command send="0109" skipCount="50" targetId="104" conversion="V/1.28-100"></command> <!-- long trim bank 2 -->
<command send="011f" skipCount="11" targetId="33"></command> <!-- engine runtime -->
<command send="015c" skipCount="32" targetId="152" units="C" conversion="V-40"></command> <!-- engine oil temp -->
</rotation>
</OBD2>
================================================
FILE: README.md
================================================
# **RealDash-extras**
RealDash examples and technical materials
All materials in this repository are licensed with [NoLicense](https://github.com/janimm/RealDash/blob/master/LICENSE)
[realdash.net](https://www.realdash.net)
## **Folders**
### **[Dashboard-animation-examples](./Dashboard-animation-examples/README.md)**
This folder contains description and examples on how to create scripted animations to RealDash dashboards.
### **[OBD2](./OBD2/README.md)**
Folder contains OBD2 related information and default XML files used by RealDash.
### **[RealDash-CAN](./RealDash-CAN/README.md)**
Folder contains RealDash-CAN protocol related information and default XML files used by RealDash.
================================================
FILE: RealDash-CAN/Arduino-examples/README.md
================================================
# **RealDash CAN Arduino examples**
[www.realdash.net](https://www.realdash.net)
First, see information about [RealDash CAN protocol and XML description file](../README.md)
### **RealDash_CAN example**
A simple Arduino sketch that pushes 3 'hand-build' CAN frames from Arduino
into RealDash. CAN frames contain static data for RPM, MAP,
Coolant temperature, and TPS. Next two frames contain the statuses of
Arduino digital and analog pins.
### **RealDash_CAN_2way example**
An extension of first example reads **SET_FRAME** commands from RealDash and sets
Arduino digital and analog pins accordingly.
These examples uses 115200 baud rate as default value. Change the value to
match your serial setup.
### **How to run Arduino Examples**
1. Upload the example sketch into Arduino.
2. Open RealDash and go to 'Garage->Connections' and add new connection.
3. Select 'RealDash CAN'.
4. Next steps select which ever way you connect to Arduino, be it Bluetooth, Serial port, or WiFi. If using serial port, the example sketch uses 115200 baud.
5. For last page, the "Custom Channel Description File", select the 'realdash_can_example.xml'.
6. Tap upper left corner 'DONE' until back in dashboard.
7. Wait for couple of seconds for the Arduino to connect to RealDash.
This folder also includes simple test dashboard 'realdash_can_arduino_test.rd'. If Arduino is uploaded with 'RealDash_CAN_2way' example,
the buttons in dashboard change the digital and some analog pin values in Arduino.
================================================
FILE: RealDash-CAN/Arduino-examples/RealDash_CAN/RealDash_CAN.ino
================================================
/**
* ============================================================================
* Name : RealDash_CAN.ino
* Part of : RealDash
* Author : Jani Immonen
* Created : 15.10.2017
*
* Arduino example sketch of how to use RealDash CAN protocol.
*
* This example code is free for any use.
*
* www.realdash.net
* ============================================================================
**/
// Arduino digital and analog pins
unsigned int digitalPins = 0;
int analogPins[7] = {0};
unsigned int rpm = 0;
unsigned int kpa = 992; // 99.2
unsigned int tps = 965; // 96.5
unsigned int clt = 80; // 80 - 100
unsigned int textCounter = 0;
void setup()
{
// init serial
Serial.begin(115200);
delay(100);
}
void loop()
{
ReadDigitalStatuses();
ReadAnalogStatuses();
SendCANFramesToSerial();
// just some dummy values for simulated engine parameters
if (rpm++ > 10000)
{
rpm = 500;
}
if (kpa++ > 2500)
{
kpa = 10;
}
if (tps++ > 1000)
{
tps = 0;
}
if (clt++ > 230)
{
// all values in frame are handled as unsigned values. To have negative values,
// offset actual value and write corresponding conversion to xml file imported to RealDash
clt = 0;
}
if (textCounter++ > 4000)
{
textCounter = 0;
}
delay(5);
}
void ReadDigitalStatuses()
{
// read status of digital pins (1-13)
digitalPins = 0;
int bitposition = 0;
for (int i=1; i<14; i++)
{
if (digitalRead(i) == HIGH) digitalPins |= (1 << bitposition);
bitposition++;
}
}
void ReadAnalogStatuses()
{
// read analog pins (0-7)
for (int i=0; i<7; i++)
{
analogPins[i] = analogRead(i);
}
}
void SendCANFramesToSerial()
{
byte buf[8];
// build & send CAN frames to RealDash.
// a CAN frame payload is always 8 bytes containing data in a manner
// described by the RealDash custom channel description XML file
// all multibyte values are handled as little endian by default.
// endianess of the values can be specified in XML file if it is required to use big endian values
// build 1st CAN frame, RPM, MAP, CLT, TPS (just example data)
memcpy(buf, &rpm, 2);
memcpy(buf + 2, &kpa, 2);
memcpy(buf + 4, &clt, 2);
memcpy(buf + 6, &tps, 2);
// write first CAN frame to serial
SendCANFrameToSerial(3200, buf);
// build 2nd CAN frame, Arduino digital pins and 2 analog values
memcpy(buf, &digitalPins, 2);
memcpy(buf + 2, &analogPins[0], 2);
memcpy(buf + 4, &analogPins[1], 2);
memcpy(buf + 6, &analogPins[2], 2);
// write 2nd CAN frame to serial
SendCANFrameToSerial(3201, buf);
// build 3rd CAN frame, rest of Arduino analog values
memcpy(buf, &analogPins[3], 2);
memcpy(buf + 2, &analogPins[4], 2);
memcpy(buf + 4, &analogPins[5], 2);
memcpy(buf + 6, &analogPins[6], 2);
// write 3rd CAN frame to serial
SendCANFrameToSerial(3202, buf);
// build 4th frame, this is a text extension frame
// only send once at 1000 loops
if (textCounter == 0)
{
SendTextExtensionFrameToSerial(3203, "Hello RealDash, this is Arduino sending some text data");
}
else if (textCounter == 1000)
{
SendTextExtensionFrameToSerial(3203, "Tomorrow's forecast: Lots of sun and 30 degrees centigate");
}
else if (textCounter == 2000)
{
SendTextExtensionFrameToSerial(3203, "Now Playing: Insert your favorite song info here");
}
else if (textCounter == 3000)
{
SendTextExtensionFrameToSerial(3203, "Message from Arduino: All systems running at nominal efficiency");
}
}
void SendCANFrameToSerial(unsigned long canFrameId, const byte* frameData)
{
// the 4 byte identifier at the beginning of each CAN frame
// this is required for RealDash to 'catch-up' on ongoing stream of CAN frames
const byte serialBlockTag[4] = { 0x44, 0x33, 0x22, 0x11 };
Serial.write(serialBlockTag, 4);
// the CAN frame id number (as 32bit little endian value)
Serial.write((const byte*)&canFrameId, 4);
// CAN frame payload
Serial.write(frameData, 8);
}
void SendTextExtensionFrameToSerial(unsigned long canFrameId, const char* text)
{
if (text)
{
// the 4 byte identifier at the beginning of each CAN frame
// this is required for RealDash to 'catch-up' on ongoing stream of CAN frames
const byte textExtensionBlockTag[4] = { 0x55, 0x33, 0x22, 0x11 };
Serial.write(textExtensionBlockTag, 4);
// the CAN frame id number (as 32bit little endian value)
Serial.write((const byte*)&canFrameId, 4);
// text payload
Serial.write(text, strlen(text) + 1);
}
}
================================================
FILE: RealDash-CAN/Arduino-examples/RealDash_CAN_2way/RealDash_CAN_2way.ino
================================================
/**
* ============================================================================
* Name : RealDash_CAN_2way.ino
* Part of : RealDash
* Author : Jani Immonen
* Created : 15.10.2017
*
* Arduino example sketch of how to use RealDash CAN protocol.
* This example code is free for any use.
*
* www.realdash.net
* ============================================================================
**/
// Arduino digital and analog pins
// digital pin statuses are stored as bits in one variable
unsigned int digitalPins = 0;
// analog pin values are stored in array of ints
int analogPins[7] = {0};
unsigned int rpm = 0;
unsigned int kpa = 992; // 99.2
unsigned int tps = 965; // 96.5
unsigned int clt = 80; // 80 - 100
unsigned int textCounter = 0;
// incoming data
byte incomingFrame[17] = { 0 };
unsigned int incomingFramePos = 0;
// if READWRITE_PINS is defined, the values are read from and written to Arduino
// digital and analog pins.
//#define READWRITE_PINS
void setup()
{
#if defined (READWRITE_PINS)
// set digital pins as outputs
for (int i=1; i<14; i++)
{
pinMode(i, OUTPUT);
}
#endif
// init serial
Serial.begin(115200);
delay(100);
}
void loop()
{
ReadDigitalStatuses();
ReadAnalogStatuses();
SendCANFramesToSerial();
ReadIncomingSerialData();
// just some dummy values for simulated engine parameters
if (rpm++ > 10000)
{
rpm = 500;
}
if (kpa++ > 2500)
{
kpa = 10;
}
if (tps++ > 1000)
{
tps = 0;
}
if (clt++ > 230)
{
// all values in frame are handled as unsigned values. To use negative values,
// offset actual value and write corresponding conversion to XML file imported to RealDash
// From RealDash 1.7.6 its also possible to specify value as signed="true" in XML file.
clt = 0;
}
// simple counter for sending the text frame to avoid sending it too often.
if (textCounter++ > 4000)
{
textCounter = 0;
}
delay(5);
}
void ReadDigitalStatuses()
{
#if defined (READWRITE_PINS)
// read status of digital pins (1-13)
digitalPins = 0;
int bitposition = 0;
for (int i=1; i<14; i++)
{
if (digitalRead(i) == HIGH) digitalPins |= (1 << bitposition);
bitposition++;
}
#endif
}
void ReadAnalogStatuses()
{
#if defined (READWRITE_PINS)
// read analog pins (0-7)
for (int i=0; i<7; i++)
{
analogPins[i] = analogRead(i);
}
#endif
}
void SendCANFramesToSerial()
{
byte frameData[8];
// build & send CAN frames to RealDash.
// a CAN frame payload is always 8 bytes containing data in a manner
// described by the RealDash custom channel description XML file
// all multibyte values are handled as little endian by default.
// endianess of the values can be specified in XML file if it is required to use big endian values
// build 1st CAN frame, RPM, MAP, CLT, TPS (just example data)
memcpy(frameData, &rpm, 2);
memcpy(frameData + 2, &kpa, 2);
memcpy(frameData + 4, &clt, 2);
memcpy(frameData + 6, &tps, 2);
// write first CAN frame to serial
SendCANFrameToSerial(3200, frameData);
// build 2nd CAN frame, Arduino digital pins and 2 analog values
memcpy(frameData, &digitalPins, 2);
memcpy(frameData + 2, &analogPins[0], 2);
memcpy(frameData + 4, &analogPins[1], 2);
memcpy(frameData + 6, &analogPins[2], 2);
// write 2nd CAN frame to serial
SendCANFrameToSerial(3201, frameData);
// build 3rd CAN frame, rest of Arduino analog values
memcpy(frameData, &analogPins[3], 2);
memcpy(frameData + 2, &analogPins[4], 2);
memcpy(frameData + 4, &analogPins[5], 2);
memcpy(frameData + 6, &analogPins[6], 2);
// write 3rd CAN frame to serial
SendCANFrameToSerial(3202, frameData);
// build 4th frame, this is a text extension frame
// only send once at 1000 loops
if (textCounter == 0)
{
SendTextExtensionFrameToSerial(3203, "Hello RealDash, this is Arduino sending some text data");
}
else if (textCounter == 1000)
{
SendTextExtensionFrameToSerial(3203, "Tomorrow's forecast: Lots of sun and 30 degrees centigate");
}
else if (textCounter == 2000)
{
SendTextExtensionFrameToSerial(3203, "Now Playing: Insert your favorite song info here");
}
else if (textCounter == 3000)
{
SendTextExtensionFrameToSerial(3203, "Message from Arduino: All systems running at nominal efficiency");
}
}
void SendCANFrameToSerial(unsigned long canFrameId, const byte* frameData)
{
// the 4 byte identifier at the beginning of each CAN frame
// this is required for RealDash to 'catch-up' on ongoing stream of CAN frames
const byte serialBlockTag[4] = { 0x44, 0x33, 0x22, 0x11 };
Serial.write(serialBlockTag, 4);
// the CAN frame id number (as 32bit little endian value)
Serial.write((const byte*)&canFrameId, 4);
// CAN frame payload
Serial.write(frameData, 8);
}
void SendTextExtensionFrameToSerial(unsigned long canFrameId, const char* text)
{
if (text)
{
// the 4 byte identifier at the beginning of each CAN frame
// this is required for RealDash to 'catch-up' on ongoing stream of CAN frames
const byte textExtensionBlockTag[4] = { 0x55, 0x33, 0x22, 0x11 };
Serial.write(textExtensionBlockTag, 4);
// the CAN frame id number (as 32bit little endian value)
Serial.write((const byte*)&canFrameId, 4);
// text payload
Serial.write(text, strlen(text) + 1);
}
}
void ReadIncomingSerialData()
{
while (Serial.available() > 0)
{
// little bit of extra effort here, since especially Bluetooth connections
// may leave unsent/received data in internal buffer for a long time
// therefore, we cannot be sure that incoming byte stream really starts at
// where we expect it to start.
// read one byte from serial stream
incomingFrame[incomingFramePos++] = Serial.read();
// check the first incoming bytes tag (0x44, 0x33, 0x22, 0x11)
if (incomingFrame[0] != 0x44)
{
// first incoming byte is not 0x44,
// the tag at the beginning of the frame does not match, this is an invalid frame
// just zero the incomingFrame buffer and start expecting first byte again
memset(incomingFrame, 0, 17);
incomingFramePos = 0;
}
if (incomingFramePos >= 17)
{
// frame complete, process it
ProcessIncomingFrame(incomingFrame);
// zero the incomingFrame buffer and start expecting first byte again
memset(incomingFrame, 0, 17);
incomingFramePos = 0;
}
}
}
void ProcessIncomingFrame(const byte* frame)
{
// first four bytes contain set value frame separator bytes, always 0x44,0x33,0x22,x11
// check that first 4 bytes match the tag
if (frame[0] != 0x44 ||
frame[1] != 0x33 ||
frame[2] != 0x22 ||
frame[3] != 0x11)
{
// frame tag does not match, wait for another frame
return;
}
// next four bytes contain set value CAN frame id in little endian form
unsigned long canFrameId = 0;
memcpy(&canFrameId, frame + 4, 4);
// next 8 bytes are the frame data
// ...
// last byte is check byte calculated as sum of previous 13 bytes (ignore overflow)
byte checkByte = 0;
for (int i=0; i<16; i++)
{
checkByte += frame[i];
}
if (frame[16] == checkByte)
{
// checksum match, this is a valid set value-frame:
// the frame payload data is in frame + 8 bytes
HandleIncomingSetValueFrame(canFrameId, frame + 8);
}
}
void HandleIncomingSetValueFrame(unsigned long canFrameId, const byte* frameData)
{
if (canFrameId == 3201)
{
memcpy(&digitalPins, frameData, 2);
memcpy(&analogPins[0], frameData + 2, 2);
memcpy(&analogPins[1], frameData + 4, 2);
memcpy(&analogPins[2], frameData + 6, 2);
#if defined (READWRITE_PINS)
// write digital pins
for (int i=0; i<13; i++)
{
digitalWrite(i + 1, (digitalPins & (1 << i)) ? HIGH : LOW);
}
analogWrite(0, analogPins[0]);
analogWrite(1, analogPins[1]);
analogWrite(2, analogPins[2]);
#endif
}
else if (canFrameId == 3202)
{
memcpy(&analogPins[3], frameData + 0, 2);
memcpy(&analogPins[4], frameData + 2, 2);
memcpy(&analogPins[5], frameData + 4, 2);
memcpy(&analogPins[6], frameData + 6, 2);
#if defined (READWRITE_PINS)
analogWrite(3, analogPins[3]);
analogWrite(4, analogPins[4]);
analogWrite(5, analogPins[5]);
analogWrite(6, analogPins[6]);
#endif
}
}
================================================
FILE: RealDash-CAN/Arduino-examples/realdash_can_example.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8 or newer -->
<RealDashCAN version="2">
<!-- baseId [optional] is added to each frame canId. -->
<!-- frames baseId="3200" -->
<frames>
<!-- PARAMETERS FOR 'frame' -->
<!-- 'id' can identifier (= baseId + id). Use 0x prefix to enter id as hexadesimal value. For example <frame id="3200"> is equal to <frame id="0x0c80"> -->
<!-- 'writeInterval' [optional] this CAN frame is written to CAN bus in this interval (milliseconds) -->
<!-- 'endianess' [optional] the endianess of all frame values (big | little [default]). -->
<!-- 'signed' [optional, from 1.7.4] set to true to force RealDash to handle all values in frame as signed values. -->
<frame id="0xC80">
<!-- PARAMETERS FOR 'value' -->
<!-- 'targetId' links value to RealDash input, see RealDash manuals www for a complete list -->
<!-- OR -->
<!-- 'name' links value to RealDash input, input appears in 'ECU Specific' input category -->
<!-- 'units' [optional] is used for post calculations, "F", "mph", "psi", "bit" which need to be specified for dashboard conversions to work properly -->
<!-- 'offset' byte offset of the value in frame -->
<!-- 'length' value length in bytes -->
<!-- 'startbit' [optional] the index of the first bit of the value -->
<!-- 'bitcount' [optional] number of bits used by the value -->
<!-- 'endianess' [optional] the endianess of value (big | little [default]). -->
<!-- 'signed' [optional, from 1.7.4] set to true to force RealDash to handle this value as signed. -->
<!-- 'rangeMin' and 'rangeMax' [optional] if 'name' is used instead of 'targetId', this is the recommended value range in RealDash editor -->
<!-- 'initialValue' [optional] if this parameter is present, value is written to CAN after connection has been made to the CAN bus -->
<!-- 'conversion' [optional] if omitted, value is read 'as-is'.
Otherwise variables 'B0', 'B1', 'B2', 'B3', 'V' and 'ID#' can be used within conversion formula, for example;
conversion="V/10" - result is incoming value / 10
conversion="B0+15*(B1-43)" - result is 'first byte + 15 * (second byte - 43)
conversion="V+ID200-74.3" - result is incoming value + 'Body Electronics->Gear' - 74.3 -->
<!-- From RealDash version 1.6.6, 'conversionABC' is an option to 'conversion' and uses A,B,C,...AA,AB,AC,...,etc format to distinquish the individual bytes on the reply.
This makes it easier to convert the Equation from other apps.
Example: conversion="B0+15*(B1-43)" and conversionABC="A+15*(B-43)" produce the same result -->
<!-- 1st CAN frame, RPM, MAP, CLT, TPS -->
<value targetId="37" offset="0" length="2"></value>
<value targetId="31" units="kPA" offset="2" length="2" conversion="V/10"></value>
<value targetId="14" units="C" offset="4" length="2" conversion="V-100"></value>
<value targetId="42" offset="6" length="2" conversion="V/10"></value>
</frame>
<frame id="0xC81">
<!-- 2nd CAN frame, Arduino example digital inputs, these will appear in RealDash 'ECU Specific' input category -->
<value name="Arduino Example: Digital 1" startbit="0" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 2" startbit="1" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 3" startbit="2" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 4" startbit="3" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 5" startbit="4" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 6" startbit="5" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 7" startbit="6" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 8" startbit="7" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 9" startbit="8" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 10" startbit="9" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 11" startbit="10" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 12" startbit="11" bitcount="1" units="bit"></value>
<value name="Arduino Example: Digital 13" startbit="12" bitcount="1" units="bit"></value>
<value name="Arduino Example: Analog 1" offset="2" length="2"></value>
<value name="Arduino Example: Analog 2" offset="4" length="2"></value>
<value name="Arduino Example: Analog 3" offset="6" length="2"></value>
</frame>
<!-- 3rd CAN frame contains rest of Arduino analog inputs -->
<frame id="0xC82">
<value name="Arduino Example: Analog 4" offset="0" length="2"></value>
<value name="Arduino Example: Analog 5" offset="2" length="2"></value>
<value name="Arduino Example: Analog 6" offset="4" length="2"></value>
<value name="Arduino Example: Analog 7" offset="6" length="2"></value>
</frame>
<frame id="0xC83">
<!-- 4th CAN frame, example of text extension frame -->
<!-- Text extension frame requires RealDash 1.4.1 or newer -->
<!-- declare own unique CAN id for each text value. -->
<!-- the text extension frame always consumes entire CAN id, multiple text strings cannot be added to one frame. -->
<!-- units must be set to "text" -->
<!-- offset, length and conversion values have no meaning with text data -->
<value name="Arduino Example: Text 1" units="text"></value>
</frame>
</frames>
</RealDashCAN>
================================================
FILE: RealDash-CAN/README.md
================================================
# **RealDash-extras**
[realdash.net](https://www.realdash.net)
## **RealDash CAN protocol**
[See the full specification of RealDash CAN protocol here](./realdash-can-protocol.md).
## **Channel Description File (XML)**
[See the full specification of RealDash CAN XML description file here](./realdash-can-description-file.md).
## **RealDash CAN Arduino examples**
[RealDash CAN Arduino examples](./Arduino-examples/README.md).
================================================
FILE: RealDash-CAN/XML-files/AEM/aem_22_unit1.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RealDashCAN version="2">
<frames>
<frame id="0x500" endianess="big">
<value name="AEM 22, unit 1: Analog 1" offset="0" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 2" offset="2" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 3" offset="4" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 4" offset="6" length="2" conversion="V*0.001"></value>
</frame>
<frame id="0x501" endianess="big">
<value name="AEM 22, unit 1: Analog 5" offset="0" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 6" offset="2" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 7" offset="4" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 8" offset="6" length="2" conversion="V*0.001"></value>
</frame>
<frame id="0x502" endianess="big">
<value name="AEM 22, unit 1: Analog 5 Resistance" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Analog 6 Resistance" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Analog 7 Resistance" offset="4" length="2"></value>
<value name="AEM 22, unit 1: Analog 8 Resistance" offset="6" length="2"></value>
</frame>
<frame id="0x503" endianess="big">
<value name="AEM 22, unit 1: Analog 9 Resistance" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Analog 10 Resistance" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Analog 11 Resistance" offset="4" length="2"></value>
<value name="AEM 22, unit 1: Analog 12 Resistance" offset="6" length="2"></value>
</frame>
<frame id="0x504" endianess="big">
<value name="AEM 22, unit 1: VR1" offset="0" length="2"></value>
<value name="AEM 22, unit 1: VR2" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Tacho" offset="4" length="2"></value>
<value name="AEM 22, unit 1: Fuel Level" offset="6" length="1"></value>
<value name="AEM 22, unit 1: Battery Voltage" offset="7" length="1" conversion ="V*0.1"></value>
</frame>
<frame id="0x505" endianess="big">
<value name="AEM 22, unit 1: Digital 1 Frequency" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Digital 2 Frequency" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Digital 1 Duty Cycle" offset="4" length="1"></value>
<value name="AEM 22, unit 1: Digital 2 Duty Cycle" offset="5" length="1"></value>
<value name="AEM 22, unit 1: Digital 1 State" offset="6" length="1"></value>
<value name="AEM 22, unit 1: Digital 2 State" offset="7" length="1"></value>
</frame>
<frame id="0x506" endianess="big">
<value name="AEM 22, unit 1: Digital 3 Frequency" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Digital 4 Frequency" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Digital 3 Duty Cycle" offset="4" length="1"></value>
<value name="AEM 22, unit 1: Digital 4 Duty Cycle" offset="5" length="1"></value>
<value name="AEM 22, unit 1: Digital 3 State" offset="6" length="1"></value>
<value name="AEM 22, unit 1: Digital 4 State" offset="7" length="1"></value>
</frame>
<frame id="0x507" endianess="big">
<value name="AEM 22, unit 1: Digital 5 Frequency" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Digital 6 Frequency" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Digital 5 Duty Cycle" offset="4" length="1"></value>
<value name="AEM 22, unit 1: Digital 6 Duty Cycle" offset="5" length="1"></value>
<value name="AEM 22, unit 1: Digital 5 State" offset="6" length="1"></value>
<value name="AEM 22, unit 1: Digital 6 State" offset="7" length="1"></value>
</frame>
</frames>
</RealDashCAN>
================================================
FILE: RealDash-CAN/XML-files/AEM/aem_22_unit2.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<RealDashCAN version="2">
<frames>
<frame id="0x600" endianess="big">
<value name="AEM 22, unit 1: Analog 1" offset="0" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 2" offset="2" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 3" offset="4" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 4" offset="6" length="2" conversion="V*0.001"></value>
</frame>
<frame id="0x601" endianess="big">
<value name="AEM 22, unit 1: Analog 5" offset="0" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 6" offset="2" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 7" offset="4" length="2" conversion="V*0.001"></value>
<value name="AEM 22, unit 1: Analog 8" offset="6" length="2" conversion="V*0.001"></value>
</frame>
<frame id="0x602" endianess="big">
<value name="AEM 22, unit 1: Analog 5 Resistance" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Analog 6 Resistance" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Analog 7 Resistance" offset="4" length="2"></value>
<value name="AEM 22, unit 1: Analog 8 Resistance" offset="6" length="2"></value>
</frame>
<frame id="0x603" endianess="big">
<value name="AEM 22, unit 1: Analog 9 Resistance" offset="0" length="2"></value>
<value name="AEM 22, unit 1: Analog 10 Resistance" offset="2" length="2"></value>
<value name="AEM 22, unit 1: Analog 11 Resistance" offset="4" length="2"></value>
<value name="AEM 22, unit 1: Analog 12 Resistance" offset="6" length="2"></value>
</fra
gitextract_56dij45d/
├── CanPlayback/
│ ├── canplayback.py
│ └── readme.md
├── Dashboard-animation-examples/
│ ├── Multiview.rd
│ ├── Multiview_anim.xml
│ ├── README.md
│ ├── RealDash_animation_example.rd
│ ├── RealDash_animation_example_anim.xml
│ ├── value_anim_example.rd
│ └── value_anim_example_anim.xml
├── LICENSE
├── OBD2/
│ ├── README.md
│ ├── realdash_obd2.xml
│ ├── realdash_obd2_Itelma_M73_E3.xml
│ ├── realdash_obd2_bosch_mp70.xml
│ ├── realdash_obd2_fiat_precan.xml
│ ├── realdash_obd2_gm_ls.xml
│ ├── realdash_obd2_january_5_1.xml
│ ├── realdash_obd2_mitsubishi_mut.xml
│ ├── realdash_obd2_nissan_generic.xml
│ ├── realdash_obd2_opel_kwp2000.xml
│ ├── realdash_obd2_saab_generic.xml
│ ├── realdash_obd2_toyota_celica_corolla_camry.xml
│ ├── realdash_obd2_toyota_gt86.xml
│ ├── realdash_obd2_toyota_jdm_generic.xml
│ ├── realdash_obd2_toyota_jdm_iso9141.xml
│ ├── realdash_obd2_toyota_rav4_supra_lexus_is.xml
│ ├── realdash_obd2_toyota_vitz.xml
│ ├── realdash_obd2_volvo_noncan1.xml
│ └── realdash_obd2_volvo_noncan2.xml
├── README.md
└── RealDash-CAN/
├── Arduino-examples/
│ ├── README.md
│ ├── RealDash_CAN/
│ │ └── RealDash_CAN.ino
│ ├── RealDash_CAN_2way/
│ │ └── RealDash_CAN_2way.ino
│ ├── realdash_can_arduino_test.rd
│ └── realdash_can_example.xml
├── README.md
├── XML-files/
│ ├── AEM/
│ │ ├── aem_22_unit1.xml
│ │ ├── aem_22_unit2.xml
│ │ ├── aem_6_can.xml
│ │ └── aem_infinity.xml
│ ├── Adaptronic/
│ │ ├── adaptronic_can_full.xml
│ │ └── adaptronic_can_simple.xml
│ ├── BMW/
│ │ ├── BMW335i.xml
│ │ ├── BMW_R1200GS_K25_CAN.xml
│ │ └── bmw_siemens_ms42_can.xml
│ ├── Ecumaster/
│ │ ├── ecumaster_emublack.xml
│ │ └── ecumaster_gps.xml
│ ├── Edelbrock/
│ │ └── edelbrock_proflo4.xml
│ ├── Emerald/
│ │ └── emerald_k3_k6.xml
│ ├── Emtron/
│ │ └── emtron_packet_1.xml
│ ├── Flagtronics/
│ │ └── flagtronics_can_v0_4.xml
│ ├── GM/
│ │ ├── gm_ls7_can.xml
│ │ ├── gm_ls_can.xml
│ │ └── gm_ls_can_full.xml
│ ├── Grayhill/
│ │ └── grayhill_touch_encoder.xml
│ ├── Haltech/
│ │ ├── haltech_v2_can.xml
│ │ └── haltech_v3_can.xml
│ ├── Holley/
│ │ ├── dominator_and_terminator_x_can.xml
│ │ ├── holley_efi_can.xml
│ │ └── sniper_v2_can.xml
│ ├── Life Racing/
│ │ └── life_racing_default_can.xml
│ ├── Link/
│ │ ├── displaylink.xml
│ │ └── link_dash2pro.xml
│ ├── MaxxECU/
│ │ └── maxxecu_default_can.xml
│ ├── Megasquirt/
│ │ ├── megasquirt_dashmode_can.xml
│ │ └── megasquirt_realtime_data_broadcasting_can.xml
│ ├── OBR/
│ │ └── obr_euro_8.xml
│ ├── SCS-Delta/
│ │ └── scs-delta.xml
│ ├── syvecs/
│ │ └── syvecs_default_can.xml
│ ├── toyota/
│ │ ├── toyota_corolla_e150.xml
│ │ └── toyota_fj_can.xml
│ ├── tpms/
│ │ └── tiremagic_tpms.xml
│ └── turbolamik/
│ └── turbolamik_tcu.xml
├── realdash-can-description-file.md
└── realdash-can-protocol.md
SYMBOL INDEX (3 symbols across 1 files) FILE: CanPlayback/canplayback.py function get_next_line (line 20) | def get_next_line(csvfile): function send_next_frame (line 30) | def send_next_frame(client, csvfile): function main (line 51) | def main(filename, port):
Condensed preview — 75 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (631K chars).
[
{
"path": "CanPlayback/canplayback.py",
"chars": 2362,
"preview": "\"\"\"\ncanplayback.py\n\nThis program reads a RealDash CAN log file and streams the CAN frames from log\nto RealDash.\n\nUsage:\n"
},
{
"path": "CanPlayback/readme.md",
"chars": 771,
"preview": "# **RealDash-extras**\n\nRealDash examples and technical materials\n\nAll materials in this repository are licensed with [No"
},
{
"path": "Dashboard-animation-examples/Multiview_anim.xml",
"chars": 40292,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDash>\n\n <!-- NOTE: groups in animation XML are depricated and will be rem"
},
{
"path": "Dashboard-animation-examples/README.md",
"chars": 2761,
"preview": "# **Dashboard animation examples**\n\nHow to create animated dashboards with RealDash.\n\n- Name the animation XML file as *"
},
{
"path": "Dashboard-animation-examples/RealDash_animation_example_anim.xml",
"chars": 8450,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDash>\n\n\t<animations>\n\t\t<!-- 1st page: S I N G L E G A U G E A N I M A T I "
},
{
"path": "Dashboard-animation-examples/value_anim_example_anim.xml",
"chars": 3783,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDash>\n\t<!-- This example shows how to make value based gauge animations -->\n"
},
{
"path": "LICENSE",
"chars": 1210,
"preview": "This is free and unencumbered software released into the public domain.\n\nAnyone is free to copy, modify, publish, use, c"
},
{
"path": "OBD2/README.md",
"chars": 11466,
"preview": "# **RealDash-extras**\n[realdash.net](https://www.realdash.net)\n\n \n## **OBD2**\nThis folder contains OBD2 XML descrip"
},
{
"path": "OBD2/realdash_obd2.xml",
"chars": 7140,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nRealDash OBD2 communication description file.\nRequires RealDash version 1.5."
},
{
"path": "OBD2/realdash_obd2_Itelma_M73_E3.xml",
"chars": 5762,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nRealDash OBD2 communication description file.\nRequires RealDash version 2.0."
},
{
"path": "OBD2/realdash_obd2_bosch_mp70.xml",
"chars": 5442,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nRealDash OBD2 communication description file.\nRequires RealDash version 1.5."
},
{
"path": "OBD2/realdash_obd2_fiat_precan.xml",
"chars": 4903,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_gm_ls.xml",
"chars": 8403,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nRealDash OBD2 communication description file.\nRequires RealDash version 1.5."
},
{
"path": "OBD2/realdash_obd2_january_5_1.xml",
"chars": 4838,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\nRealDash OBD2 communication description file.\nRequires RealDash version 1.5."
},
{
"path": "OBD2/realdash_obd2_mitsubishi_mut.xml",
"chars": 4972,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_nissan_generic.xml",
"chars": 5090,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_opel_kwp2000.xml",
"chars": 4934,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_saab_generic.xml",
"chars": 4975,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_celica_corolla_camry.xml",
"chars": 5054,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_gt86.xml",
"chars": 4973,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_jdm_generic.xml",
"chars": 5056,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_jdm_iso9141.xml",
"chars": 5129,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_rav4_supra_lexus_is.xml",
"chars": 5017,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_toyota_vitz.xml",
"chars": 4980,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_volvo_noncan1.xml",
"chars": 5060,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "OBD2/realdash_obd2_volvo_noncan2.xml",
"chars": 5174,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<OBD2>\n <init>\n <command send=\"atd\"></command>\n <command send=\"atz\"></comm"
},
{
"path": "README.md",
"chars": 727,
"preview": "# **RealDash-extras**\n\nRealDash examples and technical materials\n\nAll materials in this repository are licensed with [No"
},
{
"path": "RealDash-CAN/Arduino-examples/README.md",
"chars": 1508,
"preview": "# **RealDash CAN Arduino examples**\n[www.realdash.net](https://www.realdash.net)\n\nFirst, see information about [RealDash"
},
{
"path": "RealDash-CAN/Arduino-examples/RealDash_CAN/RealDash_CAN.ino",
"chars": 4559,
"preview": "/**\n * ============================================================================\n * Name : RealDash_CAN.ino\n "
},
{
"path": "RealDash-CAN/Arduino-examples/RealDash_CAN_2way/RealDash_CAN_2way.ino",
"chars": 8405,
"preview": "/**\n * ============================================================================\n * Name : RealDash_CAN_2way."
},
{
"path": "RealDash-CAN/Arduino-examples/realdash_can_example.xml",
"chars": 5750,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/README.md",
"chars": 450,
"preview": "# **RealDash-extras**\n[realdash.net](https://www.realdash.net)\n\n \n## **RealDash CAN protocol**\n[See the full specif"
},
{
"path": "RealDash-CAN/XML-files/AEM/aem_22_unit1.xml",
"chars": 3947,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x500\" endianess=\"big\">\n "
},
{
"path": "RealDash-CAN/XML-files/AEM/aem_22_unit2.xml",
"chars": 3947,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x600\" endianess=\"big\">\n "
},
{
"path": "RealDash-CAN/XML-files/AEM/aem_6_can.xml",
"chars": 969,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n<!-- AEM 6 Channel CAN Sensor Module -->\n<!-- https://w"
},
{
"path": "RealDash-CAN/XML-files/AEM/aem_infinity.xml",
"chars": 15001,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x01F0A000\" endianess=\"big\">\n"
},
{
"path": "RealDash-CAN/XML-files/Adaptronic/adaptronic_can_full.xml",
"chars": 86501,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Adaptronic/adaptronic_can_simple.xml",
"chars": 14790,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/BMW/BMW335i.xml",
"chars": 4129,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file,\n BMW E93 335I\nAuthor: Countryman-->\n<Real"
},
{
"path": "RealDash-CAN/XML-files/BMW/BMW_R1200GS_K25_CAN.xml",
"chars": 4107,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/BMW/bmw_siemens_ms42_can.xml",
"chars": 1603,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Ecumaster/ecumaster_emublack.xml",
"chars": 5094,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Ecumaster/ecumaster_gps.xml",
"chars": 2406,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Edelbrock/edelbrock_proflo4.xml",
"chars": 2334,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Emerald/emerald_k3_k6.xml",
"chars": 2249,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Emtron/emtron_packet_1.xml",
"chars": 4541,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Flagtronics/flagtronics_can_v0_4.xml",
"chars": 3861,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x600\">\n <value name=\"Fl"
},
{
"path": "RealDash-CAN/XML-files/GM/gm_ls7_can.xml",
"chars": 1169,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/GM/gm_ls_can.xml",
"chars": 5779,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/GM/gm_ls_can_full.xml",
"chars": 20945,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/Grayhill/grayhill_touch_encoder.xml",
"chars": 923,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x18ff0ff2\">\n <value nam"
},
{
"path": "RealDash-CAN/XML-files/Haltech/haltech_v2_can.xml",
"chars": 12681,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x360\" endianess=\"big\">\n "
},
{
"path": "RealDash-CAN/XML-files/Haltech/haltech_v3_can.xml",
"chars": 20498,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Holley/dominator_and_terminator_x_can.xml",
"chars": 47690,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x1E005000\" endianness=\"big\" "
},
{
"path": "RealDash-CAN/XML-files/Holley/holley_efi_can.xml",
"chars": 9920,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Holley/sniper_v2_can.xml",
"chars": 9451,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x1E005000\" endianness=\"big\">"
},
{
"path": "RealDash-CAN/XML-files/Life Racing/life_racing_default_can.xml",
"chars": 6991,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Link/displaylink.xml",
"chars": 4868,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Link/link_dash2pro.xml",
"chars": 2261,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<RealDashCAN version=\"2\">\n <!-- Link ECU DASH2PRO stream -->\n <frames>\n <fra"
},
{
"path": "RealDash-CAN/XML-files/MaxxECU/maxxecu_default_can.xml",
"chars": 11970,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Megasquirt/megasquirt_dashmode_can.xml",
"chars": 2365,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/Megasquirt/megasquirt_realtime_data_broadcasting_can.xml",
"chars": 5847,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/OBR/obr_euro_8.xml",
"chars": 8766,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/SCS-Delta/scs-delta.xml",
"chars": 11257,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5.8"
},
{
"path": "RealDash-CAN/XML-files/syvecs/syvecs_default_can.xml",
"chars": 4308,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/toyota/toyota_corolla_e150.xml",
"chars": 3264,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- RealDash CAN XML description file, version 2 Requires RealDash version 1.5."
},
{
"path": "RealDash-CAN/XML-files/toyota/toyota_fj_can.xml",
"chars": 7815,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- File created by DBCtoRDXML Converter https://github.com/wjcloudy/DBCtoRDXML "
},
{
"path": "RealDash-CAN/XML-files/tpms/tiremagic_tpms.xml",
"chars": 3252,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n\t<frame id=\"0x77e:0x01,0,1\" endianess=\"big\">"
},
{
"path": "RealDash-CAN/XML-files/turbolamik/turbolamik_tcu.xml",
"chars": 3428,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<RealDashCAN version=\"2\">\n <frames>\n <frame id=\"0x640\" endianess=\"big\">\n "
},
{
"path": "RealDash-CAN/realdash-can-description-file.md",
"chars": 15055,
"preview": " \n# **Channel Description File (XML)**\nThe RealDash CAN XML file describes how data in CAN frames are interpreted b"
},
{
"path": "RealDash-CAN/realdash-can-protocol.md",
"chars": 8983,
"preview": " \n# **RealDash CAN protocol**\n\nThe *RealDash CAN* protocol was designed to easily connect to existing CAN network a"
}
]
// ... and 4 more files (download for full content)
About this extraction
This page contains the full source code of the janimm/RealDash-extras GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 75 files (560.9 KB), approximately 186.8k tokens, and a symbol index with 3 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.