Skip to content

Commit ecced5f

Browse files
committed
implement multibit flags
HotNoob#53
1 parent 64d2e10 commit ecced5f

1 file changed

Lines changed: 16 additions & 3 deletions

File tree

classes/protocol_settings.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -720,17 +720,30 @@ def process_register_bytes(self, registry : dict[int,bytes], entry : registry_ma
720720
end_bit = flag_size + start_bit
721721

722722
if entry.documented_name+'_codes' in self.codes:
723+
code_key : str = entry.documented_name+'_codes'
723724
flags : list[str] = []
725+
flag_indexes : list[str] = []
724726
for i in range(start_bit, end_bit): # Iterate over each bit position (0 to 15)
725727
byte = i // 8
726728
bit = i % 8
727729
val = register[byte]
728730
# Check if the i-th bit is set
729731
if (val >> bit) & 1:
730732
flag_index = "b"+str(i)
731-
if flag_index in self.codes[entry.documented_name+'_codes']:
732-
flags.append(self.codes[entry.documented_name+'_codes'][flag_index])
733-
733+
flag_indexes.append(flag_index)
734+
if flag_index in self.codes[code_key]:
735+
flags.append(self.codes[code_key][flag_index])
736+
737+
#check multibit flags
738+
multibit_flags = [key for key in self.codes if '&' in key]
739+
740+
if multibit_flags: #if multibit flags are found
741+
flag_indexes_set : set[str] = set(flag_indexes)
742+
for multibit_flag in multibit_flags:
743+
bits = multibit_flag.split('&') # Split key into 'bits'
744+
if all(bit in flag_indexes_set for bit in bits): # Check if all bits are present in the flag_indexes_set
745+
flags.append(self.codes[code_key][multibit_flag])
746+
734747
value = ",".join(flags)
735748
else:
736749
flags : list[str] = []

0 commit comments

Comments
 (0)