Skip to content

Dataset

Chillout edited this page Aug 9, 2022 · 14 revisions

The dataset consists of 4352 Bytes of data. It's rougly constructed as follows:

Header

The most relevant data here is from the first 4 byte. Bytes 0 to 4 hold the version. In the following example, the version is "OC00". This is unique for a specific configuration of the dataset. There's a lot of variation in datasets, but some cars can share the same dataset, even across brands. It might be interesting to create a registry of dataset versions.

Unknown data

There's a lot of unknown data in the area between the header and 0x0296. I've written down some examples of data I've seen in OEM datasets, but haven't yet found the relevance of most of them. I marked them in red.

0x296 - 0x2D2: Control is allowed to change

These 60 bytes determine whether or not a given control can be changed when a certain profile is selected. Each byte is a bitfield, and each bit represents a profile. In the image you see the data parsed on the right, where it can be changed. In the Output console you see the bitfield parsed together with the controls. Each "1" means a control can be changed in that specific mode, "0" makes the control ineffective. (NB: IREOSNC stands for Individual, Race, Eco, Offroad, Sport, Normal, Comfort).

Profile data

0x32D - 0x339: Profiles

This is a very relevant set of bytes, containing what profile buttons are showing on screen when you press the button. There are 12 profile positions. In this example, 6 bytes are actually filled in. If you set a byte here, it will set a given profile name/graphic to a given profile. In the example, you see profile positions 0, 1, 2, 3, 4 and 6 holding data.

This translates to the following buttons (if your car has the FECs for all of them! Most cars don't have an Offroad FEC, which means the button would be hidden):

If you would change the value in the 3rd position to "06" instead of "03", it would become:

Note: This works, even without the FEC for Race.

Note2: This change will not turn your profile into a Race profile, it will only change the appearance in the user interface and OBD-measurements channel by Race. It's a cool little modification, but it doesn't add any FECs to your car or make the engine run in Race mode all of a sudden. All other profile properties will remain like they were before the modification of this byte. (Note: Race mode is called Cupra on Seat)

The following values are known:

  • 0x00: not set
  • 0x01: Comfort
  • 0x02: Auto/Normal
  • 0x03: Dynamic/Sport
  • 0x04: Offroad
  • 0x05: Eco/Economy
  • 0x06: Race/Cupra
  • 0x07: Individual
  • 0x08: Range/PHEV 1
  • 0x09: Lift/PHEV 2
  • 0x0a: Offroad Snow/PHEV 3/EV On
  • 0x0b: Offroad individual/PHEV 4/Hybrid auto
  • 0x0c: Offroad 4/Hybrid hold
  • 0x0d: Offroad 5/Hybrid charge
  • 0x0e: Offroad 6/Hybrid area
  • 0x0f: EV Off
  • 0x10: Second hold/Torque Vectoring
  • 0x11: Racetrack/Hybrid Charge Off
  • 0x12: Offroad level 2 / Adaptive
  • 0x13: Offroad level 3 / Traction
  • 0x14: Offroad level 4
  • 0x15: Hybrid sport
  • 0x16: Second auto
  • 0x17: Unknown profile
  • 0x28: GTE off
  • 0x29: GTE off 2
  • 0x2a: Unknown profile 2
  • 0xFF: none

0x339 - 0x345: Profile position it returns to after restart

This range determines what profile position it returns to after restarting the car. In the next example, it will return to the same profile after restart, except when it's in offroad-mode (4th position), then it will return to Normal upon restart.

The following values are possible:

  • 0x00 to 0x0B: the 12 profile positions
  • 0xFF: Not set

0x365 - 0x4CD: Profile settings

This range consists of 12 sets of 30 bytes. Each set is a profile, so there are 12 profiles. Each profile consists of 30 bytes that define a specific setting. In the next example, you see 13 positions with data. On itself it has no meaning, but looking at the 30 bytes at 0x4CD, you will know what controls are at which byte position.

The current values are known: The real meaning of each of these, is defined at 0x4EB

  • 0x0: not set
  • 0x1: Comfort
  • 0x2: Normal
  • 0x3: Sport
  • 0x4: Off-road
  • 0x5: Eco
  • 0x6: Race
  • 0x7: Individual
  • 0x8: Config 8
  • 0x9: Config 9
  • 0xa: Config 10
  • 0xb: Config 11
  • 0xc: Config 12

0x4CD - 0x4EB: Controls

Each byte defines a specific control at the position used in the previous range. If you set one, and don't see it, it could be that a setting is grouped, hidden or doesn't have any settings underneath.

The current values are known:

  • 0x00: not set
  • 0x01: Engine
  • 0x02: Start-stop system
  • 0x03: Gearbox
  • 0x04: Rear differential Lock
  • 0x05: Steering
  • 0x06: Progressive Steering
  • 0x07: DCC
  • 0x08: Airco
  • 0x09: ACC
  • 0x0A: Interior Engine Sound
  • 0x0B: Motorway Light
  • 0x0C: Background Lighting
  • 0x0D: Air suspension
  • 0x0E: Automatic Belt pre-tensioning
  • 0x0F: Seat Bolster Setting
  • 0x10: Route Option
  • 0x11: Navigation
  • 0x12: DSG Coasting
  • 0x13: Eco tips
  • 0x14: Exterior engine sound
  • 0x15: Front differential lock
  • 0x16: Center differential lock
  • 0x17: Four-wheel drive
  • 0x18: Electronic torque vectoring(Audi-Text)
  • 0x19: Anti-slip regulation
  • 0x1A: Headlight control
  • 0x1B: Rear spoiler
  • 0x1C: ESC System
  • 0x1D: Rear Axle Steering
  • 0x1E: Adaptive body roll compens
  • 0x1F: Road recognitiion
  • 0x20: Hybrid drive
  • 0x21: Drive
  • 0x22: Chassis
  • 0x23: Exhaust valves
  • 0x24: Engine Sound
  • 0x25: Passenger Compartment
  • 0x26: Driver's seat
  • 0x27: Tyre pressure monitoring syst.
  • 0x28: Lane Assist
  • 0x29: Aggregatelagerung(Audi-Text)
  • 0x2A: Magnetic ride (Audi-Text)
  • 0x2B: Sport Select chassis
  • 0x2C: Hill Descent Assist
  • 0x2D: Hill Hold Assist
  • 0x2E: Parking assist
  • 0x2F: Instrument cluster
  • 0x30: Infotainment system
  • 0x31: Eco driving tips
  • 0x32: Speed adjustment
  • 0x33: Electronic engine sound
  • 0x34: Nothing displays, just Engine
  • 0x35: Nothing displays, just Engine
  • 0x36: ESC System
  • 0x37: Nothing displays
  • 0x4c: Freilauf_DefaultON

0x4EB - 0x7BB: Options on the HMI

This range determines the options that are showing in the infotainment, when you press the (i) icon in the upper corner of the profile screen, or when using the Individual profile.

In the example you see the first profile position, which is "Comfort" in the case of most datasets. The values on the screen translate as:

 Position  Control                         setting: 
  0 	 Engine                        : Comfort (0002) 
  1 	 Steering                      : Normal (0004) 
  2 	 HVAC (Air Conditioning)       : Normal (0004) 
  3 	 DCC                           : Comfort (0002) 
  4 	 ACC                           : Comfort (0002) 
  5 	 Front Differential Lock       : Normal (0004) 

The logic here is as fairly straightforward. The name on the screen is determined by a bitfield:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
? ? Sand ? ? Snow Off On Eco+ Race Eco Offroad Sport Normal Comfort ?

In the 7th profile, (6th position when counting from 0), you will find all the options you can choose from in the Individual Profile:

In the infotainment, there's a pulldown menu where you can choose between several options:

The same bitfield logic determines which of these options you can choose from. You can select multiple bits and they will show as seperate options in the screen. Note: not all bits have a valid label in the infotainment software, and therefore can't be used.

An example: The control at position 0 has value 0x006A in the invididual profile. 0x006a = 0000 0000 0110 1010, which means: Comfort, Sport, Eco, Race, as you can see in the bitfield table.

0x7D6 - 0x7FA: Button order

In case you want to switch around the button order, these are the bytes you're looking for. It's a prioritized list, where the first item will be left on the FPA mode selection screen. When a profile number is not on this list, it will added to the right hand of the screen, and cannot be selected when browsing through the profiles by pressing the button. The following example speaks for itself. It is possible that this byte range extends a bit further, but I wasn't able to test with more than 9 profiles on my car.

0x8C2 - 0x8CE: Banner on AID

On the Virtual Cockpit / Active Info Display, a banner can be displayed that explains what profile is set. Depending on the car, brand and chosen profile, it will display a logo or some text.

In the following example, you see what profile names/banners are shown on the AID, but there are many more possibilities.

The following are known values:

  • 0x00: Not set
  • 0x01: Comfort
  • 0x02: Normal
  • 0x03: Sport
  • 0x04: Offroad
  • 0x05: Eco
  • 0x06: Individual
  • 0x07: Race / Cupra
  • 0x08: Eco
  • 0x09: Eco: driving and performance restricted
  • 0x0a: E-mode
  • 0x0b: Hybrid auto
  • 0x0c: Battery hold
  • 0x0d: Battery charge
  • 0x0e: E-mode currently not available
  • 0x0f: Eco+
  • 0x10: Snow
  • 0x11: Normal
  • 0x12: Offroad individual, check individual settings
  • 0x13: Auto
  • 0x14: Driving mode unable to switch
  • 0x15: Hybrid mode, unable to switch
  • 0x16: Driving mode eco not available
  • 0x17: Driving mode normal is not available
  • 0x18: Mode Battery hold not available
  • 0x19: Driving mode normal is not available
  • 0x1A: Mode Battery charge not available
  • 0x1B: GTE off
  • 0x1C: GTE logo

0x8E3: Mode Light

These set of 12 bytes determine whether or not the LED on the driving mode button is on or off, when one of the 12 profiles is chosen. The following are known values:

  • 00 = Off
  • 01 = On
  • 02 = Blink
  • 03 = ?

0x8FB - 0x9EB: Request values

This is one of the most important parts of the dataset. It contains a matrix that holds the request values that are being sent to a control module when choosing a specific profile. Looking at the data, it might look quite vague:

In the output console it gets a bit more clear, because the data is now mapped to the controls and profile numbers:

When pasting the data to Excel, and applying conditional formatting, it gets even more clear:

Let's look at the Air Conditioning. In the table you see it has a value for Normal (2) and Eco (5). When you select the profile, while reading the control module's live measurements over OBD2, under Driving Profile Selection, you will see a "Request value" and "Actual value". When a request value is recognized by the control module, the actual value will change accordingly.

Making changes to this table leads to additional or different values being sent from the gateway to a control module. This has the potential to unlock more functionality in your car. Some Air conditioning softwares offer additional behavior. For instance "1" (Comfort) is accepted in some cases.

Allowed values here are in the range of 0 to F. Note: 4-bit data is used, so each byte covers 2 profiles!

-- more will be added in the upcoming days --

Clone this wiki locally