import argparse import struct def get_argparser(): parser = argparse.ArgumentParser(description="MQTT-controlled 4-channel DDS signal generator") parser.add_argument("cidr", nargs=1, metavar=("Client_CIDR"), help="IPv4 Address of Humpback-DDS in CIDR notation") parser.add_argument("mac_addr", nargs=1, metavar=("Client_MAC"), help="MAC Address of Humpback-DDS") parser.add_argument("broker_ip", nargs=1, metavar=("Broker_IP"), help="IP address of MQTT broker") parser.add_argument("name", nargs=1, metavar=("Name"), help="Device name of Humpback-DDS") return parser def write_record(f, key, value): key_size = len(key) + 1 value_size = len(value) record_size = key_size + value_size + 4 f.write(struct.pack(">l", record_size)) f.write(key.encode()) f.write(b"\x00") f.write(value) def write_end_marker(f): f.write(b"\xff\xff\xff\xff") def main(): args = get_argparser().parse_args() with open("flash_config.bin", "wb") as fo: write_record(fo, "CIDR", args.cidr[0].encode()) write_record(fo, "MAC", args.mac_addr[0].encode()) write_record(fo, "BrokerIP", args.broker_ip[0].encode()) write_record(fo, "Name", args.name[0].encode()) write_end_marker(fo) if __name__ == "__main__": main()