@@ -456,14 +456,6 @@ async def _light_test_menu(self):
456
456
457
457
self .machine .events .post ("service_light_test_stop" )
458
458
459
- # VOLUME Menu
460
- def _load_software_sound_menu_entries (self ) -> List [ServiceMenuEntry ]:
461
- """Return the software sound menu items with label and callback."""
462
- return [
463
- ServiceMenuEntry ("%s Volume" % config .get ('label' , track ), partial (self ._sound_track_menu , track ))
464
- for track , config in self .machine .config ["sound_system" ]["tracks" ].items ()
465
- ]
466
-
467
459
async def _volume_menu (self , platform = None ):
468
460
position = 0
469
461
if platform :
@@ -488,6 +480,16 @@ async def _volume_menu(self, platform=None):
488
480
if isinstance (item ['value' ], float ):
489
481
item ['value' ] = int (item ['value' ] * 100 )
490
482
483
+ # If supported on hardware platform, add option to write to firmware
484
+ if platform and hasattr (platform .audio_interface , "save_settings_to_firmware" ):
485
+ items .append ({
486
+ "name" : "write_to_firmware" ,
487
+ "label" : "Write Settings" ,
488
+ "is_platform" : True ,
489
+ "value" : "Confirm" ,
490
+ "levels_list" : ["Confirm" , "Saved" ]
491
+ })
492
+
491
493
self ._update_volume_slide (items , position )
492
494
493
495
while True :
@@ -506,7 +508,7 @@ async def _volume_menu(self, platform=None):
506
508
self ._update_volume_slide (items , position )
507
509
elif key == 'ENTER' :
508
510
# change setting
509
- await self ._volume_change (items , position , focus_change = "enter" )
511
+ await self ._volume_change (items , position , platform , focus_change = "enter" )
510
512
511
513
self .machine .events .post ("service_volume_stop" )
512
514
@@ -523,7 +525,7 @@ def _update_volume_slide(self, items, position, is_change=False, focus_change=No
523
525
is_platform = config ["is_platform" ],
524
526
focus_change = focus_change )
525
527
526
- async def _volume_change (self , items , position , focus_change = None ):
528
+ async def _volume_change (self , items , position , platform , focus_change = None ):
527
529
self ._update_volume_slide (items , position , focus_change = focus_change )
528
530
if items [position ].get ("levels_list" ):
529
531
values = items [position ]["levels_list" ]
@@ -551,12 +553,20 @@ async def _volume_change(self, items, position, focus_change=None):
551
553
new_value = values [value_position ]
552
554
if new_value is not None :
553
555
items [position ]['value' ] = new_value
554
- # Internally tracked values divide by 100 to store a float.
555
- # External (hardware) values, use the value units provided
556
- # TODO: Create an Amp/Track class to internalize this method.
557
- if not items [position ].get ("levels_list" ):
558
- new_value = new_value / 100
559
- self .machine .variables .set_machine_var (f"{ items [position ]['name' ]} _volume" , new_value , persist = True )
556
+ # Check for a firmware update
557
+ if items [position ]['name' ] == "write_to_firmware" :
558
+ if new_value == "Saved" :
559
+ platform .audio_interface .save_settings_to_firmware ()
560
+ # Remove the options from the list
561
+ values = ['Saved' ]
562
+ items [position ]['levels_list' ] = values
563
+ else :
564
+ # Internally tracked values divide by 100 to store a float.
565
+ # External (hardware) values, use the value units provided
566
+ # TODO: Create an Amp/Track class to internalize this method.
567
+ if not items [position ].get ("levels_list" ):
568
+ new_value = new_value / 100
569
+ self .machine .variables .set_machine_var (f"{ items [position ]['name' ]} _volume" , new_value , persist = True )
560
570
self ._update_volume_slide (items , position , is_change = True )
561
571
562
572
# AUDIT Menu
0 commit comments