From 20bf8f32e8c0086223c3ae95867c57f20e434a67 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Thu, 25 May 2023 17:00:25 +0200 Subject: [PATCH 01/24] Replaced xmcflasher java tool by xmc-flasher python. --- boards.txt | 28 +++++----- platform.txt | 21 ++++---- tools/xmc-flasher.py | 126 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+), 25 deletions(-) create mode 100755 tools/xmc-flasher.py diff --git a/boards.txt b/boards.txt index 4ebf9a46..edfad61f 100644 --- a/boards.txt +++ b/boards.txt @@ -4,7 +4,7 @@ menu.LIB=Additional Libraries #################################################### XMC1100_Boot_Kit.name=XMC1100 Boot Kit -XMC1100_Boot_Kit.upload.tool=xmcprog +XMC1100_Boot_Kit.upload.tool=xmcflasher XMC1100_Boot_Kit.upload.speed=115200 XMC1100_Boot_Kit.upload.resetmethod=ck XMC1100_Boot_Kit.upload.maximum_size=65536 @@ -13,7 +13,7 @@ XMC1100_Boot_Kit.upload.wait_for_upload_port=true XMC1100_Boot_Kit.communication=usb XMC1100_Boot_Kit.protocol=dragon_isp XMC1100_Boot_Kit.program.protocol=dragon_isp -XMC1100_Boot_Kit.program.tool=xmcprog +XMC1100_Boot_Kit.program.tool=xmcflasher XMC1100_Boot_Kit.program.extra_params=-Pusb XMC1100_Boot_Kit.serial.disableDTR=true @@ -48,7 +48,7 @@ XMC1100_Boot_Kit.menu.LIB.DSPNN.library.selected=-DARM_LIB_CMSIS_DSP -DARM_LIB_C #################################################### XMC1100_XMC2GO.name=XMC1100 XMC2Go -XMC1100_XMC2GO.upload.tool=xmcprog +XMC1100_XMC2GO.upload.tool=xmcflasher XMC1100_XMC2GO.upload.speed=115200 XMC1100_XMC2GO.upload.resetmethod=ck XMC1100_XMC2GO.upload.maximum_size=65536 @@ -57,7 +57,7 @@ XMC1100_XMC2GO.upload.wait_for_upload_port=true XMC1100_XMC2GO.communication=usb XMC1100_XMC2GO.protocol=dragon_isp XMC1100_XMC2GO.program.protocol=dragon_isp -XMC1100_XMC2GO.program.tool=xmcprog +XMC1100_XMC2GO.program.tool=xmcflasher XMC1100_XMC2GO.program.extra_params=-Pusb XMC1100_XMC2GO.serial.disableDTR=true @@ -92,7 +92,7 @@ XMC1100_XMC2GO.menu.LIB.DSPNN.library.selected=-DARM_LIB_CMSIS_DSP -DARM_LIB_CMS #################################################### XMC1300_Boot_Kit.name=XMC1300 Boot Kit -XMC1300_Boot_Kit.upload.tool=xmcprog +XMC1300_Boot_Kit.upload.tool=xmcflasher XMC1300_Boot_Kit.upload.speed=115200 XMC1300_Boot_Kit.upload.resetmethod=ck XMC1300_Boot_Kit.upload.maximum_size=204800 @@ -101,7 +101,7 @@ XMC1300_Boot_Kit.upload.wait_for_upload_port=true XMC1300_Boot_Kit.communication=usb XMC1300_Boot_Kit.protocol=dragon_isp XMC1300_Boot_Kit.program.protocol=dragon_isp -XMC1300_Boot_Kit.program.tool=xmcprog +XMC1300_Boot_Kit.program.tool=xmcflasher XMC1300_Boot_Kit.program.extra_params=-Pusb XMC1300_Boot_Kit.serial.disableDTR=true @@ -136,7 +136,7 @@ XMC1300_Boot_Kit.menu.LIB.DSPNN.library.selected=-DARM_LIB_CMSIS_DSP -DARM_LIB_C #################################################### XMC1400_Arduino_Kit.name=XMC1400 Kit for Arduino -XMC1400_Arduino_Kit.upload.tool=xmcprog +XMC1400_Arduino_Kit.upload.tool=xmcflasher XMC1400_Arduino_Kit.upload.speed=115200 XMC1400_Arduino_Kit.upload.resetmethod=ck XMC1400_Arduino_Kit.upload.maximum_size=204800 @@ -145,7 +145,7 @@ XMC1400_Arduino_Kit.upload.wait_for_upload_port=true XMC1400_Arduino_Kit.communication=usb XMC1400_Arduino_Kit.protocol=dragon_isp XMC1400_Arduino_Kit.program.protocol=dragon_isp -XMC1400_Arduino_Kit.program.tool=xmcprog +XMC1400_Arduino_Kit.program.tool=xmcflasher XMC1400_Arduino_Kit.program.extra_params=-Pusb XMC1400_Arduino_Kit.serial.disableDTR=true @@ -180,7 +180,7 @@ XMC1400_Arduino_Kit.menu.LIB.DSPNN.library.selected=-DARM_LIB_CMSIS_DSP -DARM_LI #################################################### XMC4200_Platform2GO.name=XMC4200 Platform 2GO -XMC4200_Platform2GO.upload.tool=xmcprog +XMC4200_Platform2GO.upload.tool=xmcflasher XMC4200_Platform2GO.upload.speed=115200 XMC4200_Platform2GO.upload.resetmethod=ck XMC4200_Platform2GO.upload.maximum_size=262144 @@ -189,7 +189,7 @@ XMC4200_Platform2GO.upload.wait_for_upload_port=true XMC4200_Platform2GO.communication=usb XMC4200_Platform2GO.protocol=dragon_isp XMC4200_Platform2GO.program.protocol=dragon_isp -XMC4200_Platform2GO.program.tool=xmcprog +XMC4200_Platform2GO.program.tool=xmcflasher XMC4200_Platform2GO.program.extra_params=-Pusb XMC4200_Platform2GO.serial.disableDTR=true @@ -220,7 +220,7 @@ XMC4200_Platform2GO.menu.LIB.DSP.library.selected=-DARM_LIB_CMSIS_DSP #################################################### XMC4400_Platform2GO.name=XMC4400 Platform 2GO -XMC4400_Platform2GO.upload.tool=xmcprog +XMC4400_Platform2GO.upload.tool=xmcflasher XMC4400_Platform2GO.upload.speed=115200 XMC4400_Platform2GO.upload.resetmethod=ck XMC4400_Platform2GO.upload.maximum_size=512000 @@ -229,7 +229,7 @@ XMC4400_Platform2GO.upload.wait_for_upload_port=true XMC4400_Platform2GO.communication=usb XMC4400_Platform2GO.protocol=dragon_isp XMC4400_Platform2GO.program.protocol=dragon_isp -XMC4400_Platform2GO.program.tool=xmcprog +XMC4400_Platform2GO.program.tool=xmcflasher XMC4400_Platform2GO.program.extra_params=-Pusb XMC4400_Platform2GO.serial.disableDTR=true @@ -265,7 +265,7 @@ XMC4400_Platform2GO.menu.LIB.DSP.library.selected=-DARM_LIB_CMSIS_DSP #################################################### XMC4700_Relax_Kit.name=XMC4700 Relax Kit -XMC4700_Relax_Kit.upload.tool=xmcprog +XMC4700_Relax_Kit.upload.tool=xmcflasher XMC4700_Relax_Kit.upload.speed=115200 XMC4700_Relax_Kit.upload.resetmethod=ck XMC4700_Relax_Kit.upload.maximum_size=2048000 @@ -274,7 +274,7 @@ XMC4700_Relax_Kit.upload.wait_for_upload_port=true XMC4700_Relax_Kit.communication=usb XMC4700_Relax_Kit.protocol=dragon_isp XMC4700_Relax_Kit.program.protocol=dragon_isp -XMC4700_Relax_Kit.program.tool=xmcprog +XMC4700_Relax_Kit.program.tool=xmcflasher XMC4700_Relax_Kit.program.extra_params=-Pusb XMC4700_Relax_Kit.serial.disableDTR=true diff --git a/platform.txt b/platform.txt index c7e19337..e1faabb4 100644 --- a/platform.txt +++ b/platform.txt @@ -6,7 +6,7 @@ # The information about this Arduino compatible environment # --------- name=XMC Family V2.x -version=2.0.0 +version=2.2.0 # Build related core definitions # --------- @@ -126,13 +126,12 @@ recipe.size.regex.data=^(?:\.data|\.VENEER_Code|\.ram_code|\.bss|\.no_init|\Stac # ARM uploader/programmers tools # ---------------- - -tools.xmcprog.path={runtime.tools.XMCFlasher.path} -tools.xmcprog.jar_file=XMCFlasher.jar -tools.xmcprog.erase.params = -e -device "XMC{build.board.version}-{build.board.v}" -tools.xmcprog.erase.pattern=java -jar "{path}/{jar_file}" {erase.params} -tools.xmcprog.upload.protocol= -tools.xmcprog.upload.params.verbose= -tools.xmcprog.upload.params.quiet= -tools.xmcprog.upload.params =-p "{build.path}/{build.project_name}.hex" -device "XMC{build.board.version}-{build.board.v}" -tools.xmcprog.upload.pattern=java -jar "{path}/{jar_file}" {upload.params} +tools.xmcflasher.path={runtime.platform.path}/tools +tools.xmcflasher.cmd.path={path}/xmc-flasher.py +tools.xmcflasher.erase.params=-d XMC{build.board.version}-{build.board.v} -p {serial.port} +tools.xmcflasher.erase.pattern=python {cmd.path} erase {upload.params} +tools.xmcflasher.upload.protocol= +tools.xmcflasher.upload.params.verbose= +tools.xmcflasher.upload.params.quiet= +tools.xmcflasher.upload.params=-d XMC{build.board.version}-{build.board.v} -p {serial.port} -f {build.path}/{build.project_name}.hex +tools.xmcflasher.upload.pattern=python {cmd.path} upload {upload.params} diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py new file mode 100755 index 00000000..69d46756 --- /dev/null +++ b/tools/xmc-flasher.py @@ -0,0 +1,126 @@ +import argparse, serial, subprocess, os, sys +from serial.tools.list_ports import comports + +version = '0.1.0' + +jlinkexe = '' + +def set_environment(): + global jlinkexe + if sys.platform == 'linux' or sys.platform == 'linux2': + jlinkexe = 'JLinkExe' + elif sys.platform == 'win32' or sys.platform == 'cygwin': + jlinkexe = 'jlink' + elif sys.platform == 'darwin': + jlinkexe = 'jlink' + print('warning: mac os not validated') + #raise Exception('mac os not supported?') + +def discover_devices(): + ports = comports() + port_sn_list = [] + for p in ports: + port_sn_list.append((p.device, p.serial_number)) + + return port_sn_list + +def get_device_serial_number(port): + port_sn_list = discover_devices() + for device in port_sn_list: + if device[0] == port: + return device[1] + + return None + +def create_jlink_loadbin_command_file(binfile): + cmd_jlink = 'cmd.jlink' + cmd_load_bin = 'loadbin ' + binfile + ' 0x0\n' + with open(cmd_jlink,'w') as f: + f.writelines(['r\n', 'h\n', cmd_load_bin, 'r\n', 'g\n', 'exit\n']) + + return cmd_jlink + +def create_jlink_erase_command_file(): + cmd_jlink = 'cmd.jlink' + with open(cmd_jlink,'w') as f: + f.writelines(['r\n', 'h\n', 'erase\n', 'exit\n']) + + return cmd_jlink + +def remove_jlink_command_file(cmd_file): + if os.path.exists(cmd_file): + os.remove(cmd_file) + +def jlink_commander(device, serial_num, cmd_file): + jlink_cmd = [jlinkexe, '-autoconnect', '1','-exitonerror', '1', '-nogui', '1', '-device', device, '-selectemubysn', serial_num, '-if', 'swd', '-speed', '4000', '-commandfile', cmd_file] + + try: + jlink_proc = subprocess.Popen(jlink_cmd) + jlink_proc.wait() + except: + raise Exception("jlink error") + +def upload(device, port, binfile): + serial_num = get_device_serial_number(port) + jlink_cmd_file = create_jlink_loadbin_command_file(binfile) + jlink_commander(device, serial_num, jlink_cmd_file) + remove_jlink_command_file(jlink_cmd_file) + +def erase(device, port): + serial_num = get_device_serial_number(port) + jlink_cmd_file = create_jlink_erase_command_file() + jlink_commander(device, serial_num, jlink_cmd_file) + remove_jlink_command_file(jlink_cmd_file) + +def debug(device, port, elfile): + pass #TBD + +def parser(): + + def parser_upload_func(args): + upload(args.device, args.port, args.binfile) + + def parser_erase_func(args): + erase(args.device, args.port) + + class ver_action(argparse.Action): + def __init__(self, option_strings, dest, **kwargs): + return super().__init__(option_strings, dest, nargs=0, default=argparse.SUPPRESS, **kwargs) + + def __call__(self, parser, namespace, values, option_string, **kwargs): + print('xmc-upload version: ' + version) + parser.exit() + + # General parser + parser = argparse.ArgumentParser(description="xmc-upload tool") + + parser.add_argument('-v','--version', action=ver_action, help='xmc-upload version') + subparser = parser.add_subparsers() + # parser.set_defaults(func=main_parser_func) + + # Upload parser + parser_upload = subparser.add_parser('upload', description='Upload binary command') + required_upload = parser_upload.add_argument_group('required arguments') + required_upload.add_argument('-d','--device', type=str, help='jlink device name', required=True) + required_upload.add_argument('-p','--port', type=str, help='serial port', required=True) + required_upload.add_argument('-f','--binfile', type=str, help='binary file to upload', required=True) + parser_upload.set_defaults(func=parser_upload_func) + + # Debug parser + parser_erase = subparser.add_parser('erase', description='erase command') + required_erase = parser_erase.add_argument_group('required arguments') + required_erase.add_argument('-d','--device', type=str, help='jlink device name', required=True) + required_erase.add_argument('-p','--port', type=str, help='serial port', required=True) + parser_erase.set_defaults(func=parser_erase_func) + + # debug_parser. + # TBD in future + + # Parser call + args = parser.parse_args() + args.func(args) + +if __name__ == "__main__": + set_environment() + parser() + From 06f58d84ca2ec89759a29429f79799d70805db79 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Thu, 25 May 2023 17:50:58 +0200 Subject: [PATCH 02/24] tools/xmc-flasher.py: Added help as default when no args in cli. --- tools/xmc-flasher.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index 69d46756..d120c83c 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -77,6 +77,9 @@ def debug(device, port, elfile): def parser(): + def main_parser_func(args): + parser.print_help() + def parser_upload_func(args): upload(args.device, args.port, args.binfile) @@ -93,10 +96,9 @@ def __call__(self, parser, namespace, values, option_string, **kwargs): # General parser parser = argparse.ArgumentParser(description="xmc-upload tool") - parser.add_argument('-v','--version', action=ver_action, help='xmc-upload version') subparser = parser.add_subparsers() - # parser.set_defaults(func=main_parser_func) + parser.set_defaults(func=main_parser_func) # Upload parser parser_upload = subparser.add_parser('upload', description='Upload binary command') From a3b83d6ee4f6e827da6f149f3448e1b4896eb523 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Thu, 25 May 2023 17:52:52 +0200 Subject: [PATCH 03/24] tools/xmc-flasher.py: Renamed tool to xmc-flasher. --- tools/xmc-flasher.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index d120c83c..d77897c5 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -91,12 +91,12 @@ def __init__(self, option_strings, dest, **kwargs): return super().__init__(option_strings, dest, nargs=0, default=argparse.SUPPRESS, **kwargs) def __call__(self, parser, namespace, values, option_string, **kwargs): - print('xmc-upload version: ' + version) + print('xmc-flasher version: ' + version) parser.exit() # General parser - parser = argparse.ArgumentParser(description="xmc-upload tool") - parser.add_argument('-v','--version', action=ver_action, help='xmc-upload version') + parser = argparse.ArgumentParser(description="xmc-flasher tool") + parser.add_argument('-v','--version', action=ver_action, help='xmc-flasher version') subparser = parser.add_subparsers() parser.set_defaults(func=main_parser_func) From fb3248f5da7766e190c8711ac739b3f3fbb93c37 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Wed, 31 May 2023 22:48:37 +0200 Subject: [PATCH 04/24] added changes for device and mem check --- tools/xmc-flasher.py | 53 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index d77897c5..be3c1e7d 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -40,6 +40,15 @@ def create_jlink_loadbin_command_file(binfile): return cmd_jlink +def create_jlink_mem_read_command_file(addr, bytes): + cmd_jlink = 'cmd.jlink' + #cmd_log_enable + cmd_mem_read = 'mem ' + addr +', '+ bytes + '\n' # todo: store register maps, bytes in file + with open(cmd_jlink,'w') as f: + f.writelines([cmd_mem_read, 'r\n', 'g\n', 'exit\n']) + + return cmd_jlink + def create_jlink_erase_command_file(): cmd_jlink = 'cmd.jlink' with open(cmd_jlink,'w') as f: @@ -51,14 +60,50 @@ def remove_jlink_command_file(cmd_file): if os.path.exists(cmd_file): os.remove(cmd_file) -def jlink_commander(device, serial_num, cmd_file): +def jlink_commander(device, serial_num, cmd_file, console_output=False): jlink_cmd = [jlinkexe, '-autoconnect', '1','-exitonerror', '1', '-nogui', '1', '-device', device, '-selectemubysn', serial_num, '-if', 'swd', '-speed', '4000', '-commandfile', cmd_file] + #if console_output is True: + #jlink_cmd.append('-log ') #todo: pipe this in a better way + try: - jlink_proc = subprocess.Popen(jlink_cmd) + jlink_proc = subprocess.Popen(jlink_cmd, stdout=subprocess.PIPE, universal_newlines=True) + if console_output is True: + out, err = jlink_proc.communicate() + with open('console.output', 'w') as f: + f.write(out) jlink_proc.wait() except: raise Exception("jlink error") + +def process_console_output(addr): + with open('console.output','r') as f: + lines = f.readlines() + lines[0].split('\n') + + for line in lines : + if addr in line and '=' in line: + print(line) + + +def check_device(device, port): + + device_reg_addr = '40010004' + device_reg_bytes = '4' + + serial_num = get_device_serial_number(port) + jlink_cmd_file = create_jlink_mem_read_command_file(device_reg_addr, device_reg_bytes) # todo: comes from proper metafile + jlink_commander(device, serial_num, jlink_cmd_file, True) + remove_jlink_command_file(jlink_cmd_file) + + process_console_output(device_reg_addr) + + + +def check_mem(device, port): + jlink_cmd_file = create_jlink_loadbin_command_file(binfile) + jlink_commander(device, serial_num, jlink_cmd_file) + remove_jlink_command_file(jlink_cmd_file) def upload(device, port, binfile): serial_num = get_device_serial_number(port) @@ -81,7 +126,9 @@ def main_parser_func(args): parser.print_help() def parser_upload_func(args): - upload(args.device, args.port, args.binfile) + check_device(args.device, args.port) + #check_mem(args.device, args.port) + #upload(args.device, args.port, args.binfile) def parser_erase_func(args): erase(args.device, args.port) From d971c56a93f9c26bad6f7edfd79d0b88cae735b1 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Thu, 1 Jun 2023 19:11:35 +0200 Subject: [PATCH 05/24] improvements on mem read --- tools/xmc-flasher.py | 45 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index be3c1e7d..3d4aa6ce 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -1,4 +1,4 @@ -import argparse, serial, subprocess, os, sys +import argparse, serial, subprocess, os, sys, re from serial.tools.list_ports import comports version = '0.1.0' @@ -60,6 +60,10 @@ def remove_jlink_command_file(cmd_file): if os.path.exists(cmd_file): os.remove(cmd_file) +def remove_console_output_file(console_output_file): + if os.path.exists(console_output_file): + os.remove(console_output_file) + def jlink_commander(device, serial_num, cmd_file, console_output=False): jlink_cmd = [jlinkexe, '-autoconnect', '1','-exitonerror', '1', '-nogui', '1', '-device', device, '-selectemubysn', serial_num, '-if', 'swd', '-speed', '4000', '-commandfile', cmd_file] @@ -76,27 +80,48 @@ def jlink_commander(device, serial_num, cmd_file, console_output=False): except: raise Exception("jlink error") -def process_console_output(addr): +def process_console_output(string): with open('console.output','r') as f: lines = f.readlines() lines[0].split('\n') for line in lines : - if addr in line and '=' in line: + if string in line and '=' in line: print(line) +def get_mem_contents(addr, bytes, device, port): -def check_device(device, port): - - device_reg_addr = '40010004' - device_reg_bytes = '4' - serial_num = get_device_serial_number(port) - jlink_cmd_file = create_jlink_mem_read_command_file(device_reg_addr, device_reg_bytes) # todo: comes from proper metafile + jlink_cmd_file = create_jlink_mem_read_command_file(addr, bytes) # todo: comes from proper metafile jlink_commander(device, serial_num, jlink_cmd_file, True) remove_jlink_command_file(jlink_cmd_file) + + with open('console.output','r') as f: + lines = f.readlines() + lines[0].split('\n') + + remove_console_output_file('console.output') - process_console_output(device_reg_addr) + reg_contents = "" + for line in lines : + if addr in line and '=' in line: + print(line) + reg_contents = re.findall('[0-9,A-F]+', line) + break + + reg_contents.remove(addr) # remove the addr from the list, just keep reg contents + reg_contents.reverse() # jlink returns LSB first, so reverse it to get MSB on the left side + print(reg_contents) + + + +def check_device(device, port): + device_reg_addr = '40010004' + device_reg_bytes = '4' + + get_mem_contents(device_reg_addr, device_reg_bytes, device, port) + + From 8a86418b072085ef771c54e5f295427eb6b3fc68 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Mon, 12 Jun 2023 16:06:42 +0200 Subject: [PATCH 06/24] added device check complete --- tools/xmc-flasher.py | 52 +++++++++++++++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index 3d4aa6ce..a2e2064b 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -1,4 +1,4 @@ -import argparse, serial, subprocess, os, sys, re +import argparse, serial, subprocess, os, sys, re, json from serial.tools.list_ports import comports version = '0.1.0' @@ -105,30 +105,56 @@ def get_mem_contents(addr, bytes, device, port): reg_contents = "" for line in lines : if addr in line and '=' in line: - print(line) + print(line) #here reg_contents = re.findall('[0-9,A-F]+', line) break reg_contents.remove(addr) # remove the addr from the list, just keep reg contents reg_contents.reverse() # jlink returns LSB first, so reverse it to get MSB on the left side - print(reg_contents) + print(reg_contents) #here + reg_contents = ''.join(reg_contents) + print(reg_contents) #here + return reg_contents + +def read_master_data(device): + try: + f = open('xmc-data.json', 'rb') + except OSError: + print("Could not open/read master data file!:") + sys.exit() + return json.load(f) def check_device(device, port): - device_reg_addr = '40010004' - device_reg_bytes = '4' - get_mem_contents(device_reg_addr, device_reg_bytes, device, port) - - + master_data = read_master_data(device) + # get value from reg + device_value = get_mem_contents(master_data[device]['IDCHIP']['addr'], master_data[device]['IDCHIP']['size'], device, port) + device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['IDCHIP']['mask'],16)) # take only those bits which are needed + device_value_masked = f'{device_value_masked:x}' + device_value_masked = device_value_masked.zfill(int(master_data[device]['IDCHIP']['size'])*2) + + #compare with stored master data + if not device_value_masked == master_data[device]['IDCHIP']['value']: + raise Exception("Device connected does not match the selected device to flash") def check_mem(device, port): - jlink_cmd_file = create_jlink_loadbin_command_file(binfile) - jlink_commander(device, serial_num, jlink_cmd_file) - remove_jlink_command_file(jlink_cmd_file) + + master_data = read_master_data(device) + # get value from reg + device_value = get_mem_contents(master_data[device]['FLSIZE']['addr'], master_data[device]['FLSIZE']['size'], device, port) + device_value = int('0x'+device_value,16) & '0x0003f000' # bit 17 to bit 12 are needed + device_value = device_value >> '12' + # device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['IDCHIP']['mask'],16)) # take only those bits which are needed + # device_value_masked = f'{device_value_masked:x}' + # device_value_masked = device_value_masked.zfill(int(master_data[device]['IDCHIP']['size'])*2) + + #compare with stored master data + # if not device_value_masked == master_data[device]['IDCHIP']['value']: + # raise Exception("Device connected does not match the selected device to flash") def upload(device, port, binfile): serial_num = get_device_serial_number(port) @@ -151,8 +177,8 @@ def main_parser_func(args): parser.print_help() def parser_upload_func(args): - check_device(args.device, args.port) - #check_mem(args.device, args.port) + #check_device(args.device, args.port) + check_mem(args.device, args.port) #upload(args.device, args.port, args.binfile) def parser_erase_func(args): From ecee08821162db0d89ecfcfb83cee6250098e159 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Sat, 17 Jun 2023 01:11:01 +0200 Subject: [PATCH 07/24] added XMC1 series metadata --- tools/xmc-flasher.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index a2e2064b..a11c2231 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -135,6 +135,8 @@ def check_device(device, port): device_value_masked = f'{device_value_masked:x}' device_value_masked = device_value_masked.zfill(int(master_data[device]['IDCHIP']['size'])*2) + print(f"Device is: {device.split('-')[0]}") + #compare with stored master data if not device_value_masked == master_data[device]['IDCHIP']['value']: raise Exception("Device connected does not match the selected device to flash") @@ -146,15 +148,17 @@ def check_mem(device, port): master_data = read_master_data(device) # get value from reg device_value = get_mem_contents(master_data[device]['FLSIZE']['addr'], master_data[device]['FLSIZE']['size'], device, port) - device_value = int('0x'+device_value,16) & '0x0003f000' # bit 17 to bit 12 are needed - device_value = device_value >> '12' - # device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['IDCHIP']['mask'],16)) # take only those bits which are needed - # device_value_masked = f'{device_value_masked:x}' - # device_value_masked = device_value_masked.zfill(int(master_data[device]['IDCHIP']['size'])*2) + device_value = int('0x'+device_value,16) & int('0x0003f000',16) # bit 17 to bit 12 are needed + device_value = device_value >> int(master_data[device]['FLSIZE']['bitposition_LSB']) + flash_size = (device_value-1)*4 # flash size given by (ADDR-1)*4 + flash_size = str(flash_size).zfill(4) + + print(f"Flash size is: {int(flash_size)}kB") - #compare with stored master data - # if not device_value_masked == master_data[device]['IDCHIP']['value']: - # raise Exception("Device connected does not match the selected device to flash") + #compare with selected device + if not flash_size == device.split('-')[1]: + raise Exception("Memory size of device connected does not match that of the selected device to flash") + def upload(device, port, binfile): serial_num = get_device_serial_number(port) @@ -177,7 +181,7 @@ def main_parser_func(args): parser.print_help() def parser_upload_func(args): - #check_device(args.device, args.port) + check_device(args.device, args.port) check_mem(args.device, args.port) #upload(args.device, args.port, args.binfile) From 90db805d69490386de6510fecbeeba58778ac15c Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Sat, 17 Jun 2023 19:15:51 +0200 Subject: [PATCH 08/24] stable version --- tools/xmc-data.json | 99 ++++++++++++++++++++++++++++++++++++++++++++ tools/xmc-flasher.py | 47 +++++++++++++-------- 2 files changed, 129 insertions(+), 17 deletions(-) create mode 100644 tools/xmc-data.json diff --git a/tools/xmc-data.json b/tools/xmc-data.json new file mode 100644 index 00000000..f415f7f9 --- /dev/null +++ b/tools/xmc-data.json @@ -0,0 +1,99 @@ +{ + "XMC1100-0064":{ + "IDCHIP":{ + "addr":"40010004", + "size":"4", + "value":"00011000", + "mask":"FFFFF000" + }, + "FLSIZE":{ + "addr":"40000404", + "size": "4", + "bitposition": "12" + } + }, + "XMC1100-0032":{ + "IDCHIP":{ + "addr":"40010004", + "size":"4", + "value":"00011000", + "mask":"FFFFF000" + }, + "FLSIZE":{ + "addr":"40000404", + "size": "4", + "bitposition_MSB":"17", + "bitposition_LSB":"12" + } + }, + "XMC1300-0200":{ + "IDCHIP":{ + "addr":"40010004", + "size":"4", + "value":"00013000", + "mask":"FFFFF000" + }, + "FLSIZE":{ + "addr":"40000404", + "size": "4", + "bitposition_MSB":"17", + "bitposition_LSB":"12" + } + }, + "XMC1402-0200":{ + "IDCHIP":{ + "addr":"40010004", + "size":"4", + "value":"00014000", + "mask":"FFFFF000" + }, + "FLSIZE":{ + "addr":"40000404", + "size": "4", + "bitposition_MSB":"17", + "bitposition_LSB":"12" + } + }, + "XMC4200-256":{ + "IDCHIP":{ + "addr":"50004004", + "size":"4", + "value":"00042000", + "mask":"FFFFF000" + }, + "FLASH0_ID":{ + "addr":"58002008", + "size":"4", + "value":"009C0000", + "mask":"00FF0000" + } + }, + "XMC4400-512":{ + "IDCHIP":{ + "addr":"50004004", + "size":"4", + "value":"00044000", + "mask":"FFFFF000" + }, + "FLASH0_ID":{ + "addr":"58002008", + "size":"4", + "value":"009F0000", + "mask":"00FF0000" + } + }, + "XMC4700-2048":{ + "IDCHIP":{ + "addr":"50004004", + "size":"4", + "value":"00047000", + "mask":"FFFFF000" + }, + "FLASH0_ID":{ + "addr":"58002008", + "size":"4", + "value":"00920000", + "mask":"00FF0000" + } + } +} \ No newline at end of file diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index a11c2231..b4558a8d 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -76,6 +76,9 @@ def jlink_commander(device, serial_num, cmd_file, console_output=False): out, err = jlink_proc.communicate() with open('console.output', 'w') as f: f.write(out) + else: + for line in jlink_proc.stdout: + print(line, end='') jlink_proc.wait() except: raise Exception("jlink error") @@ -105,15 +108,12 @@ def get_mem_contents(addr, bytes, device, port): reg_contents = "" for line in lines : if addr in line and '=' in line: - print(line) #here reg_contents = re.findall('[0-9,A-F]+', line) break reg_contents.remove(addr) # remove the addr from the list, just keep reg contents reg_contents.reverse() # jlink returns LSB first, so reverse it to get MSB on the left side - print(reg_contents) #here reg_contents = ''.join(reg_contents) - print(reg_contents) #here return reg_contents def read_master_data(device): @@ -144,21 +144,34 @@ def check_device(device, port): def check_mem(device, port): - - master_data = read_master_data(device) - # get value from reg - device_value = get_mem_contents(master_data[device]['FLSIZE']['addr'], master_data[device]['FLSIZE']['size'], device, port) - device_value = int('0x'+device_value,16) & int('0x0003f000',16) # bit 17 to bit 12 are needed - device_value = device_value >> int(master_data[device]['FLSIZE']['bitposition_LSB']) - flash_size = (device_value-1)*4 # flash size given by (ADDR-1)*4 - flash_size = str(flash_size).zfill(4) - print(f"Flash size is: {int(flash_size)}kB") + if "XMC1" in device: + master_data = read_master_data(device) + # get value from reg + device_value = get_mem_contents(master_data[device]['FLSIZE']['addr'], master_data[device]['FLSIZE']['size'], device, port) + device_value = int('0x'+device_value,16) & int('0x0003f000',16) # bit 17 to bit 12 are needed + device_value = device_value >> int(master_data[device]['FLSIZE']['bitposition_LSB']) + flash_size = (device_value-1)*4 #flash size given by (ADDR-1)*4 + flash_size = str(flash_size).zfill(4) + + print(f"Flash size is: {int(flash_size)}kB") + + #compare with selected device + if not flash_size == device.split('-')[1]: + raise Exception("Memory size of device connected does not match that of the selected device to flash") + + else: #XMC4 series + master_data = read_master_data(device) + # get value from reg + device_value = get_mem_contents(master_data[device]['FLASH0_ID']['addr'], master_data[device]['FLASH0_ID']['size'], device, port) + device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['FLASH0_ID']['mask'],16)) # take only those bits which are needed + device_value_masked = f'{device_value_masked:x}' + device_value_masked = device_value_masked.zfill(int(master_data[device]['FLASH0_ID']['size'])*2) + + #compare with stored master data + if not device_value_masked.upper() == master_data[device]['FLASH0_ID']['value']: + raise Exception("Memory size of device connected does not match that of the selected device to flash") - #compare with selected device - if not flash_size == device.split('-')[1]: - raise Exception("Memory size of device connected does not match that of the selected device to flash") - def upload(device, port, binfile): serial_num = get_device_serial_number(port) @@ -183,7 +196,7 @@ def main_parser_func(args): def parser_upload_func(args): check_device(args.device, args.port) check_mem(args.device, args.port) - #upload(args.device, args.port, args.binfile) + upload(args.device, args.port, args.binfile) def parser_erase_func(args): erase(args.device, args.port) From 1e762e667a845d83fc27d9dc8769c67c9957b641 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Sat, 17 Jun 2023 19:56:23 +0200 Subject: [PATCH 09/24] added special case for XMC2GO --- tools/xmc-data.json | 3 ++- tools/xmc-flasher.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tools/xmc-data.json b/tools/xmc-data.json index f415f7f9..f95cc43b 100644 --- a/tools/xmc-data.json +++ b/tools/xmc-data.json @@ -9,7 +9,8 @@ "FLSIZE":{ "addr":"40000404", "size": "4", - "bitposition": "12" + "bitposition_MSB":"17", + "bitposition_LSB":"12" } }, "XMC1100-0032":{ diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index b4558a8d..80c9bfa3 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -1,4 +1,4 @@ -import argparse, serial, subprocess, os, sys, re, json +import argparse, serial, subprocess, os, sys, re, json, warnings from serial.tools.list_ports import comports version = '0.1.0' @@ -156,6 +156,11 @@ def check_mem(device, port): print(f"Flash size is: {int(flash_size)}kB") + # special case for XMC2GO-32kB variant, bypass check + if "XMC1100" in device and int(flash_size) == 32: + warnings.warn("XMC2GO 32kB varaint detected!") + return + #compare with selected device if not flash_size == device.split('-')[1]: raise Exception("Memory size of device connected does not match that of the selected device to flash") From a8c792faac415bf5ac0cd737452eee10da2eee67 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Mon, 19 Jun 2023 17:34:36 +0200 Subject: [PATCH 10/24] fixed path --- tools/xmc-flasher.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index 80c9bfa3..8101b5aa 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -118,7 +118,7 @@ def get_mem_contents(addr, bytes, device, port): def read_master_data(device): try: - f = open('xmc-data.json', 'rb') + f = open(os.getcwd() + "\\tools\\xmc-data.json", 'rb') except OSError: print("Could not open/read master data file!:") sys.exit() From 6f9fd9ad6ba542c21e06b1fb1131a42e5cba0c70 Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Mon, 19 Jun 2023 17:47:00 +0200 Subject: [PATCH 11/24] converted master data into variable --- tools/xmc-flasher.py | 17 ++++++----------- tools/{xmc-data.json => xmc_data.py} | 4 +++- 2 files changed, 9 insertions(+), 12 deletions(-) rename tools/{xmc-data.json => xmc_data.py} (98%) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index 8101b5aa..5a8d717a 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -1,5 +1,6 @@ import argparse, serial, subprocess, os, sys, re, json, warnings from serial.tools.list_ports import comports +from xmc_data import XMC_master_data version = '0.1.0' @@ -116,19 +117,13 @@ def get_mem_contents(addr, bytes, device, port): reg_contents = ''.join(reg_contents) return reg_contents -def read_master_data(device): - try: - f = open(os.getcwd() + "\\tools\\xmc-data.json", 'rb') - except OSError: - print("Could not open/read master data file!:") - sys.exit() - - return json.load(f) +def read_master_data(): + return XMC_master_data def check_device(device, port): - master_data = read_master_data(device) + master_data = read_master_data() # get value from reg device_value = get_mem_contents(master_data[device]['IDCHIP']['addr'], master_data[device]['IDCHIP']['size'], device, port) device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['IDCHIP']['mask'],16)) # take only those bits which are needed @@ -146,7 +141,7 @@ def check_device(device, port): def check_mem(device, port): if "XMC1" in device: - master_data = read_master_data(device) + master_data = read_master_data() # get value from reg device_value = get_mem_contents(master_data[device]['FLSIZE']['addr'], master_data[device]['FLSIZE']['size'], device, port) device_value = int('0x'+device_value,16) & int('0x0003f000',16) # bit 17 to bit 12 are needed @@ -166,7 +161,7 @@ def check_mem(device, port): raise Exception("Memory size of device connected does not match that of the selected device to flash") else: #XMC4 series - master_data = read_master_data(device) + master_data = read_master_data() # get value from reg device_value = get_mem_contents(master_data[device]['FLASH0_ID']['addr'], master_data[device]['FLASH0_ID']['size'], device, port) device_value_masked = (int('0x'+device_value,16)) & (int('0x'+master_data[device]['FLASH0_ID']['mask'],16)) # take only those bits which are needed diff --git a/tools/xmc-data.json b/tools/xmc_data.py similarity index 98% rename from tools/xmc-data.json rename to tools/xmc_data.py index f95cc43b..284b3841 100644 --- a/tools/xmc-data.json +++ b/tools/xmc_data.py @@ -1,4 +1,6 @@ -{ + + +XMC_master_data = { "XMC1100-0064":{ "IDCHIP":{ "addr":"40010004", From e839f1430a300e2f92d93a6122a75824925b392f Mon Sep 17 00:00:00 2001 From: "Bora Monideep (IFAG DES DOS SW ESW EPE)" Date: Tue, 20 Jun 2023 10:47:55 +0200 Subject: [PATCH 12/24] fixed typo --- tools/xmc-flasher.py | 4 ++-- tools/xmc_data.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/xmc-flasher.py b/tools/xmc-flasher.py index 5a8d717a..32078d25 100755 --- a/tools/xmc-flasher.py +++ b/tools/xmc-flasher.py @@ -1,6 +1,6 @@ import argparse, serial, subprocess, os, sys, re, json, warnings from serial.tools.list_ports import comports -from xmc_data import XMC_master_data +from xmc_data import xmc_master_data version = '0.1.0' @@ -118,7 +118,7 @@ def get_mem_contents(addr, bytes, device, port): return reg_contents def read_master_data(): - return XMC_master_data + return xmc_master_data def check_device(device, port): diff --git a/tools/xmc_data.py b/tools/xmc_data.py index 284b3841..1e87c401 100644 --- a/tools/xmc_data.py +++ b/tools/xmc_data.py @@ -1,6 +1,6 @@ -XMC_master_data = { +xmc_master_data = { "XMC1100-0064":{ "IDCHIP":{ "addr":"40010004", From 177905af0f1d40ffe040ca3ea2974641205412c2 Mon Sep 17 00:00:00 2001 From: "U-INFINEON\\enriquezgarc" Date: Tue, 15 Aug 2023 11:34:03 +0200 Subject: [PATCH 13/24] README: added python install requirements. --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index e158f085..e21287e1 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,19 @@ If you have already installed '[DAVE™ - Development Platform for XMC™ Microc **Note:** The XMC-for-Arduino BSP installs the **XMC Flasher** tool used to flash the compiled firmware (.hex) into the XMC device. However this tool requires **Java(TM) SE Runtime Environment** to be installed in the host system. Java(TM) SE Runtime Environment version **1.8.0** is known to be compatible with the tool. +### Required tools + +XMC-for-Arduino requires Python 3.x and the `serial` and `pyserial`. Make sure Python is installed in your machine and available in the system path. +You can check if it was successfully installed by opening your command line or terminal and typing: +``` + python --version +``` +With [pip](https://pip.pypa.io/en/stable/installation/) available, install the mentioned packages from a terminal: + +``` + pip install serial pyserial +``` + ### Using Arduino IDE ![Preferences](https://raw.githubusercontent.com/infineon/assets/master/Pictures/Preferences.png) From 30fe338a782002efeec0d65115a5f2211f9a004b Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Tue, 15 Aug 2023 11:36:32 +0200 Subject: [PATCH 14/24] README: Removed note for JAVA dependency. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index e21287e1..d436acfc 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,6 @@ If you have already installed '[DAVE™ - Development Platform for XMC™ Microc ![J-Link](https://raw.githubusercontent.com/infineon/assets/master/Pictures/J-Link_Packages.png) -**Note:** The XMC-for-Arduino BSP installs the **XMC Flasher** tool used to flash the compiled firmware (.hex) into the XMC device. However this tool requires **Java(TM) SE Runtime Environment** to be installed in the host system. Java(TM) SE Runtime Environment version **1.8.0** is known to be compatible with the tool. - ### Required tools XMC-for-Arduino requires Python 3.x and the `serial` and `pyserial`. Make sure Python is installed in your machine and available in the system path. From e4ab769004d5c701447038a2ec2175c9a582f828 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Wed, 16 Aug 2023 16:31:09 +0200 Subject: [PATCH 15/24] .github/scripts/release.py: Adding release script, split pipeline. --- .github/scripts/release.py | 130 +++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100755 .github/scripts/release.py diff --git a/.github/scripts/release.py b/.github/scripts/release.py new file mode 100755 index 00000000..0ee4ce79 --- /dev/null +++ b/.github/scripts/release.py @@ -0,0 +1,130 @@ + +import argparse, copy, hashlib, json, re, requests, os, shutil + +version = '0.1.0' + +xmc_ino_root_path = os.path.relpath(os.path.join(os.path.join(os.getcwd(), os.pardir), os.pardir)) +build_dir_name = 'pkg_build' +pkg_assets_build_path = os.path.join(xmc_ino_root_path , build_dir_name) + +def strip_prefix_from_version(version): + return re.sub(r'[vV]', '', version) + +def mkdir_package_dir(version): + pkg_name = "XMC_IFX_" + version + pkg_build_path = os.path.join(pkg_assets_build_path, pkg_name) + os.mkdir(pkg_build_path) + + return pkg_name + +def build_package(pkg_name): + pkg_build_path = os.path.join(pkg_assets_build_path, pkg_name) + + dirs_to_copy = [ + 'cores', + 'libraries', + 'tools', + 'variants' + ] + + files_to_copy = [ + 'boards.txt', + 'keywords.txt', + 'package.json', + 'platform.txt', + 'LICENSE.md', + 'README.md' + ] + + for dir in dirs_to_copy: + shutil.copytree(os.path.join(xmc_ino_root_path, dir), os.path.join(pkg_build_path, dir)) + + for file in files_to_copy: + shutil.copyfile(os.path.join(xmc_ino_root_path, file), os.path.join(pkg_build_path, file)) + +def zip_package(pkg_name): + pkg_build_path = os.path.join(pkg_assets_build_path, pkg_name) + shutil.make_archive(pkg_build_path, 'zip', pkg_assets_build_path, pkg_name) + +def get_package_size(pkg): + return os.path.getsize(pkg) + +def get_package_sha256(pkg): + return hashlib.sha256(pkg.encode('UTF-8')).hexdigest() + +def get_latest_package_index_json(): + return requests.get('https://github.com/Infineon/XMC-for-Arduino/releases/latest/download/package_infineon_index.json').json() + +def get_platform_data_struct_copy(pkg_index): + return copy.deepcopy(pkg_index['packages'][0]['platforms'][0]) + +def set_new_platform_data_fields(platform_data, pkg_name, version): + platform_data['version'] = str(version) + archive_file_name = str(pkg_name) + ".zip" + platform_data['archiveFileName'] = archive_file_name + platform_data['url'] = "https://github.com/Infineon/XMC-for-Arduino/releases/download/v" + str(version) + "/" + str(archive_file_name) + platform_data['checksum'] ="SHA-256:" + str(get_package_sha256(archive_file_name)) + platform_data['size'] = str(get_package_size(os.path.join(pkg_assets_build_path, archive_file_name))) + +def add_new_platform_to_package_index(pkg_index, new_platform): + pkg_index['packages'][0]['platforms'].insert(0, new_platform) + +def make_package_index_file(pkg_index): + pkg_index_json_obj = json.dumps(pkg_index, indent=2) + pkg_index_w_path = os.path.join(pkg_assets_build_path, "package_infineon_index.json") + with open(pkg_index_w_path, "w") as pkg_file: + pkg_file.write(pkg_index_json_obj) + +def build_package_index_json(pkg_name, version): + package_index = get_latest_package_index_json() + new_platform_data = get_platform_data_struct_copy(package_index) + set_new_platform_data_fields(new_platform_data, pkg_name, version) + add_new_platform_to_package_index(package_index, new_platform_data) + make_package_index_file(package_index) + +def build_release_assets(version): + os.mkdir(pkg_assets_build_path) + pkg_name = mkdir_package_dir(version) + build_package(pkg_name) + zip_package(pkg_name) + build_package_index_json(pkg_name, version) + +def parser(): + + def main_parser_func(args): + parser.print_help() + + def parser_build_release_assets_func(args): + global xmc_ino_root_path + global pkg_build_path + xmc_ino_root_path = args.root_path + pkg_build_path = args.build_path + version = strip_prefix_from_version(args.version) + build_release_assets(version) + + class ver_action(argparse.Action): + def __init__(self, option_strings, dest, **kwargs): + return super().__init__(option_strings, dest, nargs=0, default=argparse.SUPPRESS, **kwargs) + + def __call__(self, parser, namespace, values, option_string, **kwargs): + print('xmc-release version: ' + version) + parser.exit() + + # General parser + parser = argparse.ArgumentParser(description="xmc-release tool") + parser.add_argument('-v','--version', action=ver_action, help='xmc-release version') + subparser = parser.add_subparsers() + parser.set_defaults(func=main_parser_func) + + # Release parser + parser_release = subparser.add_parser('build-release', description='Build package release assets') + parser_release.add_argument('version', type=str, help='Package release version (semver x.y.z)') + parser_release.add_argument('-r','--root-path', type=str, default=xmc_ino_root_path, help='Path to the XMC-for-Arduino root path') + parser_release.add_argument('-b','--build-path', type=str, default=pkg_assets_build_path, help='Path to build package') + parser_release.set_defaults(func=parser_build_release_assets_func) + + args = parser.parse_args() + args.func(args) + +if __name__ == "__main__": + parser() \ No newline at end of file From 0fbb5c7a9c8fb2ada9c331137fa3a4e2dd482081 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Wed, 16 Aug 2023 17:24:22 +0200 Subject: [PATCH 16/24] .github: Refactored release pipeline. --- .github/scripts/release.py | 2 +- .github/workflows/release.yml | 33 ++++++++++++++++++++++++--------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/.github/scripts/release.py b/.github/scripts/release.py index 0ee4ce79..6c4f5d87 100755 --- a/.github/scripts/release.py +++ b/.github/scripts/release.py @@ -53,7 +53,7 @@ def get_package_sha256(pkg): return hashlib.sha256(pkg.encode('UTF-8')).hexdigest() def get_latest_package_index_json(): - return requests.get('https://github.com/Infineon/XMC-for-Arduino/releases/latest/download/package_infineon_index.json').json() + return requests.get('https://github.com/Infineon/XMC-for-Arduino/releases/latest/download/package_infineon_index.json').json() def get_platform_data_struct_copy(pkg_index): return copy.deepcopy(pkg_index['packages'][0]['platforms'][0]) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 365b75ff..b5a60c5b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,20 +3,35 @@ name: XMC-for-Arduino Release Automation on: release: types: published - + push: + tags: + - 'v*.*.*' + - 'V*.*.*' jobs: - build: - name: Publish Release + release: runs-on: ubuntu-latest - + if: startsWith(github.ref, 'refs/tags/V') steps: - - uses: actions/checkout@v2 - with: - ref: master + - uses: actions/checkout@v3 - uses: actions/setup-python@v1 with: python-version: '3.x' - - name: Build Release + - name: Build release changelog + id: build_changelog + uses: mikepenz/release-changelog-builder-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: bash ./.github/scripts/on-release.sh \ No newline at end of file + - name: Build release assets + run: | + cd .github/scripts + echo "Tag name : ${{ github.ref_name }}" + python release.py build-release ${{ github.ref_name }} + + - name: Upload assets + uses: softprops/action-gh-release@v1 + with: + name: XMC for Arduino ${{ github.ref_name }} + files: | + pkg_build/*.zip + pkg_build/package_infineon_index.json + body: ${{steps.build_changelog.outputs.changelog}} \ No newline at end of file From d6c0322708e087a4c4cfca63905398bb1c80cbea Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Wed, 16 Aug 2023 17:29:11 +0200 Subject: [PATCH 17/24] .github: WIP release pipeline. --- .github/workflows/release.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b5a60c5b..6496a7fc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,7 +13,7 @@ jobs: if: startsWith(github.ref, 'refs/tags/V') steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v1 + - uses: actions/setup-python@v4 with: python-version: '3.x' - name: Build release changelog @@ -24,7 +24,6 @@ jobs: - name: Build release assets run: | cd .github/scripts - echo "Tag name : ${{ github.ref_name }}" python release.py build-release ${{ github.ref_name }} - name: Upload assets From 036d194a647a3e9a707dcc58502746ad9e9fe50b Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Wed, 16 Aug 2023 17:31:53 +0200 Subject: [PATCH 18/24] .github: WIP release pipeline. --- .github/workflows/release.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6496a7fc..b288510f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,6 +16,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: '3.x' + - run: pip install requests - name: Build release changelog id: build_changelog uses: mikepenz/release-changelog-builder-action@v3 From 2e8386f4aa2358139dcd95367b35a84bdd6ea512 Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Wed, 16 Aug 2023 17:35:34 +0200 Subject: [PATCH 19/24] .github: Removed former scripts. --- .github/scripts/merge_packages.py | 84 ---------- .github/scripts/on-release.sh | 270 ------------------------------ 2 files changed, 354 deletions(-) delete mode 100644 .github/scripts/merge_packages.py delete mode 100644 .github/scripts/on-release.sh diff --git a/.github/scripts/merge_packages.py b/.github/scripts/merge_packages.py deleted file mode 100644 index 6b76d4b4..00000000 --- a/.github/scripts/merge_packages.py +++ /dev/null @@ -1,84 +0,0 @@ - -# -from __future__ import print_function -from distutils.version import LooseVersion -import re -import json -import sys - -def load_package(filename): - pkg = json.load(open(filename))['packages'][0] - print("Loaded package {0} from {1}".format(pkg['name'], filename), file=sys.stderr) - print("{0} platform(s), {1} tools".format(len(pkg['platforms']), len(pkg['tools'])), file=sys.stderr) - return pkg - -def merge_objects(versions, obj): - for o in obj: - name = o['name'].encode('ascii') - ver = o['version'].encode('ascii') - if not name in versions: - print("found new object, {0}".format(name), file=sys.stderr) - versions[name] = {} - if not ver in versions[name]: - print("found new version {0} for object {1}".format(ver, name), file=sys.stderr) - versions[name][ver] = o - return versions - -def pkgVersionNormalized(versionString): - - verStr = str(versionString) - verParts = re.split('\.|-rc', verStr, flags=re.IGNORECASE) - - if len(verParts) == 3: - if (sys.version_info > (3, 0)): # Python 3 - verStr = str(versionString) + '-rc' + str(sys.maxsize) - else: # Python 2 - verStr = str(versionString) + '-rc' + str(sys.maxint) - - elif len(verParts) != 4: - print("pkgVersionNormalized WARNING: unexpected version format: {0})".format(verStr), file=sys.stderr) - - return verStr - - -def main(args): - if len(args) < 3: - print("Usage: {0} ".format(args[0]), file=sys.stderr) - return 1 - - tools = {} - platforms = {} - pkg1 = load_package(args[1]) - - tools = merge_objects(tools, pkg1['tools']); - - platforms = merge_objects(platforms, pkg1['platforms']); - - pkg2 = load_package(args[2]) - - tools = merge_objects(tools, pkg2['tools']); - - platforms = merge_objects(platforms, pkg2['platforms']); - - - pkg1['tools'] = [] - pkg1['platforms'] = [] - - for name in tools: - for version in tools[name]: - print("Adding tool {0}-{1}".format(name, version), file=sys.stderr) - pkg1['tools'].append(tools[name][version]) - - for name in platforms: - for version in platforms[name]: - print("Adding platform {0}-{1}".format(name, version), file=sys.stderr) - pkg1['platforms'].append(platforms[name][version]) - - - pkg1['platforms'] = sorted(pkg1['platforms'], key=lambda k: LooseVersion(pkgVersionNormalized(k['version'])), reverse=True) - - - json.dump({'packages':[pkg1]}, sys.stdout, indent=2) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) \ No newline at end of file diff --git a/.github/scripts/on-release.sh b/.github/scripts/on-release.sh deleted file mode 100644 index 81136572..00000000 --- a/.github/scripts/on-release.sh +++ /dev/null @@ -1,270 +0,0 @@ -#!/bin/bash - -if [ ! $GITHUB_EVENT_NAME == "release" ]; then - echo "Wrong event '$GITHUB_EVENT_NAME'!" - exit 1 -fi - -EVENT_JSON=`cat $GITHUB_EVENT_PATH` - -action=`echo $EVENT_JSON | jq -r '.action'` -if [ ! $action == "published" ]; then - echo "Wrong action '$action'. Exiting now..." - exit 0 -fi - -draft=`echo $EVENT_JSON | jq -r '.release.draft'` -if [ $draft == "true" ]; then - echo "It's a draft release. Exiting now..." - exit 0 -fi - -RELEASE_PRE=`echo $EVENT_JSON | jq -r '.release.prerelease'` -RELEASE_TAG_WITH_PREFIX=`echo $EVENT_JSON | jq -r '.release.tag_name'` -RELEASE_TAG="${RELEASE_TAG_WITH_PREFIX:1}" -RELEASE_BRANCH=`echo $EVENT_JSON | jq -r '.release.target_commitish'` -RELEASE_ID=`echo $EVENT_JSON | jq -r '.release.id'` -RELEASE_BODY=`echo $EVENT_JSON | jq -r '.release.body'` - -OUTPUT_DIR="$GITHUB_WORKSPACE/build" -PACKAGE_NAME="XMC_IFX_$RELEASE_TAG" -PACKAGE_JSON_MERGE="$GITHUB_WORKSPACE/.github/scripts/merge_packages.py" -PACKAGE_JSON_TEMPLATE="$GITHUB_WORKSPACE/package/package_infineon_index.template.json" -PACKAGE_JSON_REL="package_infineon_index.json" - -echo "Event: $GITHUB_EVENT_NAME, Repo: $GITHUB_REPOSITORY, Path: $GITHUB_WORKSPACE, Ref: $GITHUB_REF" -echo "Action: $action, Branch: $RELEASE_BRANCH, ID: $RELEASE_ID" -echo "Tag: $RELEASE_TAG, Draft: $draft, Pre-Release: $RELEASE_PRE" - -function get_file_size(){ - local file="$1" - if [[ "$OSTYPE" == "darwin"* ]]; then - eval `stat -s "$file"` - local res="$?" - echo "$st_size" - return $res - else - stat --printf="%s" "$file" - return $? - fi -} - -function git_upload_asset(){ - local name=$(basename "$1") - # local mime=$(file -b --mime-type "$1") - curl -k -X POST -sH "Authorization: token $GITHUB_TOKEN" -H "Content-Type: application/octet-stream" --data-binary @"$1" "https://uploads.github.com/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets?name=$name" -} - -function git_safe_upload_asset(){ - local file="$1" - local name=$(basename "$file") - local size=`get_file_size "$file"` - local upload_res=`git_upload_asset "$file"` - if [ $? -ne 0 ]; then - >&2 echo "ERROR: Failed to upload '$name' ($?)" - return 1 - fi - up_size=`echo "$upload_res" | jq -r '.size'` - if [ $up_size -ne $size ]; then - >&2 echo "ERROR: Uploaded size does not match! $up_size != $size" - #git_delete_asset - return 1 - fi - echo "$upload_res" | jq -r '.browser_download_url' - return $? -} - - - -function merge_package_json(){ - local jsonLink=$1 - local jsonOut=$2 - local old_json=$OUTPUT_DIR/oldJson.json - local merged_json=$OUTPUT_DIR/mergedJson.json - - echo "Downloading previous JSON $jsonLink ..." - curl -L -o "$old_json" "https://github.com/$GITHUB_REPOSITORY/releases/download/$jsonLink?access_token=$GITHUB_TOKEN" 2>/dev/null - if [ $? -ne 0 ]; then echo "ERROR: Download Failed! $?"; exit 1; fi - - echo "Creating new JSON ..." - set +e - stdbuf -oL python "$PACKAGE_JSON_MERGE" "$jsonOut" "$old_json" > "$merged_json" - set -e - - set -v - if [ ! -s $merged_json ]; then - rm -f "$merged_json" - echo "Nothing to merge" - else - rm -f "$jsonOut" - mv "$merged_json" "$jsonOut" - echo "JSON data successfully merged" - fi - rm -f "$old_json" - set +v -} - -set -e - -## -## PACKAGE ZIP -## - -mkdir -p "$OUTPUT_DIR" -PKG_DIR="$OUTPUT_DIR/$PACKAGE_NAME" -PACKAGE_ZIP="$PACKAGE_NAME.zip" - - -# Copy all core files to the package folder -echo "Copying files for packaging ..." -mkdir -p "$PKG_DIR/cores/" -mv "$GITHUB_WORKSPACE/cores/avr" "$PKG_DIR/cores" -mv "$GITHUB_WORKSPACE/cores/usblib" "$PKG_DIR/cores" -mv "$GITHUB_WORKSPACE/cores/xmc_lib" "$PKG_DIR/cores" -find "$GITHUB_WORKSPACE/cores" -type f -name "*" -exec cp {} "$PKG_DIR/cores" \; -cp -Rf "$GITHUB_WORKSPACE/libraries" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/variants" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/LICENSE.md" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/README.md" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/boards.txt" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/keywords.txt" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/platform.txt" "$PKG_DIR/" -cp -Rf "$GITHUB_WORKSPACE/package.json" "$PKG_DIR/" - - -# Remove unnecessary files in the package folder -echo "Cleaning up folders ..." -find "$PKG_DIR" -name '*.git*' -type f -delete - - -# Compress package folder -echo "Creating ZIP ..." -pushd "$OUTPUT_DIR" >/dev/null -zip -qr "$PACKAGE_ZIP" "$PACKAGE_NAME" -if [ $? -ne 0 ]; then echo "ERROR: Failed to create $PACKAGE_ZIP ($?)"; exit 1; fi - -# Calculate SHA-256 -echo "Calculating SHA sum ..." -PACKAGE_PATH="$OUTPUT_DIR/$PACKAGE_ZIP" -PACKAGE_SHA=`shasum -a 256 "$PACKAGE_ZIP" | cut -f 1 -d ' '` -PACKAGE_SIZE=`get_file_size "$PACKAGE_ZIP"` -popd >/dev/null -rm -rf "$PKG_DIR" -echo "'$PACKAGE_ZIP' Created! Size: $PACKAGE_SIZE, SHA-256: $PACKAGE_SHA" -echo - -# Upload package to release page -echo "Uploading package to release page ..." -PACKAGE_URL=`git_safe_upload_asset "$PACKAGE_PATH"` -echo "Package Uploaded" -echo "Download URL: $PACKAGE_URL" -echo - -## -## PACKAGE JSON -## - -# Construct JQ argument with package data -jq_arg=".packages[0].platforms[0].version = \"$RELEASE_TAG\" | \ - .packages[0].platforms[0].url = \"$PACKAGE_URL\" |\ - .packages[0].platforms[0].archiveFileName = \"$PACKAGE_ZIP\" |\ - .packages[0].platforms[0].size = \"$PACKAGE_SIZE\" |\ - .packages[0].platforms[0].checksum = \"SHA-256:$PACKAGE_SHA\"" - -# Generate package JSONs -echo "Genarating $PACKAGE_JSON_REL ..." -cat "$PACKAGE_JSON_TEMPLATE" | jq "$jq_arg" > "$OUTPUT_DIR/$PACKAGE_JSON_REL" - - -# Figure out the last release or pre-release -echo "Getting previous releases ..." -releasesJson=`curl -sH "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_REPOSITORY/releases" 2>/dev/null` -if [ $? -ne 0 ]; then echo "ERROR: Get Releases Failed! ($?)"; exit 1; fi - -set +e -prev_release=$(echo "$releasesJson" | jq -e -r '. | map(select(.draft == false and .prerelease == false)) | sort_by(.created_at | - fromdateiso8601) | .[0].tag_name') -prev_any_release=$(echo "$releasesJson" | jq -e -r '. | map(select(.draft == false)) | sort_by(.created_at | - fromdateiso8601) | .[0].tag_name') -shopt -s nocasematch -if [ "$prev_any_release" == "$RELEASE_TAG_WITH_PREFIX" ]; then - prev_release=$(echo "$releasesJson" | jq -e -r '. | map(select(.draft == false and .prerelease == false)) | sort_by(.created_at | - fromdateiso8601) | .[1].tag_name') - prev_any_release=$(echo "$releasesJson" | jq -e -r '. | map(select(.draft == false)) | sort_by(.created_at | - fromdateiso8601) | .[1].tag_name') -fi -COMMITS_SINCE_RELEASE="$prev_any_release" -shopt -u nocasematch -set -e - -# Merge package JSONs with previous releases - -if [ "$RELEASE_PRE" == "false" ]; then - COMMITS_SINCE_RELEASE="$prev_release" - if [ ! -z "$prev_release" ] && [ "$prev_release" != "null" ]; then - echo "Merging with JSON from $prev_release ..." - merge_package_json "$prev_release/$PACKAGE_JSON_REL" "$OUTPUT_DIR/$PACKAGE_JSON_REL" - fi -fi - -echo "Previous Release: $prev_release" -echo "Previous (any)release: $prev_any_release" -echo - -# Upload package JSONs -if [ "$RELEASE_PRE" == "false" ]; then - echo "Uploading $PACKAGE_JSON_REL ..." - echo "Download URL: "`git_safe_upload_asset "$OUTPUT_DIR/$PACKAGE_JSON_REL"` - echo -fi - -## -## RELEASE NOTES -## - -# Create release notes -echo "Preparing release notes ..." -releaseNotes="" - -# Process annotated tags -relNotesRaw=`git -C "$GITHUB_WORKSPACE" show -s --format=%b $RELEASE_TAG_WITH_PREFIX` -readarray -t msgArray <<<"$relNotesRaw" -arrLen=${#msgArray[@]} -if [ $arrLen > 3 ] && [ "${msgArray[0]:0:3}" == "tag" ]; then - ind=3 - while [ $ind -lt $arrLen ]; do - if [ $ind -eq 3 ]; then - releaseNotes="#### ${msgArray[ind]}" - releaseNotes+=$'\r\n' - else - oneLine="$(echo -e "${msgArray[ind]}" | sed -e 's/^[[:space:]]*//')" - if [ ${#oneLine} -gt 0 ]; then - if [ "${oneLine:0:2}" == "* " ]; then oneLine=$(echo ${oneLine/\*/-}); fi - if [ "${oneLine:0:2}" != "- " ]; then releaseNotes+="- "; fi - releaseNotes+="$oneLine" - releaseNotes+=$'\r\n' - fi - fi - let ind=$ind+1 - done -fi - -# Prepend the original release body -if [ "${RELEASE_BODY: -1}" == $'\r' ]; then - RELEASE_BODY="${RELEASE_BODY:0:-1}" -else - RELEASE_BODY="$RELEASE_BODY" -fi -RELEASE_BODY+=$'\r\n' -releaseNotes="$RELEASE_BODY$releaseNotes" - -# Update release page -echo "Updating release notes ..." -releaseNotes=$(printf '%s' "$releaseNotes" | python -c 'import json,sys; print(json.dumps(sys.stdin.read()))') -releaseNotes=${releaseNotes:1:-1} -curlData="{\"body\": \"$releaseNotes\"}" -releaseData=`curl --data "$curlData" "https://api.github.com/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID?access_token=$GITHUB_TOKEN" 2>/dev/null` -if [ $? -ne 0 ]; then echo "ERROR: Updating Release Failed: $?"; exit 1; fi -echo "Release notes successfully updated" -echo - -## -## DONE -## -echo "DONE!" From d1ca09393552b15e8cb72da1094312408b25d79f Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Thu, 17 Aug 2023 11:10:25 +0200 Subject: [PATCH 20/24] .github: Minor fixed in release workflow. --- .github/scripts/release.py | 11 ++++++----- .github/workflows/release.yml | 4 +++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/scripts/release.py b/.github/scripts/release.py index 6c4f5d87..bd0fda5f 100755 --- a/.github/scripts/release.py +++ b/.github/scripts/release.py @@ -11,7 +11,8 @@ def strip_prefix_from_version(version): return re.sub(r'[vV]', '', version) def mkdir_package_dir(version): - pkg_name = "XMC_IFX_" + version + semver = strip_prefix_from_version(version) + pkg_name = "XMC_IFX_" + semver pkg_build_path = os.path.join(pkg_assets_build_path, pkg_name) os.mkdir(pkg_build_path) @@ -59,10 +60,11 @@ def get_platform_data_struct_copy(pkg_index): return copy.deepcopy(pkg_index['packages'][0]['platforms'][0]) def set_new_platform_data_fields(platform_data, pkg_name, version): - platform_data['version'] = str(version) + semver = strip_prefix_from_version(version) + platform_data['version'] = str(semver) archive_file_name = str(pkg_name) + ".zip" platform_data['archiveFileName'] = archive_file_name - platform_data['url'] = "https://github.com/Infineon/XMC-for-Arduino/releases/download/v" + str(version) + "/" + str(archive_file_name) + platform_data['url'] = "https://github.com/Infineon/XMC-for-Arduino/releases/download/" + str(version) + "/" + str(archive_file_name) platform_data['checksum'] ="SHA-256:" + str(get_package_sha256(archive_file_name)) platform_data['size'] = str(get_package_size(os.path.join(pkg_assets_build_path, archive_file_name))) @@ -99,8 +101,7 @@ def parser_build_release_assets_func(args): global pkg_build_path xmc_ino_root_path = args.root_path pkg_build_path = args.build_path - version = strip_prefix_from_version(args.version) - build_release_assets(version) + build_release_assets(args.version) class ver_action(argparse.Action): def __init__(self, option_strings, dest, **kwargs): diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b288510f..31066b45 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,11 +17,13 @@ jobs: with: python-version: '3.x' - run: pip install requests + - name: Build release changelog id: build_changelog uses: mikepenz/release-changelog-builder-action@v3 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Build release assets run: | cd .github/scripts @@ -30,7 +32,7 @@ jobs: - name: Upload assets uses: softprops/action-gh-release@v1 with: - name: XMC for Arduino ${{ github.ref_name }} + name: XMC-for-Arduino ${{ github.ref_name }} files: | pkg_build/*.zip pkg_build/package_infineon_index.json From 018dde1daf0e15b6a0cedef1a9e8f5277952c08d Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Thu, 17 Aug 2023 11:42:38 +0200 Subject: [PATCH 21/24] .github: Minor fixed in release workflow. --- .github/scripts/release.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/scripts/release.py b/.github/scripts/release.py index bd0fda5f..ec50ee13 100755 --- a/.github/scripts/release.py +++ b/.github/scripts/release.py @@ -51,7 +51,11 @@ def get_package_size(pkg): return os.path.getsize(pkg) def get_package_sha256(pkg): - return hashlib.sha256(pkg.encode('UTF-8')).hexdigest() + with open(pkg,"rb") as f: + bytes = f.read() + hash = hashlib.sha256(bytes).hexdigest() + + return hash def get_latest_package_index_json(): return requests.get('https://github.com/Infineon/XMC-for-Arduino/releases/latest/download/package_infineon_index.json').json() @@ -65,7 +69,7 @@ def set_new_platform_data_fields(platform_data, pkg_name, version): archive_file_name = str(pkg_name) + ".zip" platform_data['archiveFileName'] = archive_file_name platform_data['url'] = "https://github.com/Infineon/XMC-for-Arduino/releases/download/" + str(version) + "/" + str(archive_file_name) - platform_data['checksum'] ="SHA-256:" + str(get_package_sha256(archive_file_name)) + platform_data['checksum'] ="SHA-256:" + str(get_package_sha256(os.path.join(pkg_assets_build_path, archive_file_name))) platform_data['size'] = str(get_package_size(os.path.join(pkg_assets_build_path, archive_file_name))) def add_new_platform_to_package_index(pkg_index, new_platform): From 0ad2636dabf9da6deac4aa02418f0e94b69f5a0d Mon Sep 17 00:00:00 2001 From: enriquezgarc Date: Mon, 21 Aug 2023 14:20:50 +0200 Subject: [PATCH 22/24] .github/scripts/release,py: Fix in version format help comment. --- .github/scripts/release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/release.py b/.github/scripts/release.py index ec50ee13..392a95da 100755 --- a/.github/scripts/release.py +++ b/.github/scripts/release.py @@ -123,7 +123,7 @@ def __call__(self, parser, namespace, values, option_string, **kwargs): # Release parser parser_release = subparser.add_parser('build-release', description='Build package release assets') - parser_release.add_argument('version', type=str, help='Package release version (semver x.y.z)') + parser_release.add_argument('version', type=str, help='Package release version (format: Vx.y.z)') parser_release.add_argument('-r','--root-path', type=str, default=xmc_ino_root_path, help='Path to the XMC-for-Arduino root path') parser_release.add_argument('-b','--build-path', type=str, default=pkg_assets_build_path, help='Path to build package') parser_release.set_defaults(func=parser_build_release_assets_func) From 848ec521119dc151b90e6a931bafdf51be9537cb Mon Sep 17 00:00:00 2001 From: Monideep Bora Date: Wed, 20 Sep 2023 10:21:14 +0200 Subject: [PATCH 23/24] bumped version in platform.txt --- platform.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform.txt b/platform.txt index e1faabb4..e3d44743 100644 --- a/platform.txt +++ b/platform.txt @@ -5,8 +5,8 @@ # The information about this Arduino compatible environment # --------- -name=XMC Family V2.x -version=2.2.0 +name=XMC Family V3.x +version=3.0.0 # Build related core definitions # --------- From d924689d36337734606f117c510960bcd55247d3 Mon Sep 17 00:00:00 2001 From: Monideep Bora Date: Wed, 20 Sep 2023 10:58:18 +0200 Subject: [PATCH 24/24] removed suffix V2.x in platform.txt as no longer needed --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index e3d44743..4529ced1 100644 --- a/platform.txt +++ b/platform.txt @@ -5,7 +5,7 @@ # The information about this Arduino compatible environment # --------- -name=XMC Family V3.x +name=XMC Family version=3.0.0 # Build related core definitions