SPORT HMI for Audi

From MIB-Helper.com Wiki
Jump to navigation Jump to search
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

For whatever reason, VW/SEAT/Skoda vehicles support SPORT HMI out from the factory, without some deep modifications of the system. All it needs is adaptation and FEC/SWaP code.

Details: SPORT HMI Performance Monitor

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