diff options
| author | root <root@krebs> | 2011-08-20 23:54:39 +0200 | 
|---|---|---|
| committer | root <root@krebs> | 2011-08-20 23:56:12 +0200 | 
| commit | 45f8f8d95ee958a73ad5adf4c42bfa08ba5c4e87 (patch) | |
| tree | c59ee6a30d94a0c6dcae5cb40a63416c6748df4d /oncology/dpfhack_display | |
| parent | 6b2cd5bb85d257f432923e22178c0559fe9656aa (diff) | |
oncology: update Makefile, write config
Diffstat (limited to 'oncology/dpfhack_display')
| -rw-r--r-- | oncology/dpfhack_display/hackit.py | 150 | 
1 files changed, 0 insertions, 150 deletions
| diff --git a/oncology/dpfhack_display/hackit.py b/oncology/dpfhack_display/hackit.py deleted file mode 100644 index 1ad64f1b..00000000 --- a/oncology/dpfhack_display/hackit.py +++ /dev/null @@ -1,150 +0,0 @@ -import struct -import sys -sys.path.append("./Debug") -import dpf -import time -import binascii - -# DPF profiles -import profiles - -# If you are an expert, set this to 0 to avoid the warnings -paranoia_mode = 1 - -JUMPTABLE_OFFSET = 0x80 -HEXDIR = "hexfiles/" - -instructions = [ -	"""Press and hold MENU while USB is plugged in. -If successful, you will get the 'USB connect' message and the device -will appear as non-USB storage device""" -] - -ins_common = """To put the device back into (almost) original state working -as USB storage, press the RESET button.""" - -############################################################################ - -bswap = lambda x: ( (x >> 8) & 0xff ) | ((x << 8) & 0xff00) - -def dump_flash(d, fname, offset, size): -	data = d.readFlash(offset, size) -	f = open(fname, "wb") -	f.write(data) -	f.close() - -def find_dpf(version): -	for i in profiles.KNOWN_DPFS: -		v = i[0] -		if v[0] == str(version[0]) and v[1] == str(version[1]) and v[2] == str(version[2]): -			print "Found matching version info" -			return i -	return None - -def get_module(buf, n): -	n *= 8 -	start, end, flashaddr = struct.unpack("<HHI", buf[n:n+8]) - -	start = bswap(start) -	end = bswap(end) - -	return start, end, flashaddr - -def patch_module(d, record, buf): -	n = record[0] -	if n == profiles.NEW: # We don't patch an existing module, find infos in magic field: -		start, flashaddr = record[1] -		d.patchSector(start, flashaddr, HEXDIR + record[2]) - -	elif n == profiles.COPY: # We make a copy of a full sector -		src, dest = record[1] -		print "Copying sector from 0x%06x to 0x%06x..." %(src, dest) -		data = d.readFlash(src, 0x10000) -		d.eraseFlash(dest) -		d.writeFlash(dest, data) -	else: -		print "Analyzing module %d..." % n -		start, end, flashaddr = get_module(buf, n) -		l = end - start -		start += 0x800 -		checksum = record[1] -		data = d.readFlash(flashaddr, l) -		c = binascii.crc32(data) & 0xffffffff -		if c == record[2]: -			print "Module already patched" -			return True -		elif c != checksum: -			print "CRC32 does not match: 0x%08lx" % c -			return False -		else: -			print "patching..." - -		d.patchSector(start, flashaddr, HEXDIR + record[3]) - -	return True - -def recognize(d): -	print "Reading flash..." -	buf = d.readFlash(0x0, 0x280) - -	print "done" -	b = buf[:7] -	xmem, code, dummy, offset = struct.unpack(">HHBH", b) -	version = (buf[0x50:0x58], buf[0x60: 0x70], buf[0x80:0x88]) - -	dpf = find_dpf(version) -	if not dpf: -		print "No DPF found. Create a record or look for one" -		print version -	else: -		print "Identifier:", dpf[1] -		di = dpf[3] -		di['offset'] = offset - -	return dpf - -def patch(d, dpf): -	if (paranoia_mode): -		print """Now patching. There is no 100% guarantee that your device will -	work after doing this. You must never unplug the device from USB while -	it is being updated. -	Are you sure you take all risks and that you want to continue?""" -		a = raw_input("Type 'yes' to continue > ") -		if a != "yes": -			print "Aborting." -			return False - -	p = dpf[4] - -	buf = d.readFlash(JUMPTABLE_OFFSET, dpf[3]['offset']) -	for i in p[2]: -		if not patch_module(d, i, buf): -			return False -	 -	return True -# -# -# MAIN - -if len(sys.argv) != 2: -	print "Usage: %s [<generic scsi device> | usb0]" % sys.argv[0] -	print "You may have to run this as root when accessing generic scsi devices" -	sys.exit(-1) - -d = dpf.open(sys.argv[1]) - -dpf = recognize(d) -if dpf: -	r = dpf[4] -	ret = patch(d, dpf) -	if ret: -		print -		print "Now disconnect the DPF from USB." -		print "To activate the 'developer mode':" -		print -		print instructions[r[0]] -		print -		print ins_common -	else: -		print "DPF might not be completely patched." -d.close() | 
