Index: emcore/trunk/tools/emcore.py |
— | — | @@ -93,7 +93,7 @@ |
94 | 94 | to all functions decorated with @command
|
95 | 95 | """
|
96 | 96 | cls.cmddict = {}
|
97 | | - for attr, value in cls.__dict__.iteritems():
|
| 97 | + for attr, value in cls.__dict__.items():
|
98 | 98 | if getattr(value, 'func', False):
|
99 | 99 | if getattr(value.func, '_command', False):
|
100 | 100 | cls.cmddict[value.func.__name__] = value
|
— | — | @@ -125,17 +125,17 @@ |
126 | 126 | if func in self.cmddict:
|
127 | 127 | try:
|
128 | 128 | self.cmddict[func](*args)
|
129 | | - except (ArgumentError, libemcore.ArgumentError), e:
|
| 129 | + except (ArgumentError, libemcore.ArgumentError) as e:
|
130 | 130 | usage(e, specific=func)
|
131 | 131 | except (ArgumentError, libemcore.ArgumentError):
|
132 | 132 | usage("Syntax Error in function '" + func + "'", specific=func)
|
133 | | - except ArgumentTypeError, e:
|
| 133 | + except ArgumentTypeError as e:
|
134 | 134 | usage(e, specific=func)
|
135 | 135 | except NotImplementedError:
|
136 | 136 | self.logger.error("This function is not implemented yet!\n")
|
137 | | - except libemcore.DeviceError, e:
|
| 137 | + except libemcore.DeviceError as e:
|
138 | 138 | self.logger.error(str(e) + "\n")
|
139 | | - except TypeError, e:
|
| 139 | + except TypeError as e:
|
140 | 140 | # Only act on TypeErrors for the function we called, not on TypeErrors raised by another function.
|
141 | 141 | if str(e).split(" ", 1)[0] == func + "()":
|
142 | 142 | self.logger.error(usage("Argument Error in '%s': Wrong argument count" % func, specific=func))
|
Index: emcore/trunk/tools/misc.py |
— | — | @@ -250,7 +250,9 @@ |
251 | 251 | # and split into a list of lines:
|
252 | 252 | lines = docstring.expandtabs().splitlines()
|
253 | 253 | # Determine minimum indentation (first line doesn't count):
|
254 | | - indent = sys.maxint
|
| 254 | + try: maxsize = sys.maxint
|
| 255 | + except AttributeError: maxsize = sys.maxsize
|
| 256 | + indent = maxsize
|
255 | 257 | for line in lines[1:]:
|
256 | 258 | stripped = line.lstrip()
|
257 | 259 | if stripped:
|
— | — | @@ -257,7 +259,7 @@ |
258 | 260 | indent = min(indent, len(line) - len(stripped))
|
259 | 261 | # Remove indentation (first line is special):
|
260 | 262 | trimmed = [lines[0].strip()]
|
261 | | - if indent < sys.maxint:
|
| 263 | + if indent < maxsize:
|
262 | 264 | for line in lines[1:]:
|
263 | 265 | trimmed.append(line[indent:].rstrip())
|
264 | 266 | # Strip off trailing and leading blank lines:
|
— | — | @@ -343,6 +345,8 @@ |
344 | 346 | """
|
345 | 347 | Converts quite everything into bool.
|
346 | 348 | """
|
| 349 | + try: long
|
| 350 | + except NameError: long = int
|
347 | 351 | if type(something) == bool:
|
348 | 352 | return something
|
349 | 353 | if something is None:
|
— | — | @@ -362,6 +366,8 @@ |
363 | 367 | This works for default arguments too, because it returns
|
364 | 368 | None when it found that it got a NoneType object.
|
365 | 369 | """
|
| 370 | + try: long
|
| 371 | + except NameError: long = int
|
366 | 372 | if type(something) == int or type(something) == long:
|
367 | 373 | return something
|
368 | 374 | elif something is None:
|
— | — | @@ -377,4 +383,12 @@ |
378 | 384 | except ValueError:
|
379 | 385 | raise ArgumentTypeError("integer", "'%s'" % something)
|
380 | 386 | else:
|
381 | | - raise ArgumentTypeError("integer", "'%s'" % something) |
\ No newline at end of file |
| 387 | + raise ArgumentTypeError("integer", "'%s'" % something)
|
| 388 | +
|
| 389 | +
|
| 390 | +def majorver():
|
| 391 | + """
|
| 392 | + Returns the major version of python
|
| 393 | + """
|
| 394 | + import sys
|
| 395 | + return sys.hexversion // 0x1000000 |
\ No newline at end of file |
Index: emcore/trunk/tools/libemcore.py |
— | — | @@ -30,6 +30,7 @@ |
31 | 31 | import struct
|
32 | 32 | import ctypes
|
33 | 33 | import usb.core
|
| 34 | +import base64
|
34 | 35 |
|
35 | 36 | from libemcoredata import *
|
36 | 37 | from misc import Logger, Bunch, Error, ArgumentError, gethwname
|
— | — | @@ -222,7 +223,7 @@ |
223 | 224 | """
|
224 | 225 | cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
|
225 | 226 | din_maxsize = self.lib.dev.packetsizelimit.din
|
226 | | - data = ""
|
| 227 | + data = b""
|
227 | 228 | (headsize, bodysize, tailsize) = self._alignsplit(addr, size, cin_maxsize, 16)
|
228 | 229 | self.logger.debug("Downloading %d bytes from 0x%X, split as (%d/%d/%d)\n" % (size, addr, headsize, bodysize, tailsize))
|
229 | 230 | if headsize != 0:
|
— | — | @@ -288,12 +289,12 @@ |
289 | 290 | string = ""
|
290 | 291 | while (len(string) < maxlength or maxlength < 0):
|
291 | 292 | data = self._readmem(addr, min(maxlength - len(string), cin_maxsize))
|
292 | | - length = data.find("\0")
|
| 293 | + length = data.find(b"\0")
|
293 | 294 | if length >= 0:
|
294 | | - string += data[:length]
|
| 295 | + string += data[:length].decode("latin_1")
|
295 | 296 | break
|
296 | 297 | else:
|
297 | | - string += data
|
| 298 | + string += data.decode("latin_1")
|
298 | 299 | addr += cin_maxsize
|
299 | 300 | return string
|
300 | 301 |
|
— | — | @@ -300,7 +301,7 @@ |
301 | 302 | @command()
|
302 | 303 | def i2cread(self, index, slaveaddr, startaddr, size):
|
303 | 304 | """ Reads data from an i2c slave """
|
304 | | - data = ""
|
| 305 | + data = b""
|
305 | 306 | for i in range(size):
|
306 | 307 | resp = self.lib.monitorcommand(struct.pack("<IBBBBII", 8, index, slaveaddr, startaddr + i, 1, 0, 0), "III1s", (None, None, None, "data"))
|
307 | 308 | data += resp.data
|
— | — | @@ -318,10 +319,10 @@ |
319 | 320 |
|
320 | 321 | @command()
|
321 | 322 | def usbcread(self):
|
322 | | - """ Reads one packet with the maximal cin size """
|
| 323 | + """ Reads one packet with the maximal cin size from the console """
|
323 | 324 | cin_maxsize = self.lib.dev.packetsizelimit.cin - self.lib.headersize
|
324 | 325 | resp = self.lib.monitorcommand(struct.pack("<IIII", 10, cin_maxsize, 0, 0), "III%ds" % cin_maxsize, ("validsize", "buffersize", "queuesize", "data"))
|
325 | | - resp.data = resp.data[:resp.validsize]
|
| 326 | + resp.data = resp.data[:resp.validsize].decode("latin_1")
|
326 | 327 | resp.maxsize = cin_maxsize
|
327 | 328 | return resp
|
328 | 329 |
|
— | — | @@ -918,7 +919,7 @@ |
919 | 920 | self.connected = True
|
920 | 921 |
|
921 | 922 | def monitorcommand(self, cmd, rcvdatatypes=None, rcvstruct=None):
|
922 | | - self.logger.debug("Sending monitorcommand [0x%s]\n" % cmd[3::-1].encode("hex"))
|
| 923 | + self.logger.debug("Sending monitorcommand [0x%s]\n" % base64.b16encode(cmd[3::-1]).decode("ascii"))
|
923 | 924 | writelen = self.dev.cout(cmd)
|
924 | 925 | if rcvdatatypes:
|
925 | 926 | rcvdatatypes = "I" + rcvdatatypes # add the response
|
— | — | @@ -1073,7 +1074,7 @@ |
1074 | 1075 | from misc import gendoc
|
1075 | 1076 | logger.write("Generating documentation\n")
|
1076 | 1077 | cmddict = {}
|
1077 | | - for attr, value in Emcore.__dict__.iteritems():
|
| 1078 | + for attr, value in Emcore.__dict__.items():
|
1078 | 1079 | if getattr(value, 'func', False):
|
1079 | 1080 | if getattr(value.func, '_command', False):
|
1080 | 1081 | cmddict[value.func.__name__] = value
|