Welcome Sound and Heartbeat: Difference between revisions

From MIB-Helper.com Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
Line 109: Line 109:
     }
     }


sysConst(4596) //Heartbeat coded state
getModel(-1807610112) //Heartbeat volume menu visibility state
//if heartbeat is coded, make the Heartbeat volume menu visible
this.env.getChoiceModel(-1807610112).setValue(this.env.getSysConst(4596) == 1 ? 0 : 1);


Volume setting is most likely stored in persistence memory. But here? Maybe close to this?
Volume setting is most likely stored in persistence memory. But here? Maybe close to this?
Line 116: Line 121:
         this.env.getChoiceModel(-1505620224).setValue(2);
         this.env.getChoiceModel(-1505620224).setValue(2);
     }
     }
sysConst(4162) // Wireless Charging coding state

Latest revision as of 21:58, 19 February 2026

flags related to the availability of the feature

CL_ANN_AMP_TONE_HEARTBEAT
CL_ENT_AMP_TONE_WELCOME
CL_ANN_AMP_MENU_TONE_HEARTBEAT
TONEID_HEARTBEAT
VOLUME_MENU_HEARTBEAT
GREY_OUT_POPUP_HEARTBEAT_CHOICE
VOLUME_HEARTBEAT_RANGE
FOCUS_LISTENER_VOLUME_HEARTBEAT_CHOICE
TONE_LEFT_DRAWER_AUDI_DEPARTURE_SOUND
case 1000034: {
 return "TONE_HEARTBEAT_MAIN";
}

function that checks readiness sound coding/adatpation?

   private boolean isReadinessSoundCoded() {
       return this.env.getSysConst(4596) == 1;
   }
this.setSysConstBool(4596, this.getAdaptationANP().isVehicleReadinessSoundAvailable());
this.setSysConstBool(4606, this.getAdaptationANP().isVehicleLeavingSoundAvailable());

  @Override
   public boolean isVehicleReadinessSoundAvailable() {
       return this.getBoolean(57, 0, false);
   }

   @Override
   public boolean isVehicleLeavingSoundAvailable() {
       return this.getBoolean(57, 1, false);
   }

function that triggers the sound

   @Override
   public void play() {
       this.lc.log(-2137614336, "[HeartbeatPlayer.play]");
       this.ringTonePlayer.playTone(this.playMode, 10);
   }

looks like those sound are considered to be ringtones. volume setting might be set to ringtone volume. Or fixed value.

   static /* synthetic */ int access$302(Heartbeat heartbeat, int n) {
       heartbeat.heartbeatVolume = n;
       return heartbeat.heartbeatVolume;
   }
   static /* synthetic */ int access$700(Heartbeat heartbeat) {
       return heartbeat.minHeartbeatVolume;
   }


Here's the definition of the volume menu:

   public void createVolumeMenus() {
       this.loweredEntMenus[0] = this.loweredEntAps;
       this.loweredEntMenus[1] = this.loweredEntNav;
       this.menus[3] = new PhoneRingtoneVolumeRange(this);
       this.menus[1] = new TAVolumeRange(this);
       this.menus[2] = new SDSVolumeRange(this);
       this.menus[0] = new NaviVolumeRange(this);
       this.menus[4] = this.loweredEntNav;
       this.menus[5] = this.loweredEntAps;
       this.menus[6] = new TouchpadVolumeRange(this);
       this.menus[7] = new SMSBeepVolumeRange(this);
       this.menus[8] = new HeartbeatVolumeRange(this);
       this.menus[9] = new RingtoneSelectionVolumeRange(this);
       this.menus[10] = new PhoneMicGainVolumeRange(this);
       if (this.env.getSysConst(4162) == 1) {
           this.menus[11] = new WirelessChargingVolumeRange(this);
       }
       this.menus[12] = new InfoAnnouncementVolumeRange(this);
   }

menu[8] is for the sound that we are looking for. Let's check how the HeartbeatVolumeRange class looks like:

public class HeartbeatVolumeRange
extends AbstractVolumeRange {
   private static final int CONNECTION;
   private final int[] volumeConnections = new int[]{48, 82};
   private final int[] greyOutConnections = AudioConnection.GREY_OUT_ALL;
   private final HeartbeatPlayer player;
   private final String name;

I this looks like the tone menu section responsible for Welcome/Heartbeat:

   private void executeConditiontONEHEARTBEATMAINScreen(int n, HMIView[] hMIViewArray, int n2) {
       switch (n) {
           case 3883: {
               if (this.evaluateSimpleChoiceModelValueEqualsCondition(3883, n2, 1)) {
                   if (hMIViewArray[0] != null) {
                       ((ScreenWidgetEVO)hMIViewArray[0]).setToplevelScreen(true);
                   }
                   if (hMIViewArray[0] == null) break;
                   ((ScreenWidgetEVO)hMIViewArray[0]).setOpenSelectionDrawerByHkReturn(true);
                   break;
               }
               if (hMIViewArray[0] != null) {
                   ((ScreenWidgetEVO)hMIViewArray[0]).setToplevelScreen(false);
               }
               if (hMIViewArray[0] == null) break;
               ((ScreenWidgetEVO)hMIViewArray[0]).setOpenSelectionDrawerByHkReturn(false);
               break;
           }
           case 4073: {
               if (hMIViewArray[0] == null) break;
               ((RotaryController)hMIViewArray[0]).setEnabled(!this.evaluateSimpleChoiceModelValueGreaterCondition(4073, n2, 0));
               break;
           }
       }
   }
sysConst(4596) //Heartbeat coded state
getModel(-1807610112) //Heartbeat volume menu visibility state
//if heartbeat is coded, make the Heartbeat volume menu visible
this.env.getChoiceModel(-1807610112).setValue(this.env.getSysConst(4596) == 1 ? 0 : 1);

Volume setting is most likely stored in persistence memory. But here? Maybe close to this?

   private void resetWirelessChargingReminderSignalChoice() {
       this.env.getStorageAccess().setInt(1009, 1, 2);
       this.env.getChoiceModel(-1505620224).setValue(2);
   }
sysConst(4162) // Wireless Charging coding state