| Index: embios/trunk/tools/libembios.py | 
| — | — | @@ -763,7 +763,7 @@ | 
| 764 | 764 | <silent> = 0: Process information struct version, Process information table size | 
| 765 | 765 | <silent> = 1: nothing | 
| 766 | 766 | """ | 
| 767 |  | -    
 | 
|  | 767 | +    # inline functions ---------------------------------------------- | 
| 768 | 768 | def procinfotolist(processinfo, structver): | 
| 769 | 769 | if (structver == 1):   # Process information struct version == 1 | 
| 770 | 770 | ptr = 0 | 
| — | — | @@ -770,41 +770,43 @@ | 
| 771 | 771 | process_n = 0 | 
| 772 | 772 | retval = [] | 
| 773 | 773 | while ptr < len(processinfo): | 
|  | 774 | +          if struct.unpack("<I", processinfo[ptr:ptr + 4])[0] == 0: continue    # THREAD_FREE | 
|  | 775 | + | 
| 774 | 776 | retval.append({}) | 
| 775 | 777 |  | 
| 776 | 778 | retval[process_n]['regs'] = struct.unpack("<IIIIIIIIIIIIIIII", processinfo[ptr:ptr + 64]) | 
| 777 | 779 | ptr += 16 * 0x4 | 
| 778 |  | -          retval[process_n]['cpsr'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 780 | +          retval[process_n]['cpsr'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 779 | 781 | ptr += 1 * 0x4 | 
| 780 |  | -          retval[process_n]['state'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 782 | +          retval[process_n]['state'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 781 | 783 | ptr += 1 * 0x4 | 
| 782 |  | -          retval[process_n]['name_ptr'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 784 | +          retval[process_n]['name_ptr'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 783 | 785 | ptr += 1 * 0x4 | 
| 784 |  | -          retval[process_n]['cputime_current'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 786 | +          retval[process_n]['cputime_current'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 785 | 787 | ptr += 1 * 0x4 | 
| 786 | 788 | retval[process_n]['cputime_total'] = struct.unpack("<Q", processinfo[ptr:ptr + 8])[0] | 
| 787 | 789 | ptr += 1 * 0x8 | 
| 788 |  | -          retval[process_n]['startusec'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 790 | +          retval[process_n]['startusec'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 789 | 791 | ptr += 1 * 0x4 | 
| 790 |  | -          retval[process_n]['queue_next_ptr'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 792 | +          retval[process_n]['queue_next_ptr'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 791 | 793 | ptr += 1 * 0x4 | 
| 792 |  | -          retval[process_n]['timeout'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 794 | +          retval[process_n]['timeout'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 793 | 795 | ptr += 1 * 0x4 | 
| 794 |  | -          retval[process_n]['blocked_since'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 796 | +          retval[process_n]['blocked_since'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 795 | 797 | ptr += 1 * 0x4 | 
| 796 |  | -          retval[process_n]['blocked_by_ptr'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 798 | +          retval[process_n]['blocked_by_ptr'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 797 | 799 | ptr += 1 * 0x4 | 
| 798 |  | -          retval[process_n]['stack_ptr'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 800 | +          retval[process_n]['stack_ptr'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 799 | 801 | ptr += 1 * 0x4 | 
| 800 |  | -          retval[process_n]['err_no'] = int(struct.unpack("<I", processinfo[ptr:ptr + 4])[0])
 | 
|  | 802 | +          retval[process_n]['err_no'] = struct.unpack("<I", processinfo[ptr:ptr + 4])[0] | 
| 801 | 803 | ptr += 1 * 0x4 | 
| 802 |  | -          retval[process_n]['block_type'] = int(struct.unpack("<B", processinfo[ptr:ptr + 1])[0])
 | 
|  | 804 | +          retval[process_n]['block_type'] = struct.unpack("<B", processinfo[ptr:ptr + 1])[0] | 
| 803 | 805 | ptr += 1 * 0x1 | 
| 804 |  | -          retval[process_n]['thread_type'] = int(struct.unpack("<B", processinfo[ptr:ptr + 1])[0])
 | 
|  | 806 | +          retval[process_n]['thread_type'] = struct.unpack("<B", processinfo[ptr:ptr + 1])[0] | 
| 805 | 807 | ptr += 1 * 0x1 | 
| 806 |  | -          retval[process_n]['priority'] = int(struct.unpack("<B", processinfo[ptr:ptr + 1])[0])
 | 
|  | 808 | +          retval[process_n]['priority'] = struct.unpack("<B", processinfo[ptr:ptr + 1])[0] | 
| 807 | 809 | ptr += 1 * 0x1 | 
| 808 |  | -          retval[process_n]['cpuload'] = int(struct.unpack("<B", processinfo[ptr:ptr + 1])[0])
 | 
|  | 810 | +          retval[process_n]['cpuload'] = struct.unpack("<B", processinfo[ptr:ptr + 1])[0] | 
| 809 | 811 | ptr += 1 * 0x1 | 
| 810 | 812 |  | 
| 811 | 813 | process_n += 1 | 
| — | — | @@ -812,28 +814,35 @@ | 
| 813 | 815 | return retval | 
| 814 | 816 |  | 
| 815 | 817 |  | 
| 816 |  | -    def state2name(state):
 | 
| 817 |  | -      if state == 0: return "THREAD_FREE"
 | 
| 818 |  | -      elif state == 1: return "THREAD_SUSPENDED"
 | 
| 819 |  | -      elif state == 2: return "THREAD_READY"
 | 
| 820 |  | -      elif state == 3: return "THREAD_RUNNING"
 | 
| 821 |  | -      elif state == 4: return "THREAD_BLOCKED"
 | 
| 822 |  | -      elif state == 5: return "THREAD_DEFUNCT"
 | 
| 823 |  | -      elif state == 6: return "THREAD_DEFUNCT_ACK"
 | 
|  | 818 | +    def state2name(state, structver): | 
|  | 819 | +      if structver == 1: | 
|  | 820 | +        if state == 0: return "THREAD_FREE" | 
|  | 821 | +        elif state == 1: return "THREAD_SUSPENDED" | 
|  | 822 | +        elif state == 2: return "THREAD_READY" | 
|  | 823 | +        elif state == 3: return "THREAD_RUNNING" | 
|  | 824 | +        elif state == 4: return "THREAD_BLOCKED" | 
|  | 825 | +        elif state == 5: return "THREAD_DEFUNCT" | 
|  | 826 | +        elif state == 6: return "THREAD_DEFUNCT_ACK" | 
|  | 827 | +        else: return "UNKNOWN" | 
| 824 | 828 | else: return "UNKNOWN" | 
| 825 | 829 |  | 
| 826 |  | -    def blocktype2name(blocktype):
 | 
| 827 |  | -      if blocktype == 0: return "THREAD_NOT_BLOCKED"
 | 
| 828 |  | -      elif blocktype == 1: return "THREAD_BLOCK_SLEEP"
 | 
| 829 |  | -      elif blocktype == 2: return "THREAD_BLOCK_MUTEX"
 | 
| 830 |  | -      elif blocktype == 3: return "THREAD_BLOCK_WAKEUP"
 | 
| 831 |  | -      elif blocktype == 4: return "THREAD_DEFUNCT_STKOV"
 | 
| 832 |  | -      elif blocktype == 5: return "THREAD_DEFUNCT_PANIC"
 | 
|  | 830 | +    def blocktype2name(blocktype, structver): | 
|  | 831 | +      if structver == 1: | 
|  | 832 | +        if blocktype == 0: return "THREAD_NOT_BLOCKED" | 
|  | 833 | +        elif blocktype == 1: return "THREAD_BLOCK_SLEEP" | 
|  | 834 | +        elif blocktype == 2: return "THREAD_BLOCK_MUTEX" | 
|  | 835 | +        elif blocktype == 3: return "THREAD_BLOCK_WAKEUP" | 
|  | 836 | +        elif blocktype == 4: return "THREAD_DEFUNCT_STKOV" | 
|  | 837 | +        elif blocktype == 5: return "THREAD_DEFUNCT_PANIC" | 
|  | 838 | +        else: return "UNKNOWN" | 
| 833 | 839 | else: return "UNKNOWN" | 
| 834 | 840 |  | 
| 835 |  | -    def threadtype2name (threadtype):
 | 
| 836 |  | -      if threadtype == 0: return "USER_THREAD"
 | 
| 837 |  | -      elif threadtype == 1: return "SYSTEM_THREAD"
 | 
|  | 841 | +    def threadtype2name (threadtype, structver): | 
|  | 842 | +      if structver == 1: | 
|  | 843 | +        if threadtype == 0: return "USER_THREAD" | 
|  | 844 | +        elif threadtype == 1: return "OS_THREAD" | 
|  | 845 | +        elif threadtype == 2: return "CORE_THREAD" | 
|  | 846 | +        else: return "UNKNOWN" | 
| 838 | 847 | else: return "UNKNOWN" | 
| 839 | 848 |  | 
| 840 | 849 | def procinfotostring(procinfolist, structver): | 
| — | — | @@ -850,7 +859,7 @@ | 
| 851 | 860 | + "R12: 0x%08x, SP: 0x%08x,  LR: 0x%08x,  PC: 0x%08x\n" \ | 
| 852 | 861 | % (procinfolist[ptr]['regs'][12], procinfolist[ptr]['regs'][13], procinfolist[ptr]['regs'][14], procinfolist[ptr]['regs'][15]) | 
| 853 | 862 | processinfoprint += "cpsr: 0x%08x      " %             (procinfolist[ptr]['cpsr']) | 
| 854 |  | -        processinfoprint += "state: %s      " %                 (state2name([procinfolist[ptr]['state']]))
 | 
|  | 863 | +        processinfoprint += "state: %s      " %                 (state2name([procinfolist[ptr]['state']], structver)) | 
| 855 | 864 | processinfoprint += "nameptr: 0x%08x\n" %               (procinfolist[ptr]['name_ptr']) | 
| 856 | 865 | processinfoprint += "current cpu time: 0x%08x      " %  (procinfolist[ptr]['cputime_current']) | 
| 857 | 866 | processinfoprint += "total cpu time: 0x%016x\n" %       (procinfolist[ptr]['cputime_total']) | 
| — | — | @@ -860,8 +869,8 @@ | 
| 861 | 870 | processinfoprint += "blocked since: 0x%08x      " %     (procinfolist[ptr]['blocked_since']) | 
| 862 | 871 | processinfoprint += "blocked by ptr: 0x%08x\n" %        (procinfolist[ptr]['blocked_by_ptr']) | 
| 863 | 872 | processinfoprint += "err_no: 0x%08x      " %            (procinfolist[ptr]['err_no']) | 
| 864 |  | -        processinfoprint += "block type: %s\n" %                (blocktype2name([procinfolist[ptr]['block_type']]))
 | 
| 865 |  | -        processinfoprint += "thread type: %s\n" %               (threadtype2name([procinfolist[ptr]['thread_type']]))
 | 
|  | 873 | +        processinfoprint += "block type: %s\n" %                (blocktype2name([procinfolist[ptr]['block_type']], structver)) | 
|  | 874 | +        processinfoprint += "thread type: %s\n" %               (threadtype2name([procinfolist[ptr]['thread_type']], structver)) | 
| 866 | 875 | processinfoprint += "priority: 0x%02x      " %          (procinfolist[ptr]['priority']) | 
| 867 | 876 | processinfoprint += "cpu load: 0x%02x\n" %              (procinfolist[ptr]['cpuload']) | 
| 868 | 877 |  | 
| — | — | @@ -871,7 +880,7 @@ | 
| 872 | 881 |  | 
| 873 | 882 | return processinfoprint | 
| 874 | 883 |  | 
| 875 |  | - 
 | 
|  | 884 | +    # reading code -------------------------------------------------- | 
| 876 | 885 | self.__myprint("Retrieving process information...", silent) | 
| 877 | 886 |  | 
| 878 | 887 | offset = 0 |