33
33
34
34
35
35
def pretty_hex (data ):
36
- output = ""
36
+ """
37
+ >>> print(pretty_hex("abc123"))
38
+ 61 62 63 31 32 33
39
+ >>> print(pretty_hex(b"abc123"))
40
+ 61 62 63 31 32 33
41
+ >>> print(pretty_hex(u"abc123"))
42
+ 61 62 63 31 32 33
43
+ >>> print(pretty_hex("\\ x00a\\ x02"*12))
44
+ 00 61 02 00 61 02 00 61 02 00 61 02 00 61 02 00
45
+ 61 02 00 61 02 00 61 02 00 61 02 00 61 02 00 61
46
+ 02 00 61 02
47
+ """
48
+ output = []
37
49
for i in range (0 , len (data ), 16 ):
38
- output += " " .join ([ "%02x" % ord (x ) for x in data [i :i + 16 ]]) + " \n "
39
- return output
50
+ output . append ( " " .join ("%02x" % to_int (x ) for x in data [i :i + 16 ]))
51
+ return " \n " . join ( output )
40
52
41
53
42
54
def to_int (value ):
43
55
"""
44
56
>>> to_int('A')
45
57
65
46
58
>>> to_int(0xff)
47
- 256
59
+ 255
48
60
>>> list(to_int(i) for i in ['T', 'i', 'n', 'y', 0xff, 0, 0])
49
61
[84, 105, 110, 121, 255, 0, 0]
50
62
"""
@@ -71,7 +83,8 @@ def get_ports(device_id):
71
83
try :
72
84
ports += [
73
85
UsbPort (usb , d )
74
- for d in usb .core .find (idVendor = vid , idProduct = pid , find_all = True )
86
+ for d in usb .core .find (
87
+ idVendor = vid , idProduct = pid , find_all = True )
75
88
if not d .is_kernel_driver_active (1 )
76
89
]
77
90
except usb .core .USBError as e :
@@ -90,6 +103,7 @@ def get_ports(device_id):
90
103
class PortError (Exception ):
91
104
pass
92
105
106
+
93
107
class SerialPort (object ):
94
108
def __init__ (self , port_name ):
95
109
self .port_name = port_name
@@ -129,6 +143,7 @@ def read(self, length):
129
143
except serial .SerialException as e :
130
144
raise PortError ("Failed to read from serial port:\n %s" % str (e ))
131
145
146
+
132
147
class UsbPort (object ):
133
148
def __init__ (self , usb , device ):
134
149
self .usb = usb
@@ -166,6 +181,7 @@ def read(self, length):
166
181
except self .usb .core .USBError as e :
167
182
raise PortError ("Failed to read from USB:\n %s" % str (e ))
168
183
184
+
169
185
def _mirror_byte (b ):
170
186
return bit_reverse_table [to_int (b )]
171
187
@@ -185,7 +201,11 @@ def __init__(self, prog):
185
201
186
202
def _parse_json (self , data ):
187
203
try :
188
- return json .loads (bytes (data ).replace (b"\x00 " , b"" ).replace (b"\xff " , b"" ).decode ("utf-8" ))
204
+ data = bytes (data )
205
+ data = data .replace (b"\x00 " , b"" )
206
+ data = data .replace (b"\xff " , b"" )
207
+ data = data .decode ("utf-8" )
208
+ return json .loads (data )
189
209
except BaseException :
190
210
return None
191
211
@@ -239,7 +259,8 @@ def userdata_addr_range(self):
239
259
240
260
def _get_addr_range (self , name ):
241
261
# get the bootmeta's addrmap or fallback to the root's addrmap.
242
- addr_map = self .root .get (u"bootmeta" , {}).get (u"addrmap" , self .root .get (u"addrmap" , None ))
262
+ addr_map = self .root .get (u"bootmeta" , {}).get (
263
+ u"addrmap" , self .root .get (u"addrmap" , None ))
243
264
if addr_map is None :
244
265
raise Exception ("Missing address map from device metadata" )
245
266
addr_str = addr_map .get (name , None )
0 commit comments