#eeprom_data = ['\xFF'] * eeprom_size eeprom_data = bytearray('\xFF') * eeprom_size # Add command line options based on EEPROM settings for k in sorted(eeprom.keys()): parser.add_argument('--' + k.replace('_','-'), type=eeprom[k].get('type'), choices=eeprom[k].get('choices'), help=eeprom[k].get('help'), metavar=eeprom[k].get('metavar')) # Process the command line arguments args = parser.parse_args() # Calculate key length from the pattern, not the size reserved for it hmac_key_length = AWEeprom.parse_unpack_format(eeprom['hmac_key']['format'])[1] generated_key = None if args.hmac_key is None: # Create a random key generated_key = [] for i in range(hmac_key_length): generated_key.append(random.randint(0, 255)) args.hmac_key = ','.join(map(hex, generated_key)) elif args.hmac_key == 'blank': args.hmac_key = ','.join(['0xFF'] * hmac_key_length) # Apply settings defined from command line arguments, else use the # default setting if defined. for k in eeprom:
for k in aw_cmds: s = getattr(args, k) if s is None: continue cmd = { } # If the argparse type conversion was employed then convert # back to a string s = str(s) m = re.match('^eeprom_(.*)', k) if m: cmd['name'] = 'write_eeprom' eeprom_setting = m.group(1) # Parse struct format string into order, quantity, type pfmt = AWEeprom.parse_unpack_format(eeprom[eeprom_setting]['format']) if pfmt[2] in ('c', 's', 'p'): # String data data = s else: # Convert into numeric data data = AWEeprom.safe_eval(s) # Pack data into suitable bytearrays matching the EEPROM layout if pfmt[1] > 1: # Multiple values required eeprom_data = struct.pack(eeprom[eeprom_setting]['format'], *data) else: # struct.pack_into(eeprom[eeprom_setting]['format'], eeprom_data, eeprom_data = struct.pack(eeprom[eeprom_setting]['format'],