| Index: embios/trunk/tools/embios.py | 
| — | — | @@ -26,6 +26,7 @@ | 
| 27 | 27 | import sys | 
| 28 | 28 | import time | 
| 29 | 29 | import libembios | 
|  | 30 | +import struct | 
| 30 | 31 |  | 
| 31 | 32 |  | 
| 32 | 33 | def usage(): | 
| — | — | @@ -135,10 +136,8 @@ | 
| 136 | 137 | print "      <bitmask>: the bitmask of the consoles to be flushed" | 
| 137 | 138 | print "" | 
| 138 | 139 | print "" | 
| 139 |  | -  print "  getprocessinformation <offset> <size> / getprocinfo <offset> <size>"
 | 
|  | 140 | +  print "  getprocessinformation / getprocinfo" | 
| 140 | 141 | print "    Fetches data on the currently running processes" | 
| 141 |  | -  print "      <offset> the offset in the data field"
 | 
| 142 |  | -  print "      <size> the number of bytes to be fetched"
 | 
| 143 | 142 | print "     ATTENTION: this function will be print the information to the console window." | 
| 144 | 143 | print "                If several threads are running this might overflow the window," | 
| 145 | 144 | print "                causing not everything to be shown." | 
| — | — | @@ -326,8 +325,8 @@ | 
| 327 | 326 |  | 
| 328 | 327 |  | 
| 329 | 328 | elif argv[1] == "getprocessinformation" or argv[1] == "getprocinfo": | 
| 330 |  | -    if len(argv) != 4: usage()
 | 
| 331 |  | -    dev.getprocinfo(int(argv[2], 16), int(argv[3], 16))
 | 
|  | 329 | +    if len(argv) != 2: usage() | 
|  | 330 | +    dev.getprocinfo() | 
| 332 | 331 |  | 
| 333 | 332 | elif argv[1] == "lockscheduler": | 
| 334 | 333 | if len(argv) != 2: usage() | 
| Index: embios/trunk/tools/libembios.py | 
| — | — | @@ -762,51 +762,7 @@ | 
| 763 | 763 | <silent> = 1: nothing | 
| 764 | 764 | """ | 
| 765 | 765 |  | 
| 766 |  | -    
 | 
| 767 |  | -    self.__myprint("Retrieving process information...", silent)
 | 
| 768 |  | -    
 | 
| 769 |  | -    offset = 0
 | 
| 770 |  | -    blocklen = size = self.cin_maxsize - 0x10
 | 
| 771 |  | -    procinfo = ""
 | 
| 772 |  | -    structversion = 0
 | 
| 773 |  | -    tablesize = 0
 | 
| 774 |  | -    
 | 
| 775 |  | -    # reading loop
 | 
| 776 |  | -    while (offset < size):
 | 
| 777 |  | -      self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 15, offset, size, 0))
 | 
| 778 |  | -      response = self.__getbulk(self.handle, self.__cinep, size + 0x10)
 | 
| 779 |  | -      self.__checkstatus(response)
 | 
| 780 |  | -      
 | 
| 781 |  | -      size = struct.unpack("<I", response[8:12])[0]
 | 
| 782 |  | -      
 | 
| 783 |  | -      if size <= offset + blocklen:
 | 
| 784 |  | -        procinfo += response[0x10:0x10 + size]
 | 
| 785 |  | -        structversion = struct.unpack("<I", response[4:])
 | 
| 786 |  | -        tablesize = struct.unpack("<I", response[8:])
 | 
| 787 |  | -        break
 | 
| 788 |  | -      else:
 | 
| 789 |  | -        procinfo += response[0x10:0x10 + blocklen]
 | 
| 790 |  | -      
 | 
| 791 |  | -      size -= blocklen
 | 
| 792 |  | -      offset += blocklen
 | 
| 793 |  | -      
 | 
| 794 |  | -      blocklen = self.cin_maxsize - 0x10
 | 
| 795 |  | -      if blocklen > size:
 | 
| 796 |  | -        blocklen = size
 | 
| 797 |  | -    
 | 
| 798 |  | -    
 | 
| 799 |  | -    out = (structversion, tablesize, procinfotolist(procinfo, structversion))
 | 
| 800 |  | -
 | 
| 801 |  | -    self.__myprint(" done\n\
 | 
| 802 |  | -                    Process information struct version: 0x%08x\n\
 | 
| 803 |  | -                    Total size of process information table: 0x%08x\n\
 | 
| 804 |  | -                    %s\n\n"
 | 
| 805 |  | -                  % (out[0], out[1], procinfotostring(out[2], structversion))
 | 
| 806 |  | -                  , silent)
 | 
| 807 |  | -    
 | 
| 808 |  | -    return out
 | 
| 809 |  | -  
 | 
| 810 |  | -    def procinfotolist(self, processinfo, structver):
 | 
|  | 766 | +    def procinfotolist(processinfo, structver): | 
| 811 | 767 | if (structver == 1):   # Process information struct version == 1 | 
| 812 | 768 | ptr = 0x10 | 
| 813 | 769 | process_n = 0 | 
| — | — | @@ -853,9 +809,8 @@ | 
| 854 | 810 |  | 
| 855 | 811 | return retval | 
| 856 | 812 |  | 
| 857 |  | -
 | 
| 858 | 813 |  | 
| 859 |  | -    def procinfotostring(self, procinfolist, structver):
 | 
|  | 814 | +    def procinfotostring(procinfolist, structver): | 
| 860 | 815 | processinfoprint = "" | 
| 861 | 816 | ptr = 0 | 
| 862 | 817 | while structver == 1 and ptr < len(procinfolist):      # Process information struct version == 1 | 
| — | — | @@ -893,10 +848,52 @@ | 
| 894 | 849 | processinfoprint += "--------------------------------------------------------------------------------" | 
| 895 | 850 |  | 
| 896 | 851 | return processinfoprint | 
|  | 852 | + | 
|  | 853 | + | 
|  | 854 | +    self.__myprint("Retrieving process information...", silent) | 
| 897 | 855 |  | 
|  | 856 | +    offset = 0 | 
|  | 857 | +    blocklen = size = self.cin_maxsize - 0x10 | 
|  | 858 | +    procinfo = "" | 
|  | 859 | +    structversion = 0 | 
|  | 860 | +    tablesize = 0 | 
| 898 | 861 |  | 
|  | 862 | +    # reading loop | 
|  | 863 | +    while (offset < size): | 
|  | 864 | +      self.handle.bulkWrite(self.__coutep, struct.pack("<IIII", 15, offset, size, 0)) | 
|  | 865 | +      response = self.__getbulk(self.handle, self.__cinep, size + 0x10) | 
|  | 866 | +      self.__checkstatus(response) | 
|  | 867 | + | 
|  | 868 | +      size = struct.unpack("<I", response[8:12])[0] | 
|  | 869 | + | 
|  | 870 | +      if size <= offset + blocklen: | 
|  | 871 | +        procinfo += response[0x10:0x10 + size] | 
|  | 872 | +        structversion = struct.unpack("<I", response[4:])[0] | 
|  | 873 | +        tablesize = struct.unpack("<I", response[8:])[0] | 
|  | 874 | +        break | 
|  | 875 | +      else: | 
|  | 876 | +        procinfo += response[0x10:0x10 + blocklen] | 
|  | 877 | + | 
|  | 878 | +      size -= blocklen | 
|  | 879 | +      offset += blocklen | 
|  | 880 | + | 
|  | 881 | +      blocklen = self.cin_maxsize - 0x10 | 
|  | 882 | +      if blocklen > size: | 
|  | 883 | +        blocklen = size | 
| 899 | 884 |  | 
| 900 | 885 |  | 
|  | 886 | +    out = (structversion, tablesize, procinfotolist(procinfo, structversion)) | 
|  | 887 | + | 
|  | 888 | +    self.__myprint(" done\n\ | 
|  | 889 | +                    Process information struct version: 0x%08x\n\ | 
|  | 890 | +                    Total size of process information table: 0x%08x\n\ | 
|  | 891 | +                    %s\n\n" | 
|  | 892 | +                  % (out[0], out[1], procinfotostring(out[2], structversion)) | 
|  | 893 | +                  , silent) | 
|  | 894 | + | 
|  | 895 | +    return out | 
|  | 896 | + | 
|  | 897 | + | 
| 901 | 898 | def execimage(self, offset, silent = 0): | 
| 902 | 899 | self.__myprint("Executing emBIOS executable image at 0x%08x..." % offset, silent) | 
| 903 | 900 |  |