|
16 | 16 | import sys |
17 | 17 | import tempfile |
18 | 18 | import traceback |
| 19 | +from urllib.parse import urlparse |
19 | 20 |
|
20 | 21 | import espytrace.apptrace as apptrace |
21 | 22 | import espytrace.sysview as sysview |
|
24 | 25 | def is_segger_multicore_format(file_path): |
25 | 26 | """Check if the file has offsets in header""" |
26 | 27 | try: |
27 | | - with open(file_path, 'rb') as f: |
28 | | - header = f.read(200) |
29 | | - header_str = header.decode('utf-8', errors='ignore') |
30 | | - |
31 | | - if ( |
32 | | - '; Version SEGGER SystemViewer' in header_str |
33 | | - and '; Author Espressif Inc' in header_str |
34 | | - and '; Offset Core0' in header_str |
35 | | - and '; Offset Core1' in header_str |
36 | | - ): |
37 | | - logging.info('Detected SEGGER multicore format in file:', file_path) |
38 | | - return True |
| 28 | + url = urlparse(file_path) |
| 29 | + if len(url.scheme) == 0 or url.scheme == 'file': |
| 30 | + with open(url.path, 'rb') as f: |
| 31 | + header = f.read(200) |
| 32 | + header_str = header.decode('utf-8', errors='ignore') |
| 33 | + if ( |
| 34 | + '; Version SEGGER SystemViewer' in header_str |
| 35 | + and '; Author Espressif Inc' in header_str |
| 36 | + and '; Offset Core0' in header_str |
| 37 | + and '; Offset Core1' in header_str |
| 38 | + ): |
| 39 | + return True |
39 | 40 | except Exception as e: |
40 | | - logging.error('Error checking file format:', e) |
| 41 | + logging.error('Error checking SEGGER multicore file format:', e) |
41 | 42 | return False |
42 | 43 |
|
43 | 44 |
|
44 | 45 | def split_segger_multicore_file(file_path): |
45 | 46 | """Split SEGGER multicore file into separate core files.""" |
46 | 47 | try: |
47 | | - with open(file_path, 'rb') as f: |
| 48 | + with open(urlparse(file_path).path, 'rb') as f: |
48 | 49 | # Read first few lines to get offsets for each core |
49 | 50 | header = f.read(200) |
50 | 51 | header_str = header.decode('utf-8', errors='ignore') |
@@ -165,15 +166,15 @@ def sig_int_handler(signum, frame): |
165 | 166 |
|
166 | 167 | logging.basicConfig(level=verbosity_levels[args.verbose], format='[%(levelname)s] %(message)s') |
167 | 168 |
|
168 | | - segger_files = [] |
| 169 | + temp_files = [] |
169 | 170 | # Only check for SEGGER format if there's exactly one trace source |
170 | 171 | if len(args.trace_sources) == 1: |
171 | 172 | trace_source = args.trace_sources[0] |
172 | 173 | if is_segger_multicore_format(trace_source): |
173 | 174 | core0_file, core1_file = split_segger_multicore_file(trace_source) |
174 | 175 | if core0_file and core1_file: |
175 | | - segger_files.extend([core0_file, core1_file]) |
176 | | - args.trace_sources = segger_files |
| 176 | + temp_files.extend([core0_file, core1_file]) |
| 177 | + args.trace_sources = temp_files |
177 | 178 | else: |
178 | 179 | sys.exit(2) |
179 | 180 |
|
@@ -257,8 +258,8 @@ def sig_int_handler(signum, frame): |
257 | 258 | proc.print_report() |
258 | 259 | proc.cleanup() |
259 | 260 |
|
260 | | - if segger_files: |
261 | | - for file in segger_files: |
| 261 | + if len(temp_files) > 0: |
| 262 | + for file in temp_files: |
262 | 263 | try: |
263 | 264 | os.remove(file) |
264 | 265 | except Exception as e: |
|
0 commit comments