@@ -713,14 +713,17 @@ def write_register_block(self, block_name, update_register, new_value):
713
713
return
714
714
715
715
start_register = int (block ['start_register' ], 16 )
716
- length = int (block ['length' ])
716
+ required_length = int (block ['length' ])
717
717
values = []
718
718
raw_value = None
719
719
for register_name in block ['registers' ]:
720
720
if register_name == update_register :
721
721
register = self .get_register (register_name )
722
722
if register :
723
- raw_value = self .translate_to_raw_value (register , new_value )
723
+ new_raw_value = self .translate_to_raw_value (register , new_value )
724
+ if not validate_new_value (register , new_raw_value ):
725
+ return
726
+ raw_value = new_raw_value
724
727
else :
725
728
logging .error (f"Register { register_name } not found in configuration" )
726
729
continue
@@ -733,10 +736,6 @@ def write_register_block(self, block_name, update_register, new_value):
733
736
if 'append' in block :
734
737
for append_item in block ['append' ]:
735
738
values .append (append_item )
736
- #logging.info(f"Would write {block['start_register']} with {values[:length]}")
737
- #logging.info(f"Reference values: {[0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1]}")
738
- # [0, 0, 1, 540, 530, 425, 470, 10000, 10000, 89, 90, 250, 480, 1, 10, 1]
739
- #self.write_registers_with_retry(block['start_register'], [0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1])
740
739
741
740
register = self .get_register (update_register )
742
741
new_raw_value = self .translate_to_raw_value (register , new_value )
@@ -749,9 +748,16 @@ def write_register_block(self, block_name, update_register, new_value):
749
748
logging .info (f"Current value for { register ['name' ]} : { current_raw_value } ({ current_value } ). Matches desired value: { new_raw_value } ({ new_value } )." )
750
749
retry = 0
751
750
else :
751
+ if len (values ) < required_length :
752
+ logging .error (f"Length of values in block is less than required length for block { block ['name' ]} . Skipping write operation. Values: { values } " )
753
+ return
752
754
logging .info (f"Current value for { register ['name' ]} : { current_raw_value } ({ current_value } ), attempting to set it to: { new_raw_value } ({ new_value } ). Retries remaining: { retry } " )
753
- self .write_registers_with_retry (block ['start_register' ], values [:length ])
754
- time .sleep (self .write_retry_delay )
755
+ logging .info (f"Would write { block ['start_register' ]} with { values [:required_length ]} " )
756
+ self .write_registers_with_retry (block ['start_register' ], values [:required_length ])
757
+ #logging.info(f"Reference values: {[0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1]}")
758
+ # [0, 0, 1, 540, 530, 425, 470, 10000, 10000, 89, 90, 250, 480, 1, 10, 1]
759
+ #self.write_registers_with_retry(block['start_register'], [0, 0, 1, 560, 540, 425, 470, 10000, 10000, 90, 90, 250, 480, 1, 10, 1])
760
+ time .sleep (self .write_retry_delay + 5 )
755
761
retry = retry - 1
756
762
757
763
def get_register (self , register_name ):
@@ -793,7 +799,7 @@ def translate_to_raw_value(self, register, value):
793
799
elif register ['function' ] == 'divide' :
794
800
return int (float (value ) * register ['factor' ])
795
801
elif register ['function' ] == 'mode' :
796
- return next ((k for k , v in register ['modes' ].items () if v == value ), value )
802
+ return int ( next ((k for k , v in register ['modes' ].items () if v == value ), value ) )
797
803
elif register ['function' ] == 'bit_field' :
798
804
fields = value .split (',' )
799
805
raw_value = 0
@@ -804,7 +810,20 @@ def translate_to_raw_value(self, register, value):
804
810
elif register ['function' ] == 'high_bit_low_bit' :
805
811
high , low = map (int , value .split (register ['join' ]))
806
812
return (high << 8 ) | low
807
- return value
813
+ return int (value )
814
+
815
+ def validate_new_value (register , new_value ):
816
+ """ Validate the new value based on the register's min, max, and modes """
817
+ if 'min' in register and new_value < register ['min' ]:
818
+ logging .error (f"Value { new_value } is less than the minimum allowed value { register ['min' ]} for register { register ['name' ]} " )
819
+ return False
820
+ if 'max' in register and new_value > register ['max' ]:
821
+ logging .error (f"Value { new_value } is greater than the maximum allowed value { register ['max' ]} for register { register ['name' ]} " )
822
+ return False
823
+ if 'function' in register and register ['function' ] == 'mode' and str (new_value ) not in register ['modes' ]:
824
+ logging .error (f"Value { new_value } is not a valid mode for register { register ['name' ]} " )
825
+ return False
826
+ return True
808
827
809
828
@click .command ("cli" , context_settings = {'show_default' : True })
810
829
@click .option (
0 commit comments