@@ -78,25 +78,48 @@ def srange(start, stop, step, length):
7878MASTER_VOLUME_ZERODB_REF = 80
7979
8080
81- def compute_master_volume_label (value ):
81+ def compute_master_volume_label (value , zerodb_ref = MASTER_VOLUME_ZERODB_REF ):
8282 """Convert Master Volume ASCII value to dB"""
8383 # TODO: Handle absolute values
84- label = ''
84+ label = '---.-dB '
8585 if int (value [:2 ]) < MASTER_VOLUME_MIN or int (value [:2 ]) > MASTER_VOLUME_MAX :
8686 logger .error ("Master volume value %s out of bounds (%s-%s)" , value , MASTER_VOLUME_MIN , MASTER_VOLUME_MAX )
8787 # Quirks
8888 if value == '99' :
89- label = "-∞dB"
89+ result = "-∞dB"
9090 elif value == '995' :
91- label = "-80.5dB"
92- else :
91+ result = "-80.5dB"
92+ elif len ( value ) == 2 :
9393 # General case
94+ result = str (float (value ) - zerodb_ref )
95+ elif len (value ) == 3 :
96+ # Handle undocumented special case for half dB
97+
98+ # Hardcode values around 0 because of computing sign uncertainty
9499 # FIXME: test '985' which seems invalid
95- if len (value ) == 2 :
96- label = str (float (value ) - MASTER_VOLUME_ZERODB_REF ) + "dB"
97- if len (value ) == 3 :
98- # Handle undocumented special case for half dB
99- label = str (int (value [:2 ]) - MASTER_VOLUME_ZERODB_REF ) + ".5" + "dB"
100+ if value == str ((zerodb_ref - 1 )) + '5' :
101+ result = "-0.5"
102+ elif value == str (zerodb_ref ) + '5' :
103+ result = "0.5"
104+ else :
105+ value = int (value [:2 ]) # Drop the third digit
106+ offset = 0
107+ if value < zerodb_ref :
108+ offset = 1
109+ logger .debug ("Add offset %i to dB calculation with value %i5" , offset , value )
110+ result = str (int (value + offset - zerodb_ref )) + ".5"
111+ else :
112+ raise ValueError
113+
114+ # Format label with fixed width like the actual display:
115+ # [ NEG SIGN or EMPTY ] [ DIGIT er EMPTY ] [ DIGIT ] [ DOT ] [ DIGIT ] [ d ] [ B ]
116+ label = "%s%s%s.%sdB" % (
117+ result [0 ] if result [0 ] == '-' else " " ,
118+ " " if len (result ) <= 3 or result [- 4 ] == '-' else result [- 4 ],
119+ result [- 3 ],
120+ result [- 1 ])
121+
122+ logger .debug (label )
100123 return label
101124
102125
@@ -734,7 +757,7 @@ def parse_response(self, status_command):
734757 self .logger .error ("Command unknown: %s" , status_command )
735758 return
736759 else :
737- self .logger .info ("Found command %s: %s" , self .command_code , self .command_label )
760+ self .logger .info ("Parsed command %s: %s" , self .command_code , self .command_label )
738761
739762 # Trim command from status command stream
740763 status_command = status_command [len (self .command_code ):]
@@ -757,7 +780,7 @@ def parse_response(self, status_command):
757780 self .logger .debug ("Subcommand unknown. Probably a parameter: %s" , status_command )
758781 self .subcommand_code = None
759782 else :
760- self .logger .info ("Found subcommand %s: %s" , self .subcommand_code , self .subcommand_label )
783+ self .logger .info ("Parsed subcommand %s: %s" , self .subcommand_code , self .subcommand_label )
761784 # Trim subcommand from status command stream
762785 status_command = status_command [
763786 len (self .subcommand_code ) + 1 :] # Subcommands have a space before the parameter
@@ -778,7 +801,7 @@ def parse_response(self, status_command):
778801
779802 # Handle unexpected leftovers
780803 if status_command :
781- self .logger .error ("unexpected unparsed data found: %s" , status_command )
804+ self .logger .error ("Unexpected unparsed data found: %s" , status_command )
782805
783806 if self .subcommand_label :
784807 self .response = "%s, %s: %s" % (self .command_label , self .subcommand_label , self .parameter_label )
@@ -793,7 +816,7 @@ class DN500AVFormat():
793816
794817 def __init__ (self , logger = None ):
795818 self .logger = logger
796- self .mv_reverse_params = new_dict = dict ([(value , key ) for key , value in mv_params .items ()])
819+ self .mv_reverse_params = dict ([(value , key ) for key , value in mv_params .items ()])
797820
798821 def get_raw_volume_value_from_db_value (self , value ):
799822 self .logger .debug ('value: %s' , value )
0 commit comments