SPORT HMI for Audi: Difference between revisions

From MIB-Helper.com Wiki
Jump to navigation Jump to search
Line 17: Line 17:


So if we are looking for needed textures - all is here.
So if we are looking for needed textures - all is here.
Here we can see that those textures are referenced in [[LSD.JXE]] classes:
public static String SPORT_HMI = "SPORT_HMI.kzb";
public static int mib2_sport_hmi_kzbFile = 100;


== Sport and Sport Kombi classes ==
== Sport and Sport Kombi classes ==

Revision as of 23:37, 18 January 2025

Audi MMI MIB2 SportHMI mockup
Audi MMI SportHMI mockup

There are some indications of Sport_HMI app for Audi MIB2 firmware. But no-one yet have enabled it. Let's check methods from the VW/Skoda/Seat units and let's check how the LSD.JXE in Audi looks like when it comes to references to sport modes.

VW/Seat/Skoda SportHMI enabling methods

There are two things needed in Volkswagen, SEAT, and Skoda vehicles to enable Sport HMI (VW Performance Monitor, SEAT Sport Information, Skoda Sport Information):

  1. enabling proper adaptation channels:
    • 0x05F → adaptation → Car_Function_Adaptations_Gen2 → [LO]_menu_display_SportHMI → on
    • 0x05F → adaptation → Car_Function_Adaptations_Gen2 → [LO]_menu_display_SportHMI_over_threshold_high → on
  2. uploading valid FEC / SWaP code to module 0x5F:
    • 00060400

GUI assets in Audi firmware

Audi MIB2 MMI SportHMI GUI assets
Audi MIB2 MMI SportHMI GUI assets

There's a file SPORT_HMI.kzb - a .kzb package. After extracting, it looks like Audi firmware contains some GUI assets for Sport Display submenu. There's clock gauge for power and torque, as well as bar gauge for temperature and boost. Also rendered fonts for the large readouts inside the clock gauges.

So if we are looking for needed textures - all is here.

Here we can see that those textures are referenced in LSD.JXE classes:

public static String SPORT_HMI = "SPORT_HMI.kzb";
public static int mib2_sport_hmi_kzbFile = 100;

Sport and Sport Kombi classes

It looks like there are two separate apps related to Sport Display feature:

  • SportHMI
  • SportHMI-Kombi

Kombi can be used to distinguish app version designed for instrument cluster ("Kombiinstrument")

Here's a statement that creates the screen:

protected Screen createScreen(int n, int n2) {
       switch (n) {
           (...)
           case 600289: {
               return CarScreenBag1.cARSPORTMAIN(this, n2);

And this one executes conditions

@Override
   public void executeCondition(int n, int n2, HMIView[] hMIViewArray, int n3) {
       switch (n2) {
       (...)              
           case 600289: {
               this.executeConditioncARSPORTMAINScreen(n, hMIViewArray, n3);
               break;
           }

...which look like this:

    private void executeConditioncARSPORTMAINScreen(int n, HMIView[] hMIViewArray, int n2) {
       switch (n) {
           case 601056: {
               if (hMIViewArray[0] == null) break;
               ((ScreenWidgetEVO)hMIViewArray[0]).setOpenSelectionDrawerByHkReturn(!this.evaluateSimpleChoiceModelValueEqualsCondition(-534050560, n2, -214497024));
               break;
           }
           case 602113: {
               if (hMIViewArray[0] != null) {
                   ((ContainerController)hMIViewArray[0]).setVisible(this.evaluateSimpleChoiceModelValueEqualsCondition(19925248, n2, 1));
               }
               if (hMIViewArray[1] == null) break;
               ((OilTemperatureGaugeController)hMIViewArray[1]).setVisible(this.evaluateSimpleChoiceModelValueEqualsCondition(19925248, n2, 1));
               break;
           }
           case 602114: {
               if (hMIViewArray[0] == null) break;
               ((ChargingAirPressureGaugeController)hMIViewArray[0]).setVisible(this.evaluateSimpleChoiceModelValueEqualsCondition(36702464, n2, 1));
               break;
           }
           case 602116: {
               if (hMIViewArray[0] == null) break;
               ((ContainerController)hMIViewArray[0]).setVisible(this.evaluateSimpleChoiceModelValueEqualsCondition(70256896, n2, 1));
               break;
           }
           case 602118: {
               if (hMIViewArray[0] == null) break;
               ((ContainerController)hMIViewArray[0]).setVisible(this.evaluateSimpleChoiceModelValueEqualsCondition(103811328, n2, 1));
               break;
           }
       }
   }

State machine class is also referring to the SportHMI:

public static final int LD_CAR_SEL_SPORTDISPLAY;

Meaning of the above would be "Sport Display was selected from the CAR menu Left Drawer".


//TODO

Activate Sport submenu in Car menu

//TODO

Modifications

//TODO ideas:

  • oil temp → gearbox temp
  • boost pressure → oil pressure
  • torque → steering angle
  • power → tachometer