firestarter 1.3.2__tar.gz → 1.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {firestarter-1.3.2 → firestarter-1.3.4}/PKG-INFO +1 -1
- firestarter-1.3.4/firestarter/__init__.py +1 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/eprom_operations.py +91 -66
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/firmware.py +3 -3
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/hardware.py +22 -9
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/main.py +6 -2
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/serial_comm.py +56 -38
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/PKG-INFO +1 -1
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter_test.sh +41 -43
- {firestarter-1.3.2 → firestarter-1.3.4}/write_test.sh +1 -1
- firestarter-1.3.2/firestarter/__init__.py +0 -1
- {firestarter-1.3.2 → firestarter-1.3.4}/.github/scripts/update_version.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/.github/workflows/publish.yml +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/.github/workflows/release.yml +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/.gitignore +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/.vscode/launch.json +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/LICENSE +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/MANIFEST.in +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/README.md +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/doc/package-details.md +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/doc/protocol-id.md +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/avr_tool.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/config.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/data/avrdude.conf +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/data/database.json +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/data/pin-maps.json +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/database.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/eprom_info.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/ic_layout.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter/utils.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/SOURCES.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/dependency_links.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/entry_points.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/requires.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/firestarter.egg-info/top_level.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/pyproject.toml +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/requirements.txt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/setup.cfg +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/test.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/things.md +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/tools/infoic.xml +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/tools/parse_db.py +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/tools/pin-layouts.odt +0 -0
- {firestarter-1.3.2 → firestarter-1.3.4}/tools/verified.txt +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.3.4"
|
|
@@ -11,13 +11,13 @@ import os
|
|
|
11
11
|
import time
|
|
12
12
|
|
|
13
13
|
try:
|
|
14
|
-
from .serial_comm import find_programmer, wait_for_response
|
|
15
|
-
from .database import get_eprom
|
|
16
|
-
from .utils import extract_hex_to_decimal,
|
|
14
|
+
from .serial_comm import find_programmer, wait_for_response, consume_response
|
|
15
|
+
from .database import get_eprom, search_chip_id
|
|
16
|
+
from .utils import extract_hex_to_decimal, print_progress_bar
|
|
17
17
|
except ImportError:
|
|
18
|
-
from serial_comm import find_programmer, wait_for_response
|
|
19
|
-
from database import get_eprom
|
|
20
|
-
from utils import extract_hex_to_decimal,
|
|
18
|
+
from serial_comm import find_programmer, wait_for_response, consume_response
|
|
19
|
+
from database import get_eprom, search_chip_id
|
|
20
|
+
from utils import extract_hex_to_decimal, print_progress_bar
|
|
21
21
|
|
|
22
22
|
# Constants
|
|
23
23
|
BUFFER_SIZE = 512
|
|
@@ -48,7 +48,7 @@ def read(eprom_name, output_file=None, force=False):
|
|
|
48
48
|
eprom["force"] = True
|
|
49
49
|
|
|
50
50
|
if not output_file:
|
|
51
|
-
output_file = f"{eprom_name}.bin"
|
|
51
|
+
output_file = f"{eprom_name.upper()}.bin"
|
|
52
52
|
print(f"Reading EPROM {eprom_name}, saving to {output_file}")
|
|
53
53
|
|
|
54
54
|
ser = find_programmer(eprom)
|
|
@@ -62,6 +62,8 @@ def read(eprom_name, output_file=None, force=False):
|
|
|
62
62
|
bytes_read = 0
|
|
63
63
|
mem_size = eprom["memory-size"]
|
|
64
64
|
total_iterations = mem_size / BUFFER_SIZE
|
|
65
|
+
print_progress_bar(0, total_iterations, prefix=f"Address: 0x0000 - ")
|
|
66
|
+
|
|
65
67
|
while True:
|
|
66
68
|
resp, info = wait_for_response(ser)
|
|
67
69
|
if resp == "DATA":
|
|
@@ -75,26 +77,29 @@ def read(eprom_name, output_file=None, force=False):
|
|
|
75
77
|
print_progress_bar(
|
|
76
78
|
bytes_read / BUFFER_SIZE,
|
|
77
79
|
total_iterations,
|
|
78
|
-
prefix=f"Address: 0x{from_address:
|
|
80
|
+
prefix=f"Address: 0x{from_address:04X} - 0x{to_address:04X}",
|
|
79
81
|
suffix=f"- {time.time() - start_time:.2f}s",
|
|
80
82
|
)
|
|
83
|
+
|
|
81
84
|
ser.write("OK".encode("ascii"))
|
|
82
85
|
ser.flush()
|
|
83
86
|
elif resp == "OK":
|
|
84
87
|
break
|
|
85
88
|
elif resp == "ERROR":
|
|
86
|
-
print(f"\nError: {info}")
|
|
87
|
-
return 1
|
|
88
|
-
else:
|
|
89
|
-
print(f"\nUnexpected response: {info}")
|
|
89
|
+
# print(f"\nError: {info}")
|
|
90
90
|
return 1
|
|
91
|
+
# else:
|
|
92
|
+
# print(f"\nUnexpected response: {info}")
|
|
93
|
+
# return 1
|
|
91
94
|
|
|
92
95
|
print(f"\nRead complete in: {time.time() - start_time:.2f} seconds")
|
|
93
96
|
print(f"Data saved to {output_file}")
|
|
94
97
|
except Exception as e:
|
|
95
98
|
print(f"Error while reading: {e}")
|
|
96
99
|
finally:
|
|
100
|
+
consume_response(ser)
|
|
97
101
|
ser.close()
|
|
102
|
+
return 0
|
|
98
103
|
|
|
99
104
|
|
|
100
105
|
def write(eprom_name, input_file, address=None, ignore_blank_check=False, force=False):
|
|
@@ -142,50 +147,49 @@ def write(eprom_name, input_file, address=None, ignore_blank_check=False, force=
|
|
|
142
147
|
bytes_written = 0
|
|
143
148
|
|
|
144
149
|
print(f"Writing {input_file} to {eprom_name}")
|
|
150
|
+
print_progress_bar(0, total_iterations, prefix=f"Address: 0x0000 - ")
|
|
145
151
|
|
|
146
152
|
while True:
|
|
147
153
|
data = file.read(BUFFER_SIZE)
|
|
148
154
|
if not data:
|
|
155
|
+
print("\nEnd of file reached")
|
|
149
156
|
ser.write(int(0).to_bytes(2, byteorder="big"))
|
|
150
157
|
ser.flush()
|
|
151
158
|
resp, info = wait_for_response(ser)
|
|
152
|
-
|
|
153
|
-
|
|
159
|
+
while resp != "OK":
|
|
160
|
+
if resp == "ERROR":
|
|
161
|
+
return 1
|
|
162
|
+
resp, info = wait_for_response(ser)
|
|
154
163
|
break
|
|
155
164
|
|
|
156
165
|
ser.write(len(data).to_bytes(2, byteorder="big"))
|
|
157
166
|
ser.flush()
|
|
158
167
|
resp, info = wait_for_response(ser)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
168
|
+
while resp != "OK":
|
|
169
|
+
if resp == "ERROR":
|
|
170
|
+
return 1
|
|
171
|
+
resp, info = wait_for_response(ser)
|
|
172
|
+
|
|
162
173
|
nr_bytes = ser.write(data)
|
|
163
174
|
bytes_written += nr_bytes
|
|
164
175
|
ser.flush()
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if resp == "
|
|
169
|
-
# percent = int(bytes_written / file_size * 100)
|
|
170
|
-
# print_progress(
|
|
171
|
-
# percent,
|
|
172
|
-
# bytes_written - nr_bytes + write_address,
|
|
173
|
-
# bytes_written + write_address,
|
|
174
|
-
# )
|
|
175
|
-
from_address = bytes_written - nr_bytes + write_address
|
|
176
|
-
to_address = bytes_written + write_address
|
|
177
|
-
print_progress_bar(
|
|
178
|
-
bytes_written / BUFFER_SIZE,
|
|
179
|
-
total_iterations,
|
|
180
|
-
prefix=f"Address: 0x{from_address:X} - 0x{to_address:X}",
|
|
181
|
-
suffix=f"- {time.time() - start_time:.2f}s",
|
|
182
|
-
)
|
|
183
|
-
break
|
|
184
|
-
elif resp == "ERROR":
|
|
185
|
-
print(f"\nError: {info}")
|
|
176
|
+
# print(f"Bytes written: {bytes_written}")
|
|
177
|
+
resp, info = wait_for_response(ser)
|
|
178
|
+
while resp != "OK":
|
|
179
|
+
if resp == "ERROR":
|
|
186
180
|
return 1
|
|
187
|
-
|
|
181
|
+
elif resp == "WARN":
|
|
188
182
|
print(f"Warning: {info}")
|
|
183
|
+
resp, info = wait_for_response(ser)
|
|
184
|
+
|
|
185
|
+
from_address = bytes_written - nr_bytes + write_address
|
|
186
|
+
to_address = bytes_written + write_address
|
|
187
|
+
print_progress_bar(
|
|
188
|
+
bytes_written / BUFFER_SIZE,
|
|
189
|
+
total_iterations,
|
|
190
|
+
prefix=f"Address: 0x{from_address:04X} - 0x{to_address:04X}",
|
|
191
|
+
suffix=f"- {time.time() - start_time:.2f}s",
|
|
192
|
+
)
|
|
189
193
|
if bytes_written == mem_size:
|
|
190
194
|
break
|
|
191
195
|
|
|
@@ -194,6 +198,7 @@ def write(eprom_name, input_file, address=None, ignore_blank_check=False, force=
|
|
|
194
198
|
print(f"Error while writing: {e}")
|
|
195
199
|
return 1
|
|
196
200
|
finally:
|
|
201
|
+
consume_response(ser)
|
|
197
202
|
ser.close()
|
|
198
203
|
return 0
|
|
199
204
|
|
|
@@ -211,15 +216,21 @@ def erase(eprom_name):
|
|
|
211
216
|
return 1
|
|
212
217
|
|
|
213
218
|
eprom["state"] = STATE_ERASE
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
219
|
+
try:
|
|
220
|
+
ser = find_programmer(eprom)
|
|
221
|
+
if not ser:
|
|
222
|
+
return 1
|
|
223
|
+
|
|
224
|
+
resp, info = wait_for_response(ser)
|
|
225
|
+
if resp == "OK":
|
|
226
|
+
print(f"EPROM {eprom_name} erased successfully.")
|
|
227
|
+
return 0
|
|
228
|
+
elif resp == "ERROR":
|
|
229
|
+
print(f"Error erasing EPROM {eprom_name}")
|
|
230
|
+
return 1
|
|
231
|
+
finally:
|
|
232
|
+
consume_response(ser)
|
|
233
|
+
ser.close()
|
|
223
234
|
|
|
224
235
|
|
|
225
236
|
def check_chip_id(eprom_name):
|
|
@@ -238,16 +249,26 @@ def check_chip_id(eprom_name):
|
|
|
238
249
|
ser = find_programmer(eprom)
|
|
239
250
|
if not ser:
|
|
240
251
|
return 1
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
print(f"Chip ID check failed for {eprom_name}: {info}")
|
|
252
|
+
try:
|
|
253
|
+
resp, info = wait_for_response(ser)
|
|
254
|
+
if resp == "OK":
|
|
255
|
+
print(f"Chip ID check passed for {eprom_name}: {info}")
|
|
256
|
+
return 0
|
|
247
257
|
chip_id = extract_hex_to_decimal(info)
|
|
248
|
-
|
|
249
|
-
f"
|
|
250
|
-
|
|
258
|
+
if not chip_id:
|
|
259
|
+
print(f"Failed to extract chip ID.")
|
|
260
|
+
else:
|
|
261
|
+
eproms = search_chip_id(chip_id)
|
|
262
|
+
if not eproms:
|
|
263
|
+
print(f"Chip ID 0x{chip_id:x} not found in the database.")
|
|
264
|
+
else:
|
|
265
|
+
print(f"Chip ID 0x{chip_id:x} found in the database:")
|
|
266
|
+
for eprom in eproms:
|
|
267
|
+
print(eprom)
|
|
268
|
+
return 1
|
|
269
|
+
finally:
|
|
270
|
+
consume_response(ser)
|
|
271
|
+
ser.close()
|
|
251
272
|
|
|
252
273
|
|
|
253
274
|
def blank_check(eprom_name):
|
|
@@ -263,12 +284,16 @@ def blank_check(eprom_name):
|
|
|
263
284
|
return 1
|
|
264
285
|
|
|
265
286
|
eprom["state"] = STATE_CHECK_BLANK
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
287
|
+
try:
|
|
288
|
+
ser = find_programmer(eprom)
|
|
289
|
+
if not ser:
|
|
290
|
+
return 1
|
|
291
|
+
|
|
292
|
+
resp, info = wait_for_response(ser)
|
|
293
|
+
if resp == "OK":
|
|
294
|
+
print(f"EPROM {eprom_name} is blank.")
|
|
295
|
+
elif resp == "ERROR":
|
|
296
|
+
print(f"Blank check failed for {eprom_name}")
|
|
297
|
+
finally:
|
|
298
|
+
consume_response(ser)
|
|
299
|
+
ser.close()
|
|
@@ -11,12 +11,12 @@ import os
|
|
|
11
11
|
import requests
|
|
12
12
|
|
|
13
13
|
try:
|
|
14
|
-
from .serial_comm import find_programmer, wait_for_response, find_comports
|
|
14
|
+
from .serial_comm import find_programmer, wait_for_response, find_comports, consume_response
|
|
15
15
|
from .config import get_config_value, set_config_value
|
|
16
16
|
from .avr_tool import Avrdude
|
|
17
17
|
from .utils import verbose
|
|
18
18
|
except ImportError:
|
|
19
|
-
from serial_comm import find_programmer, wait_for_response, find_comports
|
|
19
|
+
from serial_comm import find_programmer, wait_for_response, find_comports, consume_response
|
|
20
20
|
from config import get_config_value, set_config_value
|
|
21
21
|
from avr_tool import Avrdude
|
|
22
22
|
from utils import verbose
|
|
@@ -78,7 +78,6 @@ def firmware_check(port=None):
|
|
|
78
78
|
return False, None, None
|
|
79
79
|
|
|
80
80
|
try:
|
|
81
|
-
ser.write("OK".encode("ascii"))
|
|
82
81
|
resp, version = wait_for_response(ser)
|
|
83
82
|
|
|
84
83
|
if not resp == "OK":
|
|
@@ -103,6 +102,7 @@ def firmware_check(port=None):
|
|
|
103
102
|
)
|
|
104
103
|
return False, ser.portstr, url
|
|
105
104
|
finally:
|
|
105
|
+
consume_response(ser)
|
|
106
106
|
ser.close()
|
|
107
107
|
|
|
108
108
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import time
|
|
2
|
+
|
|
2
3
|
try:
|
|
3
|
-
from .serial_comm import find_programmer, wait_for_response
|
|
4
|
+
from .serial_comm import find_programmer, wait_for_response, consume_response
|
|
4
5
|
except ImportError:
|
|
5
|
-
from serial_comm import find_programmer, wait_for_response
|
|
6
|
+
from serial_comm import find_programmer, wait_for_response, consume_response
|
|
6
7
|
|
|
7
8
|
STATE_READ_VPP = 11
|
|
8
9
|
STATE_READ_VPE = 12
|
|
@@ -32,6 +33,7 @@ def hardware():
|
|
|
32
33
|
print(f"Failed to read hardware revision. {resp}: {version}")
|
|
33
34
|
return 1
|
|
34
35
|
finally:
|
|
36
|
+
consume_response(ser)
|
|
35
37
|
ser.close()
|
|
36
38
|
return 0
|
|
37
39
|
|
|
@@ -53,15 +55,20 @@ def config(rev=None, r1=None, r2=None):
|
|
|
53
55
|
ser = find_programmer(data)
|
|
54
56
|
if not ser:
|
|
55
57
|
return 1
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
try:
|
|
59
|
+
# ser.write("OK".encode("ascii"))
|
|
60
|
+
r, version = wait_for_response(ser)
|
|
61
|
+
if r == "OK":
|
|
62
|
+
print(f"Config: {version}")
|
|
63
|
+
else:
|
|
64
|
+
# print(r)
|
|
65
|
+
return 1
|
|
66
|
+
finally:
|
|
67
|
+
consume_response(ser)
|
|
68
|
+
ser.close()
|
|
63
69
|
return 0
|
|
64
70
|
|
|
71
|
+
|
|
65
72
|
def read_vpp(timeout=None):
|
|
66
73
|
"""
|
|
67
74
|
Reads the VPP voltage from the programmer.
|
|
@@ -94,6 +101,7 @@ def read_voltage(state, timeout=None):
|
|
|
94
101
|
print(f"Error reading {type} voltage: {info}")
|
|
95
102
|
return 1
|
|
96
103
|
ser.write("OK".encode("ascii"))
|
|
104
|
+
ser.flush()
|
|
97
105
|
|
|
98
106
|
if timeout:
|
|
99
107
|
start = time.time()
|
|
@@ -104,5 +112,10 @@ def read_voltage(state, timeout=None):
|
|
|
104
112
|
print()
|
|
105
113
|
return 0
|
|
106
114
|
ser.write("OK".encode("ascii"))
|
|
115
|
+
ser.flush()
|
|
116
|
+
except Exception as e:
|
|
117
|
+
print(f"Error while reading {type} voltage: {e}")
|
|
107
118
|
finally:
|
|
119
|
+
consume_response(ser)
|
|
108
120
|
ser.close()
|
|
121
|
+
return 1
|
|
@@ -35,6 +35,8 @@ except ImportError:
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def main():
|
|
38
|
+
signal.signal(signal.SIGINT, exit_gracefully)
|
|
39
|
+
|
|
38
40
|
parser = argparse.ArgumentParser(
|
|
39
41
|
description="EPROM programmer for Arduino UNO and Relatively-Universal-ROM-Programmer shield."
|
|
40
42
|
)
|
|
@@ -174,6 +176,7 @@ def main():
|
|
|
174
176
|
init_db()
|
|
175
177
|
open_config()
|
|
176
178
|
set_verbose(args.verbose)
|
|
179
|
+
|
|
177
180
|
# Command dispatch
|
|
178
181
|
if args.command == "list":
|
|
179
182
|
return list_eproms(args.verified)
|
|
@@ -211,9 +214,10 @@ def main():
|
|
|
211
214
|
|
|
212
215
|
|
|
213
216
|
def exit_gracefully(signum, frame):
|
|
217
|
+
print("\n")
|
|
218
|
+
print("Prosess interrupted.")
|
|
214
219
|
sys.exit(1)
|
|
215
220
|
|
|
216
221
|
|
|
217
222
|
if __name__ == "__main__":
|
|
218
|
-
|
|
219
|
-
sys.exit(main())
|
|
223
|
+
sys.exit(main())
|
|
@@ -54,10 +54,8 @@ def check_port(port, data, baud_rate=BAUD_RATE):
|
|
|
54
54
|
res, msg = wait_for_response(ser)
|
|
55
55
|
while res != "OK":
|
|
56
56
|
if res == "ERROR":
|
|
57
|
-
raise Exception(msg)
|
|
58
|
-
if res == "TIMEOUT_ERROR":
|
|
59
57
|
return None
|
|
60
|
-
|
|
58
|
+
res, msg = wait_for_response(ser)
|
|
61
59
|
|
|
62
60
|
if verbose():
|
|
63
61
|
print(f"Programmer: {msg}")
|
|
@@ -143,6 +141,54 @@ def find_programmer(data, port=None):
|
|
|
143
141
|
return None
|
|
144
142
|
|
|
145
143
|
|
|
144
|
+
def read_response(ser):
|
|
145
|
+
while ser.in_waiting > 0:
|
|
146
|
+
byte_array = ser.readline()
|
|
147
|
+
res = read_filtered_bytes(byte_array)
|
|
148
|
+
type = None
|
|
149
|
+
msg = None
|
|
150
|
+
try:
|
|
151
|
+
if res:
|
|
152
|
+
if "OK:" in res:
|
|
153
|
+
msg = res.split("OK:")[-1].strip()
|
|
154
|
+
type = "OK"
|
|
155
|
+
return
|
|
156
|
+
elif "INFO:" in res:
|
|
157
|
+
msg = res.split("INFO:")[-1].strip()
|
|
158
|
+
type = "INFO"
|
|
159
|
+
return
|
|
160
|
+
elif "DEBUG:" in res:
|
|
161
|
+
msg = res.split("DEBUG:")[-1].strip()
|
|
162
|
+
type = "DEBUG"
|
|
163
|
+
return
|
|
164
|
+
elif "ERROR:" in res:
|
|
165
|
+
msg = res.split("ERROR:")[-1].strip()
|
|
166
|
+
type = "ERROR"
|
|
167
|
+
return
|
|
168
|
+
elif "WARN:" in res:
|
|
169
|
+
msg = res.split("WARN:")[-1].strip()
|
|
170
|
+
type = "WARN"
|
|
171
|
+
return
|
|
172
|
+
elif "DATA:" in res:
|
|
173
|
+
msg = res.split("DATA:")[-1].strip()
|
|
174
|
+
type = "DATA"
|
|
175
|
+
return
|
|
176
|
+
else:
|
|
177
|
+
return
|
|
178
|
+
finally:
|
|
179
|
+
write_feedback(type, msg)
|
|
180
|
+
# if type == "ERROR":
|
|
181
|
+
# raise Exception(msg)
|
|
182
|
+
return type, msg
|
|
183
|
+
return None, None
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
def consume_response(ser):
|
|
187
|
+
time.sleep(0.1)
|
|
188
|
+
while read_response(ser)[0] != None:
|
|
189
|
+
time.sleep(0.3)
|
|
190
|
+
|
|
191
|
+
|
|
146
192
|
def wait_for_response(ser):
|
|
147
193
|
"""
|
|
148
194
|
Waits for a response from the serial connection.
|
|
@@ -155,41 +201,13 @@ def wait_for_response(ser):
|
|
|
155
201
|
"""
|
|
156
202
|
timeout = time.time() + 2 # Set timeout period
|
|
157
203
|
while time.time() < timeout:
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
type = None
|
|
163
|
-
try:
|
|
164
|
-
if res:
|
|
165
|
-
if "OK:" in res:
|
|
166
|
-
msg = res.split("OK:")[-1].strip()
|
|
167
|
-
type = "OK"
|
|
168
|
-
return
|
|
169
|
-
elif "INFO:" in res:
|
|
170
|
-
msg = res.split("INFO:")[-1].strip()
|
|
171
|
-
write_feedback("INFO", msg)
|
|
172
|
-
# return "INFO", msg
|
|
173
|
-
elif "ERROR:" in res:
|
|
174
|
-
msg = res.split("ERROR:")[-1].strip()
|
|
175
|
-
type = "ERROR"
|
|
176
|
-
return
|
|
177
|
-
elif "WARN:" in res:
|
|
178
|
-
msg = res.split("WARN:")[-1].strip()
|
|
179
|
-
type = "WARN"
|
|
180
|
-
return
|
|
181
|
-
elif "DATA:" in res:
|
|
182
|
-
msg = res.split("DATA:")[-1].strip()
|
|
183
|
-
type = "DATA"
|
|
184
|
-
return
|
|
185
|
-
timeout = time.time() + 2 # Reset timeout
|
|
186
|
-
finally:
|
|
187
|
-
write_feedback(type, msg)
|
|
188
|
-
if type:
|
|
189
|
-
return type, msg
|
|
204
|
+
type, msg = read_response(ser)
|
|
205
|
+
if type and type != "INFO" and type != "DEBUG":
|
|
206
|
+
return type, msg
|
|
207
|
+
# time.sleep(0.1)
|
|
190
208
|
msg = f"Timeout, no response on {ser.portstr}"
|
|
191
|
-
write_feedback("
|
|
192
|
-
|
|
209
|
+
write_feedback("Error", msg)
|
|
210
|
+
raise Exception(msg)
|
|
193
211
|
|
|
194
212
|
|
|
195
213
|
def write_feedback(type, msg):
|
|
@@ -199,7 +217,7 @@ def write_feedback(type, msg):
|
|
|
199
217
|
Args:
|
|
200
218
|
msg (str): The feedback message.
|
|
201
219
|
"""
|
|
202
|
-
if msg and (verbose() or type == "ERROR" or type == "WARN"):
|
|
220
|
+
if msg and (verbose() or (type.upper() == "ERROR" or type == "WARN")):
|
|
203
221
|
print(f"{type}: {msg}")
|
|
204
222
|
|
|
205
223
|
|
|
@@ -46,36 +46,15 @@ dd if=/dev/urandom of="$TEMP_DIR/high_data.bin" bs=1 count=$HALF_SIZE status=non
|
|
|
46
46
|
# Concatenate the two files into one file
|
|
47
47
|
cat "$TEMP_DIR/low_data.bin" "$TEMP_DIR/high_data.bin" > "$TEMP_DIR/full_data.bin"
|
|
48
48
|
|
|
49
|
-
# ------------------------------
|
|
50
|
-
|
|
51
|
-
echo "Listing all EPROMs"
|
|
52
|
-
echo "---------------------------------"
|
|
53
|
-
firestarter list
|
|
54
|
-
if test $? -gt 0
|
|
55
|
-
then
|
|
56
|
-
echo "Search failed"
|
|
57
|
-
exit 1
|
|
58
|
-
fi
|
|
59
|
-
echo
|
|
60
|
-
sleep 0.5
|
|
61
|
-
echo "---------------------------------"
|
|
62
|
-
echo "Searching for $EPROM_NAME"
|
|
63
|
-
echo "---------------------------------"
|
|
64
|
-
firestarter search $EPROM_NAME
|
|
65
|
-
if test $? -gt 0
|
|
66
|
-
then
|
|
67
|
-
echo "Search failed"
|
|
68
|
-
exit 1
|
|
69
|
-
fi
|
|
70
|
-
echo
|
|
71
|
-
sleep 0.5
|
|
49
|
+
# ------------------------------ FIRMWARE TESTS ------------------------------
|
|
50
|
+
|
|
72
51
|
echo "---------------------------------"
|
|
73
|
-
echo "
|
|
52
|
+
echo "Firmware Version"
|
|
74
53
|
echo "---------------------------------"
|
|
75
|
-
firestarter
|
|
54
|
+
firestarter fw
|
|
76
55
|
if test $? -gt 0
|
|
77
56
|
then
|
|
78
|
-
echo "
|
|
57
|
+
echo "Firmware version failed"
|
|
79
58
|
exit 1
|
|
80
59
|
fi
|
|
81
60
|
echo
|
|
@@ -104,7 +83,7 @@ then
|
|
|
104
83
|
exit 1
|
|
105
84
|
fi
|
|
106
85
|
echo
|
|
107
|
-
sleep
|
|
86
|
+
sleep 1
|
|
108
87
|
echo "---------------------------------"
|
|
109
88
|
echo "VPP"
|
|
110
89
|
echo "---------------------------------"
|
|
@@ -115,7 +94,7 @@ then
|
|
|
115
94
|
exit 1
|
|
116
95
|
fi
|
|
117
96
|
echo
|
|
118
|
-
sleep
|
|
97
|
+
sleep 1
|
|
119
98
|
echo "---------------------------------"
|
|
120
99
|
echo "VPE"
|
|
121
100
|
echo "---------------------------------"
|
|
@@ -126,21 +105,7 @@ then
|
|
|
126
105
|
exit 1
|
|
127
106
|
fi
|
|
128
107
|
echo
|
|
129
|
-
sleep
|
|
130
|
-
|
|
131
|
-
# ------------------------------ FIRMWARE TESTS ------------------------------
|
|
132
|
-
|
|
133
|
-
echo "---------------------------------"
|
|
134
|
-
echo "Firmware Version"
|
|
135
|
-
echo "---------------------------------"
|
|
136
|
-
firestarter fw
|
|
137
|
-
if test $? -gt 0
|
|
138
|
-
then
|
|
139
|
-
echo "Firmware version failed"
|
|
140
|
-
exit 1
|
|
141
|
-
fi
|
|
142
|
-
echo
|
|
143
|
-
sleep 0.5
|
|
108
|
+
sleep 1
|
|
144
109
|
|
|
145
110
|
# ------------------------------ EPROM TESTS ------------------------------
|
|
146
111
|
|
|
@@ -206,4 +171,37 @@ then
|
|
|
206
171
|
exit 1
|
|
207
172
|
fi
|
|
208
173
|
echo
|
|
174
|
+
# ------------------------------ EPROM INFO TESTS -------------------------
|
|
175
|
+
echo "---------------------------------"
|
|
176
|
+
echo "Listing all EPROMs"
|
|
177
|
+
echo "---------------------------------"
|
|
178
|
+
firestarter list
|
|
179
|
+
if test $? -gt 0
|
|
180
|
+
then
|
|
181
|
+
echo "Search failed"
|
|
182
|
+
exit 1
|
|
183
|
+
fi
|
|
184
|
+
echo
|
|
185
|
+
sleep 0.5
|
|
186
|
+
echo "---------------------------------"
|
|
187
|
+
echo "Searching for $EPROM_NAME"
|
|
188
|
+
echo "---------------------------------"
|
|
189
|
+
firestarter search $EPROM_NAME
|
|
190
|
+
if test $? -gt 0
|
|
191
|
+
then
|
|
192
|
+
echo "Search failed"
|
|
193
|
+
exit 1
|
|
194
|
+
fi
|
|
195
|
+
echo
|
|
196
|
+
sleep 0.5
|
|
197
|
+
echo "---------------------------------"
|
|
198
|
+
echo "Info for $EPROM_NAME"
|
|
199
|
+
echo "---------------------------------"
|
|
200
|
+
firestarter info $EPROM_NAME
|
|
201
|
+
if test $? -gt 0
|
|
202
|
+
then
|
|
203
|
+
echo "Info failed"
|
|
204
|
+
exit 1
|
|
205
|
+
fi
|
|
206
|
+
echo
|
|
209
207
|
echo "All tests passed"
|
|
@@ -15,7 +15,7 @@ fi
|
|
|
15
15
|
rm -f "$TEMP_DIR"/*
|
|
16
16
|
|
|
17
17
|
# Trap to clean up the temporary files on exit or interrupt
|
|
18
|
-
trap "rm -rf $TEMP_DIR; echo 'Cleaned up temp files'; exit" EXIT
|
|
18
|
+
# trap "rm -rf $TEMP_DIR; echo 'Cleaned up temp files'; exit" EXIT
|
|
19
19
|
|
|
20
20
|
# Convert TARGET_NAME to uppercase
|
|
21
21
|
EPROM_NAME=$(echo "$EPROM_NAME" | tr '[:lower:]' '[:upper:]')
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.3.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|