mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2024-12-05 13:24:11 +01:00
97 lines
2.1 KiB
Python
97 lines
2.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
# This file is Copyright 2009, 2010 Dean Hall.
|
|
#
|
|
# This file is part of the Python-on-a-Chip program.
|
|
# Python-on-a-Chip is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
|
|
#
|
|
# Python-on-a-Chip is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
# A copy of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1
|
|
# is seen in the file COPYING in this directory.
|
|
|
|
"""
|
|
PyMite Object Descriptor Decoder
|
|
================================
|
|
|
|
Decodes an object descriptor value into its bit fields.
|
|
"""
|
|
|
|
## @file
|
|
# @copybrief pmOldDecoder
|
|
|
|
## @package pmOldDecoder
|
|
# @brief PyMite Object Descriptor Decoder
|
|
#
|
|
# Decodes an object descriptor value into its bit fields.
|
|
|
|
|
|
import sys, pprint
|
|
|
|
|
|
__usage__ = """USAGE:
|
|
./pmOdDecoder.py odvalue
|
|
"""
|
|
|
|
|
|
TYPES = (
|
|
'OBJ_TYPE_NON',
|
|
'OBJ_TYPE_INT',
|
|
'OBJ_TYPE_FLT',
|
|
'OBJ_TYPE_STR',
|
|
'OBJ_TYPE_TUP',
|
|
'OBJ_TYPE_COB',
|
|
'OBJ_TYPE_MOD',
|
|
'OBJ_TYPE_CLO',
|
|
'OBJ_TYPE_FXN',
|
|
'OBJ_TYPE_CLI',
|
|
'OBJ_TYPE_CIM',
|
|
'OBJ_TYPE_NIM',
|
|
'OBJ_TYPE_NOB',
|
|
'OBJ_TYPE_THR',
|
|
0x0E,
|
|
'OBJ_TYPE_BOOL',
|
|
'OBJ_TYPE_CIO',
|
|
'OBJ_TYPE_MTH',
|
|
'OBJ_TYPE_LST',
|
|
'OBJ_TYPE_DIC',
|
|
0x14,0x15,0x16,0x17,0x18,
|
|
'OBJ_TYPE_FRM',
|
|
'OBJ_TYPE_BLK',
|
|
'OBJ_TYPE_SEG',
|
|
'OBJ_TYPE_SGL',
|
|
'OBJ_TYPE_SQI',
|
|
'OBJ_TYPE_NFM',
|
|
)
|
|
|
|
|
|
def od_decode(odvalue):
|
|
return {
|
|
"val": odvalue,
|
|
"size": (odvalue & 0x001F) * 4,
|
|
"type": TYPES[(odvalue & 0x3E00) >> 9],
|
|
"mark": (odvalue & 0x4000) >> 14,
|
|
"free": (odvalue & 0x8000) >> 15,
|
|
}
|
|
|
|
|
|
def to_int(s):
|
|
if s.startswith("0x"):
|
|
return int(s, 16)
|
|
return int(s)
|
|
|
|
|
|
def main():
|
|
odvalues = sys.argv[1:]
|
|
odvalues = map(to_int, odvalues)
|
|
ods = map(od_decode, odvalues)
|
|
for od in ods:
|
|
print("%d (0x%04x): %s[%d], f=%d, m=%d"
|
|
% (od['val'], od['val'], od['type'], od['size'], od['free'], od['mark']))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|