| Index: emcore/trunk/tools/emcore.py | 
| — | — | @@ -51,9 +51,9 @@ | 
| 52 | 52 | self.seen = seen | 
| 53 | 53 | def __str__(self): | 
| 54 | 54 | if self.seen: | 
| 55 |  | -            return "Expected " + str(self.expected) + " but saw " + str(self.seen)
 | 
|  | 55 | +            return "Expected %s but got %s" % (self.expected, self.seen) | 
| 56 | 56 | else: | 
| 57 |  | -            return "Expected " + str(self.expected) + ", but saw something else"
 | 
|  | 57 | +            return "Expected %s, but saw something else" % self.expected | 
| 58 | 58 |  | 
| 59 | 59 |  | 
| 60 | 60 | def usage(errormsg=None, specific=False, docstring=True): | 
| — | — | @@ -155,7 +155,7 @@ | 
| 156 | 156 | except TypeError, e: | 
| 157 | 157 | # Only act on TypeErrors for the function we called, not on TypeErrors raised by another function. | 
| 158 | 158 | if str(e).split(" ", 1)[0] == func + "()": | 
| 159 |  | -                    self.logger.error(usage("Argument Error in '" + func + "': Wrong argument count", specific=func) + "\n")
 | 
|  | 159 | +                    self.logger.error(usage("Argument Error in '%s': Wrong argument count" % func, specific=func)) | 
| 160 | 160 | else: | 
| 161 | 161 | raise | 
| 162 | 162 | except libemcore.usb.core.USBError: | 
| — | — | @@ -181,7 +181,7 @@ | 
| 182 | 182 | return True | 
| 183 | 183 | elif something.lower() in falselist: | 
| 184 | 184 | return False | 
| 185 |  | -        raise ArgumentTypeError("bool", "'"+str(something)+"'")
 | 
|  | 185 | +        raise ArgumentTypeError("bool", "'%s'" % something) | 
| 186 | 186 |  | 
| 187 | 187 | @staticmethod | 
| 188 | 188 | def _hexint(something): | 
| — | — | @@ -196,16 +196,12 @@ | 
| 197 | 197 | try: | 
| 198 | 198 | return int(something, 16) | 
| 199 | 199 | except ValueError: | 
| 200 |  | -                raise ArgumentTypeError("hexadecimal coded integer", "'"+str(something)+"'")
 | 
|  | 200 | +                raise ArgumentTypeError("hexadecimal coded integer", "'%s'" % something) | 
| 201 | 201 | elif something is None: | 
| 202 | 202 | return None | 
| 203 | 203 | else: | 
| 204 |  | -            raise ArgumentTypeError("hexadecimal coded integer", "'"+str(something)+"'")
 | 
|  | 204 | +            raise ArgumentTypeError("hexadecimal coded integer", "'%s'" % something) | 
| 205 | 205 |  | 
| 206 |  | -    @staticmethod
 | 
| 207 |  | -    def _hex(integer):
 | 
| 208 |  | -        return "0x%x" % integer
 | 
| 209 |  | -    
 | 
| 210 | 206 | @command | 
| 211 | 207 | def help(self): | 
| 212 | 208 | """ Displays this help """ | 
| — | — | @@ -219,26 +215,26 @@ | 
| 220 | 216 | """ | 
| 221 | 217 | if infotype == "version": | 
| 222 | 218 | hwtype = gethwname(self.emcore.lib.dev.hwtypeid) | 
| 223 |  | -            self.logger.info("Connected to " + \
 | 
| 224 |  | -                             libemcoredata.swtypes[self.emcore.lib.dev.swtypeid] + \
 | 
| 225 |  | -                             " v" + str(self.emcore.lib.dev.version.majorv) + \
 | 
| 226 |  | -                             "." + str(self.emcore.lib.dev.version.minorv) + \
 | 
| 227 |  | -                             "." + str(self.emcore.lib.dev.version.patchv) + \
 | 
| 228 |  | -                             " r" + str(self.emcore.lib.dev.version.revision) + \
 | 
| 229 |  | -                             " running on " + hwtype + "\n")
 | 
|  | 219 | +            self.logger.info("Connected to %s v%d.%d.%d r%d running on %s\n" % ( | 
|  | 220 | +                             libemcoredata.swtypes[self.emcore.lib.dev.swtypeid], | 
|  | 221 | +                             self.emcore.lib.dev.version.majorv, | 
|  | 222 | +                             self.emcore.lib.dev.version.minorv, | 
|  | 223 | +                             self.emcore.lib.dev.version.patchv, | 
|  | 224 | +                             self.emcore.lib.dev.version.revision, | 
|  | 225 | +                             hwtype)) | 
| 230 | 226 |  | 
| 231 | 227 | elif infotype == "packetsize": | 
| 232 |  | -            self.logger.info("Maximum packet sizes: \n command out: " + str(self.emcore.lib.dev.packetsizelimit.cout) + \
 | 
| 233 |  | -                             "\n command in: " + str(self.emcore.lib.dev.packetsizelimit.cin) + \
 | 
| 234 |  | -                             "\n data in: " + str(self.emcore.lib.dev.packetsizelimit.din) + \
 | 
| 235 |  | -                             "\n data out: " + str(self.emcore.lib.dev.packetsizelimit.dout)+ "\n")
 | 
|  | 228 | +            self.logger.info("Maximum packet sizes:\n") | 
|  | 229 | +            self.logger.info("command out: %d\n" % self.emcore.lib.dev.packetsizelimit.cout, 4) | 
|  | 230 | +            self.logger.info("command in: %d\n" % self.emcore.lib.dev.packetsizelimit.cin, 4) | 
|  | 231 | +            self.logger.info("data out: %d\n" % self.emcore.lib.dev.packetsizelimit.dout, 4) | 
|  | 232 | +            self.logger.info("data in: %d\n" % self.emcore.lib.dev.packetsizelimit.din, 4) | 
| 236 | 233 |  | 
| 237 | 234 | elif infotype == "usermemrange": | 
| 238 | 235 | resp = self.emcore.getusermemrange() | 
| 239 |  | -            self.logger.info("The user memory range is " + \
 | 
| 240 |  | -                             self._hex(self.emcore.lib.dev.usermem.lower) + \
 | 
| 241 |  | -                             " - " + \
 | 
| 242 |  | -                             self._hex(self.emcore.lib.dev.usermem.upper - 1) + "\n")
 | 
|  | 236 | +            self.logger.info("The user memory range is 0x%X - 0x%X" % ( | 
|  | 237 | +                             self.emcore.lib.dev.usermem.lower, | 
|  | 238 | +                             self.emcore.lib.dev.usermem.upper - 1)) | 
| 243 | 239 |  | 
| 244 | 240 | else: | 
| 245 | 241 | raise ArgumentTypeError("one out of 'version', 'packetsize', 'usermemrange'", infotype) | 
| — | — | @@ -280,10 +276,9 @@ | 
| 281 | 277 | except IOError: | 
| 282 | 278 | raise ArgumentError("File not readable. Does it exist?") | 
| 283 | 279 | if addr is not None: | 
| 284 |  | -            self.logger.info("Writing file '" + filename + \
 | 
| 285 |  | -                            "' to memory at " + self._hex(addr) + "...\n")
 | 
|  | 280 | +            self.logger.info("Writing file '%s' to memory at 0x%X...\n" % (filename, addr)) | 
| 286 | 281 | else: | 
| 287 |  | -            self.logger.info("Writing file '" + filename + " to an allocated memory region...\n")
 | 
|  | 282 | +            self.logger.info("Writing file '%s' to an allocated memory region...\n" % filename) | 
| 288 | 283 | with f: | 
| 289 | 284 | if addr is not None: | 
| 290 | 285 | self.emcore.write(addr, f.read()) | 
| — | — | @@ -291,7 +286,7 @@ | 
| 292 | 287 | addr = self.emcore.upload(f.read()) | 
| 293 | 288 | size = f.tell() | 
| 294 | 289 | f.close() | 
| 295 |  | -        self.logger.info("Done uploading " + str(size) + " bytes to 0x" + self._hex(addr) + "\n")
 | 
|  | 290 | +        self.logger.info("Done uploading %d bytes to 0x%X\n" % (size, addr)) | 
| 296 | 291 | return addr, size | 
| 297 | 292 |  | 
| 298 | 293 | @command | 
| — | — | @@ -308,9 +303,8 @@ | 
| 309 | 304 | f = open(filename, 'wb') | 
| 310 | 305 | except IOError: | 
| 311 | 306 | raise ArgumentError("Can not open file for write!") | 
| 312 |  | -        self.logger.info("Reading data from address " + self._hex(addr) + \
 | 
| 313 |  | -                         " with the size " + self._hex(size) + \
 | 
| 314 |  | -                         " to '"+filename+"'...")
 | 
|  | 307 | +        self.logger.info("Reading data from address 0x%X with the size 0x%X to '%s'..." % | 
|  | 308 | +                        (addr, size, filename)) | 
| 315 | 309 | with f: | 
| 316 | 310 | f.write(self.emcore.read(addr, size)) | 
| 317 | 311 | f.close() | 
| — | — | @@ -329,8 +323,7 @@ | 
| 330 | 324 | raise ArgumentError("Specified integer too long") | 
| 331 | 325 | data = struct.pack("I", integer) | 
| 332 | 326 | self.emcore.write(addr, data) | 
| 333 |  | -        self.logger.info("Integer '" + self._hex(integer) + \
 | 
| 334 |  | -                         "' written successfully to " + self._hex(addr) + "\n")
 | 
|  | 327 | +        self.logger.info("Integer '0x%X' written successfully to 0x%X\n" % (integer, addr)) | 
| 335 | 328 |  | 
| 336 | 329 | @command | 
| 337 | 330 | def downloadint(self, addr): | 
| — | — | @@ -341,8 +334,7 @@ | 
| 342 | 335 | addr = self._hexint(addr) | 
| 343 | 336 | data = self.emcore.read(addr, 4) | 
| 344 | 337 | integer = struct.unpack("I", data)[0] | 
| 345 |  | -        self.logger.info("Integer '" + self._hex(integer) + \
 | 
| 346 |  | -                         "' read from address " + self._hex(addr) + "\n")
 | 
|  | 338 | +        self.logger.info("Read '0x%X' from address 0x%X\n" % (integer, addr)) | 
| 347 | 339 |  | 
| 348 | 340 | @command | 
| 349 | 341 | def i2cread(self, bus, slave, addr, size): | 
| — | — | @@ -402,7 +394,7 @@ | 
| 403 | 395 | for word in args: | 
| 404 | 396 | text += word + " " | 
| 405 | 397 | text = text[:-1] | 
| 406 |  | -        self.logger.info("Writing '"+ text +"' to the usb console\n")
 | 
|  | 398 | +        self.logger.info("Writing '%s' to the usb console\n" % text) | 
| 407 | 399 | self.emcore.usbcwrite(text) | 
| 408 | 400 |  | 
| 409 | 401 | @command | 
| — | — | @@ -428,8 +420,7 @@ | 
| 429 | 421 | for word in args: | 
| 430 | 422 | text += word + " " | 
| 431 | 423 | text = text[:-1] | 
| 432 |  | -        self.logger.info("Writing '" + text + \
 | 
| 433 |  | -                         "' to the device consoles identified with " + self._hex(bitmask) + "\n")
 | 
|  | 424 | +        self.logger.info("Writing '%s' to the device consoles identified with 0x%X\n" % (text, bitmask)) | 
| 434 | 425 | self.emcore.cwrite(text, bitmask) | 
| 435 | 426 |  | 
| 436 | 427 | @command | 
| — | — | @@ -439,8 +430,7 @@ | 
| 440 | 431 | <bitmask>: the bitmask of the consoles to be flushed | 
| 441 | 432 | """ | 
| 442 | 433 | bitmask = self._hexint(bitmask) | 
| 443 |  | -        self.logger.info("Flushing consoles identified with the bitmask " + \
 | 
| 444 |  | -                         self._hex(bitmask) + "\n")
 | 
|  | 434 | +        self.logger.info("Flushing consoles identified with the bitmask 0x%X\n" % bitmask) | 
| 445 | 435 | self.emcore.cflush(bitmask) | 
| 446 | 436 |  | 
| 447 | 437 | @command | 
| — | — | @@ -463,16 +453,16 @@ | 
| 464 | 454 | % (len(threads), cpuload * 100, coreload * 100, threadload * 100)) | 
| 465 | 455 | self.logger.info("Thread dump:\n") | 
| 466 | 456 | for thread in threads: | 
| 467 |  | -            self.logger.info(thread.name+":\n", 2)
 | 
| 468 |  | -            self.logger.info("Threadstruct address: " + self._hex(thread.addr)+"\n", 4)
 | 
| 469 |  | -            self.logger.info("Thread type: "    + str(thread.thread_type)+"\n", 4)
 | 
| 470 |  | -            self.logger.info("Thread state: "   + str(thread.state)+"\n", 4)
 | 
| 471 |  | -            self.logger.info("Block type: "     + str(thread.block_type)+"\n", 4)
 | 
| 472 |  | -            self.logger.info("Blocked by: "     + self._hex(thread.blocked_by)+"\n", 4)
 | 
| 473 |  | -            self.logger.info("Priority: "       + str(thread.priority)+"/255\n", 4)
 | 
|  | 457 | +            self.logger.info("%s:\n" % thread.name, 2) | 
|  | 458 | +            self.logger.info("Threadstruct address: 0x%X\n" % thread.addr, 4) | 
|  | 459 | +            self.logger.info("Thread type: %s\n" % thread.thread_type, 4) | 
|  | 460 | +            self.logger.info("Thread state: %s\n" % thread.state, 4) | 
|  | 461 | +            self.logger.info("Block type: %s\n" % thread.block_type, 4) | 
|  | 462 | +            self.logger.info("Blocked by: 0x%X\n" % thread.blocked_by, 4) | 
|  | 463 | +            self.logger.info("Priority: %d/255\n" % thread.priority, 4) | 
| 474 | 464 | self.logger.info("Current CPU load: %.1f%%\n" % ((thread.cpuload * 100) / 255.), 4) | 
| 475 |  | -            self.logger.info("CPU time (total): "+str(datetime.timedelta(microseconds = thread.cputime_total))+"\n", 4)
 | 
| 476 |  | -            self.logger.info("Stack address: "  + self._hex(thread.stack)+"\n", 4)
 | 
|  | 465 | +            self.logger.info("CPU time (total): %s\n" % datetime.timedelta(microseconds = thread.cputime_total), 4) | 
|  | 466 | +            self.logger.info("Stack address: 0x%X\n" % thread.stack, 4) | 
| 477 | 467 | self.logger.info("Registers:\n", 4) | 
| 478 | 468 | for registerrange in range(4): | 
| 479 | 469 | self.logger.info("      ") | 
| — | — | @@ -500,57 +490,54 @@ | 
| 501 | 491 | self.emcore.unlockscheduler() | 
| 502 | 492 |  | 
| 503 | 493 | @command | 
| 504 |  | -    def suspendthread(self, threadid):
 | 
|  | 494 | +    def suspendthread(self, threadaddr): | 
| 505 | 495 | """ | 
| 506 |  | -            Suspends/resumes the thread with thread ID <threadid>
 | 
|  | 496 | +            Suspends the thread with the thread address <threadaddr> | 
| 507 | 497 | """ | 
| 508 |  | -        threadid = self._hexint(threadid)
 | 
| 509 |  | -        self.logger.info("Suspending the thread with the threadid "+self._hex(threadid)+"\n")
 | 
| 510 |  | -        self.emcore.suspendthread(threadid)
 | 
|  | 498 | +        threadaddr = self._hexint(threadaddr) | 
|  | 499 | +        self.logger.info("Suspending the thread with the threadaddr 0x%X\n" % threadaddr) | 
|  | 500 | +        self.emcore.suspendthread(threadaddr) | 
| 511 | 501 |  | 
| 512 | 502 | @command | 
| 513 |  | -    def resumethread(self, threadid):
 | 
|  | 503 | +    def resumethread(self, threadaddr): | 
| 514 | 504 | """ | 
| 515 |  | -            Resumes the thread with thread ID <threadid>
 | 
|  | 505 | +            Resumes the thread with the thread address <threadaddr> | 
| 516 | 506 | """ | 
| 517 |  | -        threadid = self._hexint(threadid)
 | 
| 518 |  | -        self.logger.info("Resuming the thread with the threadid "+self._hex(threadid)+"\n")
 | 
| 519 |  | -        self.emcore.resumethread(threadid)
 | 
|  | 507 | +        threadaddr = self._hexint(threadaddr) | 
|  | 508 | +        self.logger.info("Resuming the thread with the threadaddr 0x%X\n" % threadaddr) | 
|  | 509 | +        self.emcore.resumethread(threadaddr) | 
| 520 | 510 |  | 
| 521 | 511 | @command | 
| 522 |  | -    def killthread(self, threadid):
 | 
|  | 512 | +    def killthread(self, threadaddr): | 
| 523 | 513 | """ | 
| 524 |  | -            Kills the thread with thread ID <threadid>
 | 
|  | 514 | +            Kills the thread with the thread address <threadaddr> | 
| 525 | 515 | """ | 
| 526 |  | -        threadid = self._hexint(threadid)
 | 
| 527 |  | -        self.logger.info("Killing the thread with the threadid " + self._hex(threadid) + "\n")
 | 
| 528 |  | -        self.emcore.killthread(threadid)
 | 
|  | 516 | +        threadaddr = self._hexint(threadaddr) | 
|  | 517 | +        self.logger.info("Killing the thread with the threadaddr 0x%X\n" % threadaddr) | 
|  | 518 | +        self.emcore.killthread(threadaddr) | 
| 529 | 519 |  | 
| 530 | 520 | @command | 
| 531 | 521 | def createthread(self, nameptr, entrypoint, stackptr, stacksize, threadtype, priority, state): | 
| 532 | 522 | """ | 
| 533 |  | -            Creates a new thread and returns its thread ID
 | 
|  | 523 | +            Creates a new thread and returns its thread pointer | 
| 534 | 524 | <namepointer>: a pointer to the thread's name | 
| 535 | 525 | <entrypoint>: a pointer to the entrypoint of the thread | 
| 536 | 526 | <stackpointer>: a pointer to the stack of the thread | 
| 537 | 527 | <stacksize>: the size of the thread's stack | 
| 538 |  | -            <type>: the thread type, vaild are: 0 => user thread, 1 => system thread
 | 
|  | 528 | +            <threadtype>: the thread type, vaild are: 0 => user thread, 1 => system thread | 
| 539 | 529 | <priority>: the priority of the thread, from 1 to 255 | 
| 540 | 530 | <state>: the thread's initial state, valid are: 1 => ready, 0 => suspended | 
| 541 | 531 | """ | 
| 542 | 532 | nameptr = self._hexint(nameptr) | 
| 543 | 533 | entrypoint = self._hexint(entrypoint) | 
| 544 |  | -        stackpointer = self._hexint(stackpointer)
 | 
|  | 534 | +        stackptr = self._hexint(stackptr) | 
| 545 | 535 | stacksize = self._hexint(stacksize) | 
| 546 | 536 | priority = self._hexint(priority) | 
| 547 |  | -        data = self.emcore.createthread(nameptr, entrypoint, stackptr, stacksize, type, priority, state)
 | 
|  | 537 | +        data = self.emcore.createthread(nameptr, entrypoint, stackptr, stacksize, threadtype, priority, state) | 
| 548 | 538 | name = self.emcore.readstring(nameptr) | 
| 549 |  | -        self.logger.info("Created a thread with the threadid " + data.id + \
 | 
| 550 |  | -                         ", the name \"" + name + "\"" + \
 | 
| 551 |  | -                         ", the entrypoint at " + self._hex(entrypoint) + \
 | 
| 552 |  | -                         ", the stack at " + self._hex(stackpointer) + \
 | 
| 553 |  | -                         " with a size of " + self._hex(stacksize) + \
 | 
| 554 |  | -                         " and a priority of " + self._hex(priority) + "\n")
 | 
|  | 539 | +        self.logger.info("Created a thread with the thread pointer 0x%X, the name \"%s\", the entrypoint at 0x%X," \ | 
|  | 540 | +                         "the stack at 0x%X with a size of 0x%X and a priority of %d/255\n" % | 
|  | 541 | +                        (data.threadptr, name, entrypoint, stackptr, stacksize, priority)) | 
| 555 | 542 |  | 
| 556 | 543 | @command | 
| 557 | 544 | def run(self, filename): | 
| — | — | @@ -564,7 +551,7 @@ | 
| 565 | 552 | raise ArgumentError("File not readable. Does it exist?") | 
| 566 | 553 | with f: | 
| 567 | 554 | data = self.emcore.run(f.read()) | 
| 568 |  | -        self.logger.info("Executed emCORE application as thread " + self._hex(data.thread) + "\n")
 | 
|  | 555 | +        self.logger.info("Executed emCORE application as thread 0x%X\n" % data.thread) | 
| 569 | 556 |  | 
| 570 | 557 | @command | 
| 571 | 558 | def execimage(self, addr): | 
| — | — | @@ -572,7 +559,7 @@ | 
| 573 | 560 | Executes the emCORE application at <addr>. | 
| 574 | 561 | """ | 
| 575 | 562 | addr = self._hexint(addr) | 
| 576 |  | -        self.logger.info("Starting emCORE app at "+self._hex(addr)+"\n")
 | 
|  | 563 | +        self.logger.info("Starting emCORE app at 0x%X\n" % addr) | 
| 577 | 564 | self.emcore.execimage(addr) | 
| 578 | 565 |  | 
| 579 | 566 | @command | 
| — | — | @@ -594,8 +581,8 @@ | 
| 595 | 582 | addr_flash = self._hexint(addr_flash) | 
| 596 | 583 | addr_mem = self._hexint(addr_mem) | 
| 597 | 584 | size = self._hexint(size) | 
| 598 |  | -        self.logger.info("Dumping boot flash addresses "+self._hex(addr_flash)+" - "+
 | 
| 599 |  | -                         hex(addr_flash+size)+" to "+self._hex(addr_mem)+" - "+self._hex(addr_mem+size)+"\n")
 | 
|  | 585 | +        self.logger.info("Dumping boot flash from 0x%X - 0x%X to 0x%X - 0x%X\n" % | 
|  | 586 | +                        (addr_flash, addr_flash + size, addr_mem, addr_mem + size)) | 
| 600 | 587 | self.emcore.bootflashread(addr_mem, addr_flash, size) | 
| 601 | 588 |  | 
| 602 | 589 | @command | 
| — | — | @@ -612,8 +599,8 @@ | 
| 613 | 600 | addr_mem = self._hexint(addr_mem) | 
| 614 | 601 | size = self._hexint(size) | 
| 615 | 602 | force = self._bool(force) | 
| 616 |  | -        self.logger.warn("Writing boot flash from the memory in "+self._hex(addr_mem)+" - "+
 | 
| 617 |  | -                         hex(addr_mem+size)+" to "+self._hex(addr_flash)+" - "+self._hex(addr_flash+size)+"\n")
 | 
|  | 603 | +        self.logger.warn("Writing boot flash from the memory in 0x%X - 0x%X to 0x%X - 0x%X\n" % | 
|  | 604 | +                        (addr_mem, addr_mem + size, addr_flash, addr_flash + size)) | 
| 618 | 605 | if force == False: | 
| 619 | 606 | self.logger.warn("If this was not what you intended press Ctrl-C NOW") | 
| 620 | 607 | for i in range(10): | 
| — | — | @@ -637,8 +624,9 @@ | 
| 638 | 625 | """ | 
| 639 | 626 | Moves the firmware at <addr> with <size> to <targetaddr> and executes it | 
| 640 | 627 | """ | 
|  | 628 | +        targetaddr = self._hexint(targetaddr) | 
| 641 | 629 | addr = self._hexint(addr) | 
| 642 |  | -        self.logger.info("Running firmware at "+self._hex(targetaddr)+". Bye.\n")
 | 
|  | 630 | +        self.logger.info("Running firmware at 0x%X. Bye.\n" % targetaddr) | 
| 643 | 631 | self.emcore.execfirmware(targetaddr, addr, size) | 
| 644 | 632 |  | 
| 645 | 633 | @command | 
| — | — | @@ -679,14 +667,13 @@ | 
| 680 | 668 | size = self._hexint(size) | 
| 681 | 669 | destination = self._hexint(destination) | 
| 682 | 670 | sha1size = 0x14 | 
| 683 |  | -        self.logger.info("Generating hmac-sha1 hash from the buffer at " + self._hex(addr) + \
 | 
| 684 |  | -                         " with the size " + self._hex(size) + " and saving it to " + \
 | 
| 685 |  | -                         self._hex(destination) + " - " + self._hex(destination+sha1size) + "...")
 | 
|  | 671 | +        self.logger.info("Generating hmac-sha1 hash from the buffer at 0x%X with the size 0x%X and saving it to 0x%X - 0x%X\n" % | 
|  | 672 | +                        (addr, size, destination, destination + sha1size)) | 
| 686 | 673 | self.emcore.hmac_sha1(addr, size, destination) | 
| 687 | 674 | self.logger.info("done\n") | 
| 688 | 675 | data = self.emcore.read(destination, sha1size) | 
| 689 | 676 | hash = ord(data) | 
| 690 |  | -        self.logger.info("The generated hash is "+self._hex(hash)+"\n")
 | 
|  | 677 | +        self.logger.info("The generated hash is 0x%X\n" % hash) | 
| 691 | 678 |  | 
| 692 | 679 | @command | 
| 693 | 680 | def ipodnano2g_getnandinfo(self): | 
| — | — | @@ -695,11 +682,11 @@ | 
| 696 | 683 | Gathers some information about the NAND chip used | 
| 697 | 684 | """ | 
| 698 | 685 | data = self.emcore.ipodnano2g_getnandinfo() | 
| 699 |  | -        self.logger.info("NAND chip type: "         + self._hex(data["type"])+"\n")
 | 
| 700 |  | -        self.logger.info("Number of banks: "        + str(data["banks"])+"\n")
 | 
| 701 |  | -        self.logger.info("Number of blocks: "       + str(data["blocks"])+"\n")
 | 
| 702 |  | -        self.logger.info("Number of user blocks: "  + str(data["userblocks"])+"\n")
 | 
| 703 |  | -        self.logger.info("Pages per block: "        + str(data["pagesperblock"])+"\n")
 | 
|  | 686 | +        self.logger.info("NAND chip type: 0x%X\n" % data["type"]) | 
|  | 687 | +        self.logger.info("Number of banks: %d\n" % data["banks"]) | 
|  | 688 | +        self.logger.info("Number of blocks: %d\n" % data["blocks"]) | 
|  | 689 | +        self.logger.info("Number of user blocks: %d\n" % data["userblocks"]) | 
|  | 690 | +        self.logger.info("Pages per block: %d\n" % data["pagesperblock"]) | 
| 704 | 691 |  | 
| 705 | 692 | @command | 
| 706 | 693 | def ipodnano2g_nandread(self, addr, start, count, doecc=True, checkempty=True): | 
| — | — | @@ -717,8 +704,8 @@ | 
| 718 | 705 | count = self._hexint(count) | 
| 719 | 706 | doecc = self._bool(doecc) | 
| 720 | 707 | checkempty = self._bool(checkempty) | 
| 721 |  | -        self.logger.info("Reading " + self._hex(count) + " NAND pages starting at " + \
 | 
| 722 |  | -                         self._hex(start) + " to " + self._hex(addr) + "...")
 | 
|  | 708 | +        self.logger.info("Reading 0x%X NAND pages starting at 0x%X to memory at 0x%X..." % | 
|  | 709 | +                        (count, start, addr)) | 
| 723 | 710 | self.emcore.ipodnano2g_nandread(addr, start, count, doecc, checkempty) | 
| 724 | 711 | self.logger.info("done\n") | 
| 725 | 712 |  | 
| — | — | @@ -736,8 +723,8 @@ | 
| 737 | 724 | start = self._hexint(start) | 
| 738 | 725 | count = self._hexint(count) | 
| 739 | 726 | doecc = self._bool(doecc) | 
| 740 |  | -        self.logger.info("Writing " + self._hex(count) + " NAND pages starting at " + \
 | 
| 741 |  | -                         self._hex(start) + " from " + self._hex(addr) + "...")
 | 
|  | 727 | +        self.logger.info("Writing 0x%X NAND pages starting at 0x%X from memory at 0x%X..." % | 
|  | 728 | +                        (count, start, addr)) | 
| 742 | 729 | self.emcore.ipodnano2g_nandwrite(addr, start, count, doecc) | 
| 743 | 730 | self.logger.info("done\n") | 
| 744 | 731 |  | 
| — | — | @@ -753,8 +740,8 @@ | 
| 754 | 741 | addr = self._hexint(addr) | 
| 755 | 742 | start = self._hexint(start) | 
| 756 | 743 | count = self._hexint(count) | 
| 757 |  | -        self.logger.info("Erasing " + self._hex(count) + " NAND blocks starting at " + \
 | 
| 758 |  | -                         self._hex(start) + " and logging to " + self._hex(addr) + "...")
 | 
|  | 744 | +        self.logger.info("Erasing 0x%X NAND pages starting at 0x%X and logging to 0x%X..." % | 
|  | 745 | +                        (count, start, addr)) | 
| 759 | 746 | self.emcore.ipodnano2g_nanderase(addr, start, count) | 
| 760 | 747 | self.logger.info("done\n") | 
| 761 | 748 |  | 
| — | — | @@ -774,11 +761,11 @@ | 
| 775 | 762 | statusfile = open(filenameprefix+"_status.bin", 'wb') | 
| 776 | 763 | except IOError: | 
| 777 | 764 | raise ArgumentError("Can not open file for writing!") | 
| 778 |  | -        infofile.write("NAND chip type: "       + self._hex(info["type"]) + "\r\n")
 | 
| 779 |  | -        infofile.write("Number of banks: "      + str(info["banks"]) + "\r\n")
 | 
| 780 |  | -        infofile.write("Number of blocks: "     + str(info["blocks"]) + "\r\n")
 | 
| 781 |  | -        infofile.write("Number of user blocks: "+ str(info["userblocks"]) + "\r\n")
 | 
| 782 |  | -        infofile.write("Pages per block: "      + str(info["pagesperblock"]) + "\r\n")
 | 
|  | 765 | +        infofile.write("NAND chip type: 0x%X\r\n" % info["type"]) | 
|  | 766 | +        infofile.write("Number of banks: %d\r\n" % info["banks"]) | 
|  | 767 | +        infofile.write("Number of blocks: %d\r\n" % info["blocks"]) | 
|  | 768 | +        infofile.write("Number of user blocks: %d\r\n" % info["userblocks"]) | 
|  | 769 | +        infofile.write("Pages per block: %d\r\n" % info["pagesperblock"]) | 
| 783 | 770 | for i in range(info["banks"] * info["blocks"] * info["pagesperblock"] / 8192): | 
| 784 | 771 | self.logger.info(".") | 
| 785 | 772 | self.emcore.ipodnano2g_nandread(0x08000000, i * 8192, 8192, 1, 1) | 
| — | — | @@ -844,11 +831,11 @@ | 
| 845 | 832 | """ | 
| 846 | 833 | volume = self._hexint(volume) | 
| 847 | 834 | data = self.emcore.storage_get_info(volume) | 
| 848 |  | -        self.logger.info("Sector size: "+str(data["sectorsize"])+"\n")
 | 
| 849 |  | -        self.logger.info("Number of sectors: "+str(data["numsectors"])+"\n")
 | 
| 850 |  | -        self.logger.info("Vendor: "+data["vendor"]+"\n")
 | 
| 851 |  | -        self.logger.info("Product: "+data["product"]+"\n")
 | 
| 852 |  | -        self.logger.info("Revision: "+data["revision"]+"\n")
 | 
|  | 835 | +        self.logger.info("Sector size: %d\n" % data["sectorsize"]) | 
|  | 836 | +        self.logger.info("Number of sectors: %d\n" % data["numsectors"]) | 
|  | 837 | +        self.logger.info("Vendor: %s\n" % data["vendor"]) | 
|  | 838 | +        self.logger.info("Product: %s\n" % data["product"]) | 
|  | 839 | +        self.logger.info("Revision: %s\n" % data["revision"]) | 
| 853 | 840 |  | 
| 854 | 841 | @command | 
| 855 | 842 | def readrawstorage(self, volume, sector, count, addr): | 
| — | — | @@ -961,7 +948,7 @@ | 
| 962 | 949 | """ | 
| 963 | 950 | Creates a directory with the name <dirname> | 
| 964 | 951 | """ | 
| 965 |  | -        self.logger.info("Creating directory " + dirname + "...")
 | 
|  | 952 | +        self.logger.info("Creating directory %s..." % dirname) | 
| 966 | 953 | self.emcore.dir_create(dirname) | 
| 967 | 954 | self.logger.info(" done\n") | 
| 968 | 955 |  | 
| — | — | @@ -970,7 +957,7 @@ | 
| 971 | 958 | """ | 
| 972 | 959 | Removes an empty directory with the name <dirname> | 
| 973 | 960 | """ | 
| 974 |  | -        self.logger.info("Removing directory " + dirname + "...")
 | 
|  | 961 | +        self.logger.info("Removing directory %s..." % dirname) | 
| 975 | 962 | self.emcore.dir_remove(dirname) | 
| 976 | 963 | self.logger.info(" done\n") | 
| 977 | 964 |  | 
| — | — | @@ -979,7 +966,7 @@ | 
| 980 | 967 | """ | 
| 981 | 968 | Removes a file with the name <filename> | 
| 982 | 969 | """ | 
| 983 |  | -        self.logger.info("Removing file " + filename + "...")
 | 
|  | 970 | +        self.logger.info("Removing file %s..." % filename) | 
| 984 | 971 | self.emcore.file_unlink(filename) | 
| 985 | 972 | self.logger.info(" done\n") | 
| 986 | 973 |  | 
| — | — | @@ -1006,7 +993,7 @@ | 
| 1007 | 994 | """ | 
| 1008 | 995 | Renames or moves file or directory <oldname> to <newname> | 
| 1009 | 996 | """ | 
| 1010 |  | -        self.logger.info("Renaming " + oldname + " to " + newname + "...")
 | 
|  | 997 | +        self.logger.info("Renaming %s to %s..." % (oldname, newname)) | 
| 1011 | 998 | self.emcore.file_rename(oldname, newname) | 
| 1012 | 999 | self.logger.info(" done\n") | 
| 1013 | 1000 |  | 
| — | — | @@ -1036,7 +1023,7 @@ | 
| 1037 | 1024 | buffer = self._hexint(buffer) | 
| 1038 | 1025 | malloc = False | 
| 1039 | 1026 | try: | 
| 1040 |  | -                    self.logger.info("Downloading file " + remotename + " to " + localname + "...")
 | 
|  | 1027 | +                    self.logger.info("Downloading file %s to %s..." % (remotename, localname)) | 
| 1041 | 1028 | while size > 0: | 
| 1042 | 1029 | bytes = self.emcore.file_read(fd, buffsize, buffer).rc | 
| 1043 | 1030 | f.write(self.emcore.read(buffer, bytes)) | 
| — | — | @@ -1108,7 +1095,7 @@ | 
| 1109 | 1096 | buffer = self._hexint(buffer) | 
| 1110 | 1097 | malloc = False | 
| 1111 | 1098 | try: | 
| 1112 |  | -                self.logger.info("Uploading file " + localname + " to " + remotename + "...")
 | 
|  | 1099 | +                self.logger.info("Uploading file %s to %s..." % (localname, remotename)) | 
| 1113 | 1100 | fd = self.emcore.file_open(remotename, 0x15) | 
| 1114 | 1101 | try: | 
| 1115 | 1102 | while True: | 
| — | — | @@ -1167,7 +1154,7 @@ | 
| 1168 | 1155 | [path]: the path which is listed | 
| 1169 | 1156 | """ | 
| 1170 | 1157 | handle = self.emcore.dir_open(path) | 
| 1171 |  | -        self.logger.info("Directory listing of " + path + ":\n")
 | 
|  | 1158 | +        self.logger.info("Directory listing of %s:\n" % path) | 
| 1172 | 1159 | while True: | 
| 1173 | 1160 | try: | 
| 1174 | 1161 | entry = self.emcore.dir_read(handle) | 
| Index: emcore/trunk/tools/libemcore.py | 
| — | — | @@ -438,9 +438,9 @@ | 
| 439 | 439 | state = 1 | 
| 440 | 440 | else: | 
| 441 | 441 | raise ArgumentError("State must be either 'ready' or 'suspended'") | 
| 442 |  | -        resp = self.lib.monitorcommand(struct.pack("IIIIIIII", 19, nameptr, entrypoint, stackptr, stacksize, threadtype, priority, state), "III", (id, None, None))
 | 
| 443 |  | -        if resp.id < 0:
 | 
| 444 |  | -            raise DeviceError("The device returned the error code "+str(resp.id))
 | 
|  | 442 | +        resp = self.lib.monitorcommand(struct.pack("IIIIIIII", 19, nameptr, entrypoint, stackptr, stacksize, threadtype, priority, state), "III", ("threadptr", None, None)) | 
|  | 443 | +        if resp.threadptr < 0: | 
|  | 444 | +            raise DeviceError("The device returned the error code "+str(resp.threadptr)) | 
| 445 | 445 | return resp | 
| 446 | 446 |  | 
| 447 | 447 | @command() |