SPORT HMI for Audi: Difference between revisions

From MIB-Helper.com Wiki
Jump to navigation Jump to search
No edit summary
Line 20: Line 20:
== Sport and Sport Kombi classes ==
== Sport and Sport Kombi classes ==
It looks like there are two separate apps related to Sport Display feature:
It looks like there are two separate apps related to Sport Display feature:
* SportHMI
* <code>SportHMI</code>
* SportHMI-Kombi
* <code>SportHMI-Kombi</code>


<code>Kombi</code> can be used to distinguish app version designed for instrument cluster ("Kombiinstrument")
<code>Kombi</code> 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
//TODO
== Activate Sport submenu in Car menu ==
== Activate Sport submenu in Car menu ==
//TODO
//TODO

Revision as of 20:29, 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.

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