mirror of
https://github.com/pentoo/pentoo-overlay
synced 2026-01-16 05:06:08 +01:00
9101 lines
363 KiB
Diff
9101 lines
363 KiB
Diff
From 638d7bac7b608b64d01e3d7879c1125eb60a7d22 Mon Sep 17 00:00:00 2001
|
|
From: PlantDaddy <CqP5TZ77NYBf5uQt@protonmail.com>
|
|
Date: Fri, 10 Apr 2020 23:00:54 -0500
|
|
Subject: [PATCH 1/4] Updated code to be Python 3 compliant and a Python 3
|
|
package could be built successfully, fixed some bugs, found some possible
|
|
bugs, tightened code to be more in-line with the PEP8 style guide (thus
|
|
improving pylint score), made this so it should be python 2 and 3 compatible.
|
|
|
|
---
|
|
.gitignore | 1 +
|
|
CC-Bootloader/rfcat_bootloader | 177 +++++-----
|
|
package.sh | 1 +
|
|
requirements.txt | 1 +
|
|
rfcat | 19 +-
|
|
rfcat_msfrelay | 127 ++++----
|
|
rfcat_server | 58 ++--
|
|
rflib/__init__.py | 41 +--
|
|
rflib/bits.py | 319 +++++++++---------
|
|
rflib/cc111Xhparser.py | 65 ++--
|
|
rflib/ccrecvdump.py | 8 +-
|
|
rflib/ccspecan.py | 84 ++---
|
|
rflib/chipcon_nic.py | 568 ++++++++++++++++-----------------
|
|
rflib/chipcon_usb.py | 2 +-
|
|
rflib/chipcondefs.py | 4 +-
|
|
rflib/const.py | 3 +-
|
|
rflib/intelhex.py | 205 ++++++------
|
|
rflib/rflib_version.py | 2 +-
|
|
setup.py | 7 +-
|
|
tests/test_basics.py | 4 +-
|
|
tests/test_fakedongle.py | 36 ++-
|
|
21 files changed, 884 insertions(+), 848 deletions(-)
|
|
|
|
diff --git a/.gitignore b/.gitignore
|
|
index 368fb11..b463531 100644
|
|
--- a/.gitignore
|
|
+++ b/.gitignore
|
|
@@ -46,3 +46,4 @@ venv/
|
|
ENV/
|
|
env.bak/
|
|
venv.bak/
|
|
+.idea/
|
|
diff --git a/CC-Bootloader/rfcat_bootloader b/CC-Bootloader/rfcat_bootloader
|
|
index 7a040b5..34fdf8c 100755
|
|
--- a/CC-Bootloader/rfcat_bootloader
|
|
+++ b/CC-Bootloader/rfcat_bootloader
|
|
@@ -7,43 +7,45 @@ from serial.serialutil import SerialException
|
|
|
|
|
|
bootloader_error_codes = {
|
|
- '0' : "OK",
|
|
- '1' : "Intel HEX Invalid",
|
|
- '2' : "Bad Checksum",
|
|
- '3' : "Bad Address",
|
|
- '4' : "Bad Record Type",
|
|
- '5' : "Record Too Long"
|
|
+ '0': "OK",
|
|
+ '1': "Intel HEX Invalid",
|
|
+ '2': "Bad Checksum",
|
|
+ '3': "Bad Address",
|
|
+ '4': "Bad Record Type",
|
|
+ '5': "Record Too Long"
|
|
}
|
|
|
|
+
|
|
def download_code(ihx_file, serial_port):
|
|
for line in ihx_file.readlines():
|
|
record_type = int(line[7:9], 16)
|
|
- if (record_type == 0x00):
|
|
- print "Writing", line[:-1],
|
|
+ if record_type == 0x00:
|
|
+ print("Writing {}".format(line[:-1]))
|
|
serial_port.write(line)
|
|
rc = serial_port.read()
|
|
- print " RC =", rc,
|
|
+ print(" RC = {}".format(rc))
|
|
if rc in bootloader_error_codes:
|
|
- print "(%s)" % bootloader_error_codes[rc]
|
|
+ print("(%s)".format(bootloader_error_codes[rc]))
|
|
else:
|
|
- print "(Unknown Error)"
|
|
- if (rc != '0'):
|
|
- print "Error downloading code!"
|
|
+ print("(Unknown Error)")
|
|
+ if rc != '0':
|
|
+ print("Error downloading code!")
|
|
return False
|
|
else:
|
|
- print "Skipping non data record: '%s'" % line[:-1]
|
|
+ print("Skipping non data record: '%s'".format(line[:-1]))
|
|
return True
|
|
|
|
+
|
|
def verify_code(ihx_file, serial_port):
|
|
- can_read_any= None
|
|
+ can_read_any = None
|
|
for line in ihx_file.readlines():
|
|
record_type = int(line[7:9], 16)
|
|
- if (record_type == 0x00):
|
|
+ if record_type == 0x00:
|
|
length = int(line[1:3], 16)
|
|
start_addr = int(line[3:7], 16)
|
|
data = line[9:9+(length*2)]
|
|
# first time around, check if we can only read 16 byte chunks
|
|
- if can_read_any == None:
|
|
+ if can_read_any is None:
|
|
can_read_any = False
|
|
do_flash_read(serial_port, start_addr, 1)
|
|
for read_data in serial_port:
|
|
@@ -55,82 +57,87 @@ def verify_code(ihx_file, serial_port):
|
|
else:
|
|
break
|
|
if not can_read_any:
|
|
- print "*** warning! this version of CC-Bootloader can only read 16 byte blocks!"
|
|
- print "*** upgrade recommended!"
|
|
+ print("*** warning! this version of CC-Bootloader can only read 16 byte blocks!")
|
|
+ print("*** upgrade recommended!")
|
|
if can_read_any:
|
|
- block_length= length
|
|
+ block_length = length
|
|
else:
|
|
- block_length= ((length / 16) + 1) * 16
|
|
- print "\rVerifying %04d bytes at address: %04X" % (length, start_addr),
|
|
+ block_length = ((length / 16) + 1) * 16
|
|
+ print("\rVerifying %04d bytes at address: %04X".format(length, start_addr))
|
|
do_flash_read(serial_port, start_addr, block_length)
|
|
- verify_data= ''
|
|
+ verify_data = ''
|
|
for read_data in serial_port:
|
|
- read_data= read_data.strip()
|
|
- if (not data or read_data == ":00000001FF"):
|
|
+ read_data = read_data.strip()
|
|
+ if not data or read_data == ":00000001FF":
|
|
break
|
|
# strip header and checksum
|
|
verify_data += read_data[9:-2]
|
|
- if (data == verify_data[:length*2]):
|
|
- print '(OK)',
|
|
+ if data == verify_data[:length * 2]:
|
|
+ print('(OK) ')
|
|
else:
|
|
- print 'Failed! Expected:', data, 'Got:', verify_data[:length*2]
|
|
+ print('Failed! Expected: ' + str(data) + ' Got: ' + str(verify_data[:length*2]))
|
|
exit(1)
|
|
sys.stdout.flush()
|
|
else:
|
|
- print "Skipping non data record: '%s'" % line[:-1]
|
|
+ print("Skipping non data record: '{}'".format(line[:-1]))
|
|
return True
|
|
|
|
+
|
|
def run_user_code(serial_port):
|
|
# User code is entered on intel HEX EOF record
|
|
serial_port.write(":00000001FF\n")
|
|
return True
|
|
-
|
|
+
|
|
+
|
|
def reset_bootloader(serial_port):
|
|
serial_port.write(":00000022DE\n")
|
|
rc = serial_port.read()
|
|
- print "RC =", rc,
|
|
+ print("RC = {}".format(rc))
|
|
if rc in bootloader_error_codes:
|
|
- print "(%s)" % bootloader_error_codes[rc]
|
|
+ print("(%s)".format(bootloader_error_codes[rc]))
|
|
else:
|
|
- print "(Unknown Error)"
|
|
- if (rc != '0'):
|
|
- print "Error resetting bootloader!"
|
|
+ print("(Unknown Error)")
|
|
+ if rc != '0':
|
|
+ print("Error resetting bootloader!")
|
|
return False
|
|
return True
|
|
|
|
+
|
|
def erase_all_user(serial_port):
|
|
serial_port.write(":00000023DD\n")
|
|
rc = serial_port.read()
|
|
- print "RC =", rc,
|
|
+ print("RC = ".format(rc))
|
|
if rc in bootloader_error_codes:
|
|
- print "(%s)" % bootloader_error_codes[rc]
|
|
+ print("(%s)".format(bootloader_error_codes[rc]))
|
|
else:
|
|
- print "(Unknown Error)"
|
|
- if (rc != '0'):
|
|
- print "Error erasing all user flash!"
|
|
+ print("(Unknown Error)")
|
|
+ if rc != '0':
|
|
+ print("Error erasing all user flash!")
|
|
return False
|
|
return True
|
|
-
|
|
+
|
|
+
|
|
def erase_user_page(serial_port, page):
|
|
chksum = (0xDB + 0x100 - page) & 0xFF
|
|
serial_port.write(":01000024%02X%02X\n" % (page, chksum))
|
|
rc = serial_port.read()
|
|
- print "RC =", rc,
|
|
+ print("RC = ".format(rc))
|
|
if rc in bootloader_error_codes:
|
|
- print "(%s)" % bootloader_error_codes[rc]
|
|
+ print("(%s)".format(bootloader_error_codes[rc]))
|
|
else:
|
|
- print "(Unknown Error)"
|
|
- if (rc != '0'):
|
|
- print "Error erasing user flash page!"
|
|
+ print("(Unknown Error)")
|
|
+ if rc != '0':
|
|
+ print("Error erasing user flash page!")
|
|
return False
|
|
return True
|
|
|
|
+
|
|
def do_flash_read(serial_port, start_addr, length):
|
|
- chksum = (0xD9 +
|
|
+ chksum = (0xD9 +
|
|
(0x100 - (start_addr & 0xFF)) +
|
|
- (0x100 - ((start_addr>>8) & 0xFF)) +
|
|
+ (0x100 - ((start_addr >> 8) & 0xFF)) +
|
|
(0x100 - (length & 0xFF)) +
|
|
- (0x100 - ((length>>8) & 0xFF))
|
|
+ (0x100 - ((length >> 8) & 0xFF))
|
|
) & 0xFF
|
|
serial_port.write(":02%04X25%04X%02X\n" % (start_addr, length, chksum))
|
|
|
|
@@ -139,16 +146,17 @@ def flash_read(ihx_file, serial_port, start_addr, length):
|
|
do_flash_read(serial_port, start_addr, length)
|
|
for line in serial_port:
|
|
if not line == "\n":
|
|
- if(ihx_file):
|
|
+ if ihx_file:
|
|
ihx_file.write(line)
|
|
else:
|
|
- print line,
|
|
- if (line == ":00000001FF\n"):
|
|
+ print(line)
|
|
+ if line == ":00000001FF\n":
|
|
break
|
|
|
|
+
|
|
def print_usage():
|
|
import sys
|
|
- print """
|
|
+ print("""
|
|
CC Bootloader Download Utility
|
|
|
|
Usage: %s serial_port command
|
|
@@ -193,14 +201,15 @@ Commands:
|
|
verify <hex_file>
|
|
|
|
Verify hex_file matches device flash memory.
|
|
- """ % sys.argv[0]
|
|
+ """ % sys.argv[0])
|
|
+
|
|
|
|
if __name__ == '__main__':
|
|
import sys
|
|
- if (len(sys.argv) < 3):
|
|
+ if len(sys.argv) < 3:
|
|
print_usage()
|
|
sys.exit(1)
|
|
-
|
|
+
|
|
serial_port_name = sys.argv[1]
|
|
command = sys.argv[2]
|
|
options = sys.argv[3:]
|
|
@@ -210,59 +219,61 @@ if __name__ == '__main__':
|
|
serial_port = serial.Serial(serial_port_name, timeout=1)
|
|
break
|
|
|
|
- except SerialException,e:
|
|
- print "\nSomething is talking to the RfCat dongle (Modem Manager, most likely). Retrying again after 5 seconds. This can take a minute, please be patient. (error: %r)" % e
|
|
+ except SerialException as e:
|
|
+ print("\nSomething is talking to the RfCat dongle (Modem Manager, most"
|
|
+ "likely). Retrying again after 5 seconds. This can take a "
|
|
+ "minute, please be patient. (error: {})".format(e))
|
|
time.sleep(6)
|
|
except KeyboardInterrupt:
|
|
- print "Caught <CTRL-C>, exitting..."
|
|
- exit (-2)
|
|
- except Exception,e:
|
|
+ print("Caught <CTRL-C>, exitting...")
|
|
+ exit(-2)
|
|
+ except Exception as e:
|
|
sys.excepthook(*sys.exc_info())
|
|
- print e
|
|
- exit (-1)
|
|
-
|
|
+ print(e)
|
|
+ exit(-1)
|
|
+
|
|
try:
|
|
- if (command == 'download' or command == 'verify'):
|
|
- if (len(options) < 1):
|
|
+ if command == 'download' or command == 'verify':
|
|
+ if len(options) < 1:
|
|
print_usage()
|
|
else:
|
|
ihx_filename = options[0]
|
|
ihx_file = open(ihx_filename, 'r')
|
|
- if (command == 'download'):
|
|
+ if command == 'download':
|
|
download_code(ihx_file, serial_port)
|
|
else:
|
|
verify_code(ihx_file, serial_port)
|
|
-
|
|
- elif (command == 'run'):
|
|
+
|
|
+ elif command == 'run':
|
|
run_user_code(serial_port)
|
|
-
|
|
- elif (command == 'reset'):
|
|
+
|
|
+ elif command == 'reset':
|
|
reset_bootloader(serial_port)
|
|
-
|
|
- elif (command == 'erase_all'):
|
|
+
|
|
+ elif command == 'erase_all':
|
|
erase_all_user(serial_port)
|
|
-
|
|
- elif (command == 'erase'):
|
|
- if (len(options) < 1):
|
|
+
|
|
+ elif command == 'erase':
|
|
+ if len(options) < 1:
|
|
print_usage()
|
|
else:
|
|
erase_user_page(serial_port, int(options[0]))
|
|
-
|
|
- elif (command == 'read'):
|
|
- if (len(options) < 2):
|
|
+
|
|
+ elif command == 'read':
|
|
+ if len(options) < 2:
|
|
print_usage()
|
|
else:
|
|
ihx_file = None
|
|
- if(len(options) == 3):
|
|
+ if len(options) == 3:
|
|
try:
|
|
ihx_filename = options[2]
|
|
ihx_file = open(ihx_filename, 'w')
|
|
- print 'reading to:', ihx_filename
|
|
+ print('reading to: {}'.format(ihx_filename))
|
|
except:
|
|
- print "couldn't open output file:", ihx_filename
|
|
+ print("couldn't open output file: {}".format(ihx_filename))
|
|
exit(2)
|
|
flash_read(ihx_file, serial_port, int(options[0], 16), int(options[1], 16))
|
|
-
|
|
+
|
|
else:
|
|
print_usage()
|
|
finally:
|
|
diff --git a/package.sh b/package.sh
|
|
index e34e334..6400abe 100755
|
|
--- a/package.sh
|
|
+++ b/package.sh
|
|
@@ -1,3 +1,4 @@
|
|
+#!/usr/bin/env bash
|
|
echo "=== set revision: `./revision.sh` ==="
|
|
|
|
if ( which sdcc )
|
|
diff --git a/requirements.txt b/requirements.txt
|
|
index 98ab555..3f68644 100644
|
|
--- a/requirements.txt
|
|
+++ b/requirements.txt
|
|
@@ -1,3 +1,4 @@
|
|
+pyserial
|
|
PySide2
|
|
pyusb
|
|
future
|
|
diff --git a/rfcat b/rfcat
|
|
index 30a3e53..6c13457 100755
|
|
--- a/rfcat
|
|
+++ b/rfcat
|
|
@@ -10,7 +10,7 @@ readline.parse_and_bind("tab: complete")
|
|
|
|
from rflib import *
|
|
|
|
-logging.basicConfig(level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s')
|
|
+logging.basicConfig(level=logging.DEBUG, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}')
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
@@ -34,20 +34,26 @@ if __name__ == "__main__":
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser()
|
|
- parser.add_argument('-r', '--research', default=False, action="store_true", help='Interactive Python and the "d" instance to talk to your dongle. melikey longtime.')
|
|
+ parser.add_argument('-r', '--research', default=False, action="store_true", help='Interactive Python and the "d" '
|
|
+ 'instance to talk to your dongle. '
|
|
+ ' melikey longtime.')
|
|
parser.add_argument('-i', '--index', default=0, type=int)
|
|
parser.add_argument('-s', '--specan', default=False, action="store_true", help='start spectrum analyzer')
|
|
parser.add_argument('-f', '--centfreq', default=902e6, type=float)
|
|
parser.add_argument('-c', '--inc', default=250e3, type=float)
|
|
parser.add_argument('-n', '--specchans', default=104, type=int)
|
|
- parser.add_argument('--bootloader', default=False, action="store_true", help='trigger the bootloader (use in order to flash the dongle)')
|
|
- parser.add_argument('--force', default=False, action="store_true", help='use this to make sure you want to set bootloader mode (you *must* flash after setting --bootloader)')
|
|
+ parser.add_argument('--bootloader', default=False, action="store_true", help='trigger the bootloader (use in order '
|
|
+ 'to flash the dongle)')
|
|
+ parser.add_argument('--force', default=False, action="store_true", help='use this to make sure you want to set '
|
|
+ 'bootloader mode (you *must* flash after '
|
|
+ 'setting --bootloader)')
|
|
|
|
ifo = parser.parse_args()
|
|
|
|
if ifo.bootloader:
|
|
if not ifo.force:
|
|
- print("Protecting you from yourself. If you want to trigger Bootloader mode (you will then *have* to flash a new RfCat image on it) use the --force argument as well")
|
|
+ print("Protecting you from yourself. If you want to trigger Bootloader mode (you will then *have* to "
|
|
+ "flash a new RfCat image on it) use the --force argument as well")
|
|
exit(-1)
|
|
|
|
print("Entering RfCat Bootloader mode, ready for new image...")
|
|
@@ -55,7 +61,7 @@ if __name__ == "__main__":
|
|
exit(0)
|
|
|
|
elif ifo.specan:
|
|
- RfCat(ifo.index).specan(ifo.centfreq,ifo.inc,ifo.specchans)
|
|
+ RfCat(ifo.index).specan(ifo.centfreq, ifo.inc, ifo.specchans)
|
|
|
|
elif ifo.research:
|
|
interactive(ifo.index, DongleClass=RfCat, intro=intro)
|
|
@@ -64,4 +70,3 @@ if __name__ == "__main__":
|
|
# do the full-rfcat thing
|
|
d = RfCat(ifo.index, debug=False)
|
|
d.rf_redirection((sys.stdin, sys.stdout))
|
|
-
|
|
diff --git a/rfcat_msfrelay b/rfcat_msfrelay
|
|
index a682165..800de1d 100644
|
|
--- a/rfcat_msfrelay
|
|
+++ b/rfcat_msfrelay
|
|
@@ -13,8 +13,8 @@ import base64
|
|
import socket
|
|
import threading
|
|
|
|
-from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer
|
|
-from urlparse import parse_qs,urlparse
|
|
+from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
|
+from urlparse import parse_qs, urlparse
|
|
from rflib import *
|
|
|
|
# Global Nic used for MSFHandler
|
|
@@ -26,6 +26,7 @@ last_sent = 0
|
|
username = None
|
|
password = None
|
|
|
|
+
|
|
class MSFHandler(BaseHTTPRequestHandler):
|
|
def status(self):
|
|
status = {}
|
|
@@ -37,7 +38,7 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
except:
|
|
hw_version = "not supported"
|
|
status["operational"] = 1 # Possibly connect this to ping?
|
|
- status["hw_specialty"] = { "rftransceiver": True }
|
|
+ status["hw_specialty"] = { "rftransceiver": True}
|
|
status["hw_capabilities"] = { "cc11xx": True}
|
|
status["last_10_errors"] = last_errors
|
|
status["api_version"] = "0.0.2"
|
|
@@ -55,33 +56,34 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
return stats
|
|
|
|
def datetime(self):
|
|
- return { "sytem_datetime": int(time.time()) }
|
|
+ return {"sytem_datetime": int(time.time())}
|
|
|
|
def timezone(self):
|
|
- return { "system_timezone": time.strftime("%Z") }
|
|
+ return {"system_timezone": time.strftime("%Z")}
|
|
|
|
def supported_idx(self):
|
|
- return { "indexes": [ nic.idx ] }
|
|
+ return {"indexes": [nic.idx]}
|
|
|
|
def reset(self):
|
|
nic.resetup()
|
|
- return { "status": "Resetting" }
|
|
+ return {"status": "Resetting"}
|
|
|
|
def set_freq(self, args):
|
|
mhz = 24
|
|
- if not "freq" in args:
|
|
+ if "freq" not in args:
|
|
return self.not_supported()
|
|
if "mhz" in args:
|
|
mhz = int(args["mhz"])
|
|
nic.setFreq(int(args["freq"][0]), mhz)
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def get_modulations(self):
|
|
- mods = [ "2FSK", "GFSK", "4FSK", "ASK/OOK", "MSK", "2FSK/Manchester", "GFSK/Manchester", "ASK/OOK/Manchester", "MSK/Manchester" ]
|
|
+ mods = ["2FSK", "GFSK", "4FSK", "ASK/OOK", "MSK", "2FSK/Manchester", "GFSK/Manchester", "ASK/OOK/Manchester",
|
|
+ "MSK/Manchester"]
|
|
return mods
|
|
|
|
def set_modulation(self, args):
|
|
- if not "mod" in args:
|
|
+ if "mod" not in args:
|
|
return self.not_supported()
|
|
modvalue = -1
|
|
for modv, modstr in MODULATIONS.items():
|
|
@@ -92,31 +94,31 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
try:
|
|
nic.setMdmModulation(modvalue)
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
# Fixed Len
|
|
def make_packet_flen(self, args):
|
|
- if not "len" in args:
|
|
+ if "len" not in args:
|
|
return self.not_supported()
|
|
try:
|
|
nic.makePktFLEN(int(args["len"][0]))
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
# Variable Len
|
|
def make_packet_vlen(self, args):
|
|
- if not "len" in args:
|
|
+ if "len" not in args:
|
|
return self.not_supported()
|
|
try:
|
|
nic.makePktVLEN(int(args["len"][0]))
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
def set_mode(self, args):
|
|
- if not "mode" in args:
|
|
+ if "mode" not in args:
|
|
return self.not_supported()
|
|
mode = args["mode"][0]
|
|
if mode == "TX" or mode == "tx":
|
|
@@ -127,21 +129,21 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
nic.setModeIDLE()
|
|
else:
|
|
return self.not_supported()
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def enablePktCRC(self):
|
|
nic.setEnablePktCRC()
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def enableManchester(self):
|
|
nic.setEnableMdmManchester()
|
|
- return { "success": True}
|
|
+ return {"success": True}
|
|
|
|
def set_channel(self, args):
|
|
- if not "channel" in args:
|
|
+ if "channel" not in args:
|
|
return self.not_supported()
|
|
nic.setChannel(int(args["channel"]))
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_channel_bandwidth(self, args):
|
|
mhz = 24
|
|
@@ -150,7 +152,7 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
if "mhz" in args:
|
|
mhz = int(args["mhz"][0])
|
|
nic.setMdmChanBW(int(args["bw"]), mhz)
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_channel_spc(self, args):
|
|
chanspc = None
|
|
@@ -166,69 +168,69 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
try:
|
|
nic.setMdmChanSpc(chanspc, chanspc_m, chanspc_e, mhz)
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
def set_baud_rate(self, args):
|
|
mhz = 24
|
|
- if not "rate" in args:
|
|
+ if "rate" not in args:
|
|
return self.not_supported()
|
|
if "mhz" in args:
|
|
mhz = int(args["mhz"][0])
|
|
try:
|
|
nic.setMdmDRate(int(args["rate"][0]), mhz)
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
def set_deviation(self, args):
|
|
mhz = 24
|
|
- if not "deviat" in args:
|
|
+ if "deviat" not in args:
|
|
return self.not_supported()
|
|
if "mhz" in args:
|
|
mhz = int(args["mhz"][0])
|
|
try:
|
|
nic.setMdmDeviatn(int(args["deviat"][0]), mhz)
|
|
except:
|
|
- return { "success": False }
|
|
- return { "success": True }
|
|
+ return {"success": False}
|
|
+ return {"success": True}
|
|
|
|
def set_sync_word(self, args):
|
|
- if not "word" in args:
|
|
+ if "word" not in args:
|
|
return self.not_supported()
|
|
nic.setMdmSyncWord(int(args["word"][0]))
|
|
- return { "success": True}
|
|
+ return {"success": True}
|
|
|
|
def set_sync_mode(self, args):
|
|
- if not "mode" in args:
|
|
+ if "mode" not in args:
|
|
return self.not_supported()
|
|
nic.setMdmSyncMode(int(args["mode"][0]))
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_number_preamble(self, args):
|
|
- if not "num" in args:
|
|
+ if "num" not in args:
|
|
return self.not_supported()
|
|
nic.setMdmNumPreamble(int(args["num"][0]))
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_lowball(self):
|
|
nic.lowball(1)
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_maxpower(self):
|
|
nic.setMaxPower()
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def set_power(self, args):
|
|
- if not "power" in args:
|
|
+ if "power" not in args:
|
|
return self.not_supported()
|
|
nic.setPower(int(args["power"][0]))
|
|
- return { "success": True }
|
|
+ return {"success": True}
|
|
|
|
def rfxmit(self, args):
|
|
repeat = 0
|
|
offset = 0
|
|
- if not "data" in args:
|
|
+ if "data" not in args:
|
|
return self.not_supported()
|
|
if "repeat" in args:
|
|
repeat = int(args["repeat"][0])
|
|
@@ -236,11 +238,11 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
offset = int(args["offset"][0])
|
|
data = base64.urlsafe_b64decode(args["data"][0])
|
|
nic.RFxmit(data, repeat, offset)
|
|
- return { "success": True } # Should do some checks here eventually
|
|
+ return {"success": True} # Should do some checks here eventually
|
|
|
|
def rfrecv(self, args):
|
|
- timeout=USB_RX_WAIT
|
|
- blocksize=None
|
|
+ timeout = USB_RX_WAIT
|
|
+ blocksize =None
|
|
if "timeout" in args:
|
|
timeout = int(args["timeout"][0])
|
|
if "blocksize" in args:
|
|
@@ -250,15 +252,14 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
except:
|
|
return {}
|
|
msg, ts = data
|
|
- return { "data": base64.urlsafe_b64encode(msg), "timestamp": ts }
|
|
-
|
|
+ return {"data": base64.urlsafe_b64encode(msg), "timestamp": ts}
|
|
|
|
def not_supported(self):
|
|
- return { "status": "not supported" }
|
|
+ return {"status": "not supported"}
|
|
|
|
def send(self, data, resp=200):
|
|
self.send_response(resp)
|
|
- self.send_header('Content-type','application/json')
|
|
+ self.send_header('Content-type', 'application/json')
|
|
self.end_headers()
|
|
self.wfile.write(json.dumps(data))
|
|
return
|
|
@@ -271,8 +272,8 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
self.wfile.write("Please Authenticate")
|
|
|
|
def do_GET(self):
|
|
- if not password == None:
|
|
- if self.headers.getheader('Authorization') == None:
|
|
+ if not password is None:
|
|
+ if self.headers.getheader('Authorization') is None:
|
|
print("Did not authenticate")
|
|
self.do_AUTHHEAD()
|
|
return
|
|
@@ -282,23 +283,23 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
return
|
|
url = urlparse(self.path)
|
|
args = parse_qs(url.query)
|
|
- if self.path=="/status":
|
|
+ if self.path == "/status":
|
|
self.send(self.status())
|
|
- elif self.path=="/statistics":
|
|
+ elif self.path == "/statistics":
|
|
self.send(self.statistics())
|
|
- elif self.path=="/settings/datetime":
|
|
+ elif self.path == "/settings/datetime":
|
|
self.send(self.datetime())
|
|
- elif self.path=="/settings/timezone":
|
|
+ elif self.path == "/settings/timezone":
|
|
self.send(self.timezone())
|
|
- elif self.path=="/control/factory_reset":
|
|
+ elif self.path == "/control/factory_reset":
|
|
self.send(self.reset())
|
|
- elif self.path=="/rftransceiver/supported_idx":
|
|
+ elif self.path == "/rftransceiver/supported_idx":
|
|
self.send(self.supported_idx())
|
|
elif self.path.startswith("/rftransceiver/"):
|
|
re_idx = re.compile("/rftransceiver/(\d+)/")
|
|
m = re_idx.match(self.path)
|
|
if m:
|
|
- idx = m.group(1)
|
|
+ idx = m.group(1) # FIXME idx isn't used, remove?
|
|
if self.path.find("/set_freq?") > -1:
|
|
self.send(self.set_freq(args))
|
|
elif self.path.find("/get_modulations") > -1:
|
|
@@ -349,6 +350,7 @@ class MSFHandler(BaseHTTPRequestHandler):
|
|
self.send(self.not_supported(), 404)
|
|
return
|
|
|
|
+
|
|
class CC1111NIC_MSFRelay(cmd.Cmd):
|
|
intro = """
|
|
cc1111usb Metasploit Relay
|
|
@@ -375,7 +377,7 @@ class CC1111NIC_MSFRelay(cmd.Cmd):
|
|
try:
|
|
buf = ''
|
|
self._nicsock = HTTPServer((self._ip, self._nicport), MSFHandler)
|
|
- starttime = int(time.time())
|
|
+ starttime = int(time.time()) # FIXME starttime isn't used, remove?
|
|
print("RfCat MSFRelay running.")
|
|
self._nicsock.serve_forever()
|
|
except KeyboardInterrupt:
|
|
@@ -386,7 +388,6 @@ class CC1111NIC_MSFRelay(cmd.Cmd):
|
|
sys.excepthook(*sys.exc_info())
|
|
|
|
|
|
-
|
|
if __name__ == "__main__":
|
|
import argparse
|
|
|
|
diff --git a/rfcat_server b/rfcat_server
|
|
index e64173f..350af57 100644
|
|
--- a/rfcat_server
|
|
+++ b/rfcat_server
|
|
@@ -13,6 +13,7 @@ from rflib import *
|
|
|
|
DATA_START_IDX = 4 # without the app/cmd/len bytes, the data starts at byte 4
|
|
|
|
+
|
|
def splitargs(cmdline):
|
|
cmdline = cmdline.replace('\\\\"', '"').replace('\\"', '')
|
|
patt = re.compile('\".+?\"|\S+')
|
|
@@ -38,6 +39,7 @@ SYNC_MODES = {
|
|
|
|
READLINE_MAX_READ_LEN = 1000
|
|
|
|
+
|
|
class FileSocket(socket.socket):
|
|
def __init__(self, sock):
|
|
self._buf = ''
|
|
@@ -48,7 +50,6 @@ class FileSocket(socket.socket):
|
|
return getattr(self._sock, attr)
|
|
elif hasattr(self, attr):
|
|
return getattr(self.__class__, attr)
|
|
-
|
|
|
|
def write(self, data):
|
|
return self.sendall(data)
|
|
@@ -67,7 +68,6 @@ class FileSocket(socket.socket):
|
|
|
|
return data
|
|
|
|
-
|
|
def flush(self):
|
|
pass
|
|
|
|
@@ -75,6 +75,7 @@ class FileSocket(socket.socket):
|
|
class KillCfgLoop(Exception):
|
|
pass
|
|
|
|
+
|
|
class CC1111NIC_Server(cmd.Cmd):
|
|
intro = """
|
|
welcome to the cc1111usb interactive config tool. hack fun!
|
|
@@ -85,7 +86,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
self.use_rawinput = rawinput
|
|
self.printable = printable
|
|
|
|
- #self.nic = FHSSNIC(nicidx)
|
|
+ # self.nic = FHSSNIC(nicidx)
|
|
self.nic = RfCat(nicidx)
|
|
self._ip = ip
|
|
self._nicport = nicport
|
|
@@ -105,7 +106,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
while self._go:
|
|
# serve the NIC port
|
|
try:
|
|
- buf = ''
|
|
+ buf = '' # FIXME buf isnt used, remove?
|
|
self._nicsock = socket.socket()
|
|
s = self._nicsock
|
|
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
@@ -114,7 +115,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
while True:
|
|
# implement pipe between the usb RF NIC and the TCP socket
|
|
try:
|
|
- print(("Listening for NIC connection on port %d" % self._nicport), file=sys.stderr)
|
|
+ print(("Listening for NIC connection on port {:d}".format(self._nicport)), file=sys.stderr)
|
|
self._nicsock = s.accept()
|
|
rs, addr = self._nicsock
|
|
rs.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
@@ -123,7 +124,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
# handing off the socket for rf_redirection, socket-style
|
|
self.nic.rf_redirection( (rs,) )
|
|
|
|
- print(("NIC connection on port %d terminated" % self._nicport), file=sys.stderr)
|
|
+ print(("NIC connection on port {:d} terminated".format(self._nicport)), file=sys.stderr)
|
|
|
|
except KeyboardInterrupt:
|
|
self._go = False
|
|
@@ -135,8 +136,6 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
except:
|
|
sys.excepthook(*sys.exc_info())
|
|
|
|
-
|
|
-
|
|
def startConfigThread(self):
|
|
self._cfgthread = threading.Thread(target=self._cfgRun)
|
|
self._cfgthread.setDaemon(True)
|
|
@@ -175,15 +174,13 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
#ok so just kill the connection :)
|
|
|
|
def Print(self, info):
|
|
- print((info), file=self.stdout)
|
|
-
|
|
+ print(info, file=self.stdout)
|
|
|
|
def do_stop(self, line):
|
|
"""
|
|
stop the nic
|
|
"""
|
|
self._pause = True
|
|
-
|
|
|
|
def do_start(self, line):
|
|
"""
|
|
@@ -197,10 +194,10 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
* SPECAN - spectrum analysis mode
|
|
'''
|
|
- basefreq=902e6
|
|
- inc=25e3
|
|
- count=104
|
|
- self.nic._doSpecAn(basefreq,inc,count)
|
|
+ basefreq = 902e6
|
|
+ inc = 25e3
|
|
+ count = 104
|
|
+ self.nic._doSpecAn(basefreq, inc, count)
|
|
|
|
def do_stopspecan(self,line):
|
|
'''
|
|
@@ -226,7 +223,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
self.Print("Calibrating radio...")
|
|
self.nic.setModeCAL()
|
|
- while (self.getMARCSTATE()[1] not in (MARC_STATE_IDLE, MARC_STATE_RX, MARC_STATE_TX)):
|
|
+ while self.getMARCSTATE()[1] not in (MARC_STATE_IDLE, MARC_STATE_RX, MARC_STATE_TX):
|
|
sys.stdout.write('.')
|
|
self.Print("done calibrating.")
|
|
|
|
@@ -238,7 +235,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
self.Print("Calibrating radio...")
|
|
self.nic.setModeTX()
|
|
- while (self.getMARCSTATE()[1] not in (MARC_STATE_TX)):
|
|
+ while self.getMARCSTATE()[1] not in MARC_STATE_TX:
|
|
sys.stdout.write('.')
|
|
self.Print("Radio has reached the TX state.")
|
|
|
|
@@ -252,7 +249,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
self.Print("Radio entering RX state...")
|
|
self.nic.setModeTX()
|
|
- while (self.getMARCSTATE()[1] not in (MARC_STATE_RX)):
|
|
+ while self.getMARCSTATE()[1] not in MARC_STATE_RX:
|
|
sys.stdout.write('.')
|
|
self.Print("Radio has reached the RX state.")
|
|
|
|
@@ -265,7 +262,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
self.Print("Radio entering IDLE state...")
|
|
self.nic.setModeIDLE()
|
|
- while (self.getMARCSTATE()[1] not in (MARC_STATE_IDLE)):
|
|
+ while self.getMARCSTATE()[1] not in MARC_STATE_IDLE:
|
|
sys.stdout.write('.')
|
|
self.Print("Radio has reached the IDLE state.")
|
|
|
|
@@ -275,7 +272,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
self.Print("Radio entering FSTXON state...")
|
|
self.nic.setModeFSTXON()
|
|
- while (self.getMARCSTATE()[1] not in (MARC_STATE_FSTXON)):
|
|
+ while self.getMARCSTATE()[1] not in MARC_STATE_FSTXON:
|
|
sys.stdout.write('.')
|
|
self.Print("Radio has reached the FSTXON state.")
|
|
|
|
@@ -284,7 +281,8 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
* MODULATION - set the RF modulation scheme. values include "2FSK", "GFSK", "4FSK", "MSK", "ASK_OOK". note: GFSK/OOK/ASK only up to 250kbaud, MSK only above 26kbaud and no manchester encoding.
|
|
'''
|
|
if not len(line) or line not in ("2FSK", "GFSK", "4FSK", "MSK", "ASK_OOK"):
|
|
- self.Print('need to give me one of the values "2FSK", "GFSK", "4FSK" (experimental), "MSK", "ASK_OOK" got: "%s"' % line)
|
|
+ self.Print('need to give me one of the values "2FSK", "GFSK", "4FSK" '
|
|
+ '(experimental), "MSK", "ASK_OOK" got: "{}"'.format(line))
|
|
return
|
|
|
|
mod = eval("MOD_"+line.strip())
|
|
@@ -292,7 +290,6 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
self.nic.setMdmModulation(mod)
|
|
self.nic.setModeRX()
|
|
|
|
-
|
|
def complete_modulation(self, text, line, begidx, endidx):
|
|
self.Print("complete_modulation: %s %s %s %s") % (repr(text), repr(line), repr(begidx), repr(endidx))
|
|
|
|
@@ -653,13 +650,13 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
(be very cautious! the firmware expects certain things like return-to-RX, and no RX-timeout, etc..)
|
|
'''
|
|
|
|
- def do_show_config(self, line):
|
|
+ def do_show_config(self, line): # FIXME Line isnt used, remove?
|
|
'''
|
|
* show_config - Print a represented string of the radio configuration
|
|
'''
|
|
self.Print(self.nic.reprRadioConfig())
|
|
|
|
- def do_dump_config(self, line):
|
|
+ def do_dump_config(self, line): # FIXME line isnt used, remove?
|
|
'''
|
|
* dump_config - Print a hex representation of the radio configuration registers
|
|
'''
|
|
@@ -690,15 +687,14 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
* save_config <filename> - save the radio configuration to a file you specify
|
|
'''
|
|
- file(line, "wb").write(repr(self.nic.getRadioConfig()))
|
|
-
|
|
+ open(line, "wb").write(repr(self.nic.getRadioConfig()).encode())
|
|
|
|
def do_load_config(self, line):
|
|
'''
|
|
* load_config
|
|
(be very cautious! the firmware expects certain things like return-to-RX, and no RX-timeout, etc..)
|
|
'''
|
|
- config = file(line, "rb").read()
|
|
+ config = open(line, "rb").read()
|
|
self.nic.setModeIDLE()
|
|
print("loading config from bytes: %s" % repr(config))
|
|
self.setRadioConfig(config)
|
|
@@ -712,7 +708,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
if 0 < len(args) < 3:
|
|
if len(args) == 1:
|
|
args.append('1')
|
|
- self.Print(self.peek(int(args[0])), int(args[1]).encode('hex'))
|
|
+ self.Print(self.peek(int(args[0])), int(args[1]).encode('hex')) # FIXME more arguments than self.Print takes?
|
|
else:
|
|
self.Print("please provide exactly one xdata address and an optional length!")
|
|
|
|
@@ -726,7 +722,6 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
except:
|
|
self.Print("please provide exactly one xdata address and hex data")
|
|
|
|
-
|
|
def do_ping(self, line):
|
|
'''
|
|
* ping - hello? is the dongle still responding?
|
|
@@ -769,7 +764,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
if len(args) > 1:
|
|
self.nic.setRFRegister(val)
|
|
else:
|
|
- self.Print("%s : %x" % (args[0], ord(self.nic.peek(val))))
|
|
+ self.Print("{} : {:x}".format(args[0], ord(self.nic.peek(val))))
|
|
except:
|
|
self.Print(sys.exc_info())
|
|
|
|
@@ -791,7 +786,7 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
else:
|
|
self.printable = True
|
|
|
|
- self.Print("printable output is: %s" % ('disabled','enabled')[self.printable])
|
|
+ self.Print("printable output is: %s" % ('disabled', 'enabled')[self.printable])
|
|
|
|
def do_rawinput(self, line):
|
|
'''
|
|
@@ -824,7 +819,6 @@ class CC1111NIC_Server(cmd.Cmd):
|
|
'''
|
|
|
|
|
|
-
|
|
if __name__ == "__main__":
|
|
dongleserver = CC1111NIC_Server()
|
|
|
|
diff --git a/rflib/__init__.py b/rflib/__init__.py
|
|
index 5b1ecc2..c18883f 100755
|
|
--- a/rflib/__init__.py
|
|
+++ b/rflib/__init__.py
|
|
@@ -3,8 +3,6 @@
|
|
from __future__ import print_function
|
|
from __future__ import absolute_import
|
|
|
|
-from builtins import str
|
|
-from builtins import range
|
|
from .chipcon_nic import *
|
|
import rflib.bits as rfbits
|
|
|
|
@@ -13,12 +11,13 @@
|
|
|
|
MAX_FREQ = 936e6
|
|
|
|
+
|
|
class RfCat(FHSSNIC):
|
|
def RFdump(self, msg="Receiving", maxnum=100, timeoutms=1000):
|
|
try:
|
|
for x in range(maxnum):
|
|
y, t = self.RFrecv(timeoutms)
|
|
- print("(%5.3f) %s: %s" % (t, msg, y.encode('hex')))
|
|
+ print("({:5.3f}) {}: {}".format(t, msg, y.encode('hex')))
|
|
except ChipconUsbTimeoutException:
|
|
pass
|
|
|
|
@@ -34,7 +33,7 @@ def scan(self, basefreq=902e6, inc=250e3, count=104, delaysec=2, drate=38400, lo
|
|
try:
|
|
print("(press Enter to quit)")
|
|
for freq in range(int(basefreq), int(basefreq+(inc*count)), int(inc)):
|
|
- print("Scanning for frequency %d..." % freq)
|
|
+ print("Scanning for frequency {:d}...".format(freq))
|
|
self.setFreq(freq)
|
|
self.RFdump(timeoutms=delaysec*1000)
|
|
if keystop():
|
|
@@ -76,8 +75,8 @@ def _doSpecAn(self, centfreq, inc, count):
|
|
halfspec = spectrum / 2.0
|
|
basefreq = centfreq - halfspec
|
|
if (count * inc) + basefreq > MAX_FREQ:
|
|
- raise Exception("Sorry, %1.3f + (%1.3f * %1.3f) is higher than %1.3f" %
|
|
- (basefreq, count, inc))
|
|
+ raise Exception("Sorry, {:1.3f} + ({:1.3f} * (:1.3f}) is "
|
|
+ "higher than {:1.3f}".format(basefreq, count, inc))
|
|
self.getRadioConfig()
|
|
self._specan_backup_radiocfg = self.radiocfg
|
|
|
|
@@ -87,7 +86,7 @@ def _doSpecAn(self, centfreq, inc, count):
|
|
freq, fbytes = self.getFreq()
|
|
delta = self.getMdmChanSpc()
|
|
|
|
- self.send(APP_NIC, RFCAT_START_SPECAN, "%c" % (count) )
|
|
+ self.send(APP_NIC, RFCAT_START_SPECAN, "{:c}".format(count))
|
|
return freq, delta
|
|
|
|
def _stopSpecAn(self):
|
|
@@ -98,14 +97,13 @@ def _stopSpecAn(self):
|
|
self.radiocfg = self._specan_backup_radiocfg
|
|
self.setRadioConfig()
|
|
|
|
-
|
|
- def rf_configure(*args, **kwargs):
|
|
+ def rf_configure(self, *args, **kwargs):
|
|
self.setRFparameters(*args, **kwargs)
|
|
|
|
def rf_redirection(self, fdtup, use_rawinput=False, printable=False):
|
|
buf = ''
|
|
|
|
- if len(fdtup)>1:
|
|
+ if len(fdtup) > 1:
|
|
fd0i, fd0o = fdtup
|
|
else:
|
|
fd0i, = fdtup
|
|
@@ -117,11 +115,11 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False):
|
|
|
|
try:
|
|
while True:
|
|
- #if self._pause:
|
|
+ # if self._pause:
|
|
# continue
|
|
|
|
try:
|
|
- x,y,z = select.select([fd0i ], [], [], .1)
|
|
+ x, y, z = select.select([fd0i], [], [], .1)
|
|
if fd0i in x:
|
|
# FIXME: make this aware of VLEN/FLEN and the proper length
|
|
if fdsock:
|
|
@@ -137,10 +135,10 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False):
|
|
if vlen:
|
|
pktlen = ord(buf[0])
|
|
|
|
- #FIXME: probably want to take in a length struct here and then only send when we have that many bytes...
|
|
+ # FIXME: probably want to take in a length struct here and then only send when we have that many bytes...
|
|
data = buf[:pktlen]
|
|
if use_rawinput:
|
|
- data = eval('"%s"'%data)
|
|
+ data = eval('"{}"'.format(data))
|
|
|
|
if len(buf) >= pktlen:
|
|
self.RFxmit(data)
|
|
@@ -164,7 +162,7 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False):
|
|
except ChipconUsbTimeoutException:
|
|
pass
|
|
|
|
- #special handling of specan dumps... somewhat set in solid jello
|
|
+ # special handling of specan dumps... somewhat set in solid jello
|
|
try:
|
|
data, time = self.recv(APP_SPECAN, 1, 1)
|
|
data = struct.pack("<L", time) + struct.pack("<H", len(data)) + data
|
|
@@ -174,23 +172,25 @@ def rf_redirection(self, fdtup, use_rawinput=False, printable=False):
|
|
fd0o.write(data)
|
|
|
|
except ChipconUsbTimeoutException:
|
|
- #print "this is a valid exception, run along... %x"% APP_SPECAN
|
|
+ # print "this is a valid exception, run along... %x"% APP_SPECAN
|
|
pass
|
|
|
|
except KeyboardInterrupt:
|
|
self.setModeIDLE()
|
|
|
|
+
|
|
class InverseCat(RfCat):
|
|
def setMdmSyncWord(self, word, radiocfg=None):
|
|
FHSSNIC.setMdmSyncWord(self, word ^ 0xffff, radiocfg)
|
|
|
|
def RFrecv(self, timeout=1000):
|
|
global data
|
|
- data,timestamp = RfCat.RFrecv(self, timeout)
|
|
- return rfbits.invertBits(data),timestamp
|
|
+ data, timestamp = RfCat.RFrecv(self, timeout)
|
|
+ return rfbits.invertBits(data), timestamp
|
|
|
|
def RFxmit(self, data):
|
|
- return RfCat.RFxmit(self, rfbits.invertBits(data) )
|
|
+ return RfCat.RFxmit(self, rfbits.invertBits(data))
|
|
+
|
|
|
|
def cleanupInteractiveAtExit():
|
|
try:
|
|
@@ -200,6 +200,7 @@ def cleanupInteractiveAtExit():
|
|
except:
|
|
pass
|
|
|
|
+
|
|
def interactive(idx=0, DongleClass=RfCat, intro=''):
|
|
global d
|
|
import rflib.chipcon_nic as rfnic
|
|
@@ -237,7 +238,7 @@ def interactive(idx=0, DongleClass=RfCat, intro=''):
|
|
|
|
print(intro)
|
|
ipsh.mainloop()
|
|
- except ImportError, e:
|
|
+ except ImportError as e:
|
|
print(e)
|
|
shell = code.InteractiveConsole(gbls)
|
|
print(intro)
|
|
diff --git a/rflib/bits.py b/rflib/bits.py
|
|
index 485760b..8213ba8 100644
|
|
--- a/rflib/bits.py
|
|
+++ b/rflib/bits.py
|
|
@@ -10,10 +10,12 @@
|
|
|
|
fmtsLSB = [None, "B", "<H", "<I", "<I", "<Q", "<Q", "<Q", "<Q"]
|
|
fmtsMSB = [None, "B", ">H", ">I", ">I", ">Q", ">Q", ">Q", ">Q"]
|
|
-sizes = [ 0, 1, 2, 4, 4, 8, 8, 8, 8]
|
|
-masks = [ (1<<(8*i))-1 for i in range(9) ]
|
|
+sizes = [0, 1, 2, 4, 4, 8, 8, 8, 8]
|
|
+masks = [(1 << (8 * i)) - 1 for i in range(9)]
|
|
|
|
PYVER = int(sys.version[0])
|
|
+
|
|
+
|
|
def correctbytes(val):
|
|
global PYVER
|
|
|
|
@@ -22,9 +24,10 @@ def correctbytes(val):
|
|
|
|
return bytes([val])
|
|
|
|
+
|
|
def wtfo(string):
|
|
outstr = []
|
|
- bitlen = len(outstr) * 8
|
|
+ bitlen = len(outstr) * 8 # FIXME bitlen is not used, remove?
|
|
for x in range(8):
|
|
outstr.append(shiftString(string, x))
|
|
|
|
@@ -34,6 +37,7 @@ def wtfo(string):
|
|
|
|
return outstr
|
|
|
|
+
|
|
def strBitReverse(string):
|
|
# FIXME: this is really dependent upon python's number system. large strings will not convert well.
|
|
# FIXME: break up array of 8-bit numbers and bit-swap in the array
|
|
@@ -42,23 +46,24 @@ def strBitReverse(string):
|
|
# convert to MSB number
|
|
for x in range(len(string)):
|
|
ch = string[x]
|
|
- #num |= (ord(ch)<<(8*x)) # this is LSB
|
|
+ # num |= (ord(ch)<<(8*x)) # this is LSB
|
|
num <<= 8
|
|
num |= ord(ch)
|
|
|
|
- print (hex(num))
|
|
+ print(hex(num))
|
|
rnum = bitReverse(num, bits)
|
|
- print (hex(rnum))
|
|
+ print(hex(rnum))
|
|
|
|
# convert back from MSB number to string
|
|
out = []
|
|
for x in range(len(string)):
|
|
- out.append(correctbytes(rnum&0xff))
|
|
+ out.append(correctbytes(rnum & 0xff))
|
|
rnum >>= 8
|
|
out.reverse()
|
|
print(''.join(out).encode('hex'))
|
|
return ''.join(out)
|
|
|
|
+
|
|
def strXorMSB(string, xorval, size):
|
|
'''
|
|
lsb
|
|
@@ -77,27 +82,27 @@ def strXorMSB(string, xorval, size):
|
|
out.append(tempstr)
|
|
return ''.join(out)
|
|
|
|
-
|
|
-
|
|
|
|
def bitReverse(num, bitcnt):
|
|
newnum = 0
|
|
for idx in range(bitcnt):
|
|
newnum <<= 1
|
|
- newnum |= num&1
|
|
+ newnum |= num & 1
|
|
num >>= 1
|
|
return newnum
|
|
|
|
+
|
|
def shiftString(string, bits):
|
|
- carry = 0
|
|
+ carry = 0 # FIXME carry is never used, remove it?
|
|
news = []
|
|
for x in range(len(string)-1):
|
|
newc = ((ord(string[x]) << bits) + (ord(string[x+1]) >> (8-bits))) & 0xff
|
|
- news.append("%c"%newc)
|
|
- newc = (ord(string[-1])<<bits) & 0xff
|
|
- news.append("%c"%newc)
|
|
+ news.append("{:c}".format(newc))
|
|
+ newc = (ord(string[-1]) << bits) & 0xff
|
|
+ news.append("{:c}".format(newc))
|
|
return "".join(news)
|
|
|
|
+
|
|
def getNextByte_feedbackRegister7bitsMSB():
|
|
'''
|
|
this returns a byte of a 7-bit feedback register stemming off bits 4 and 7
|
|
@@ -106,15 +111,16 @@ def getNextByte_feedbackRegister7bitsMSB():
|
|
global fbRegister
|
|
|
|
retval = 0
|
|
- for x in range(8): #MSB,
|
|
+ for x in range(8): # MSB,
|
|
retval <<= 1
|
|
retval |= (fbRegister >> 6) # start with bit 7
|
|
- nb = ( ( fbRegister>>3) ^ (fbRegister>>6)) &1
|
|
- fbRegister = ( ( fbRegister << 1 ) | nb ) & 0x7f # do shifting
|
|
- #print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb)
|
|
+ nb = ((fbRegister >> 3) ^ (fbRegister >> 6)) & 1
|
|
+ fbRegister = ((fbRegister << 1) | nb) & 0x7f # do shifting
|
|
+ # print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb)
|
|
|
|
return retval
|
|
|
|
+
|
|
def getNextByte_feedbackRegister7bitsLSB():
|
|
'''
|
|
this returns a byte of a 7-bit feedback register stemming off bits 4 and 7
|
|
@@ -123,13 +129,13 @@ def getNextByte_feedbackRegister7bitsLSB():
|
|
global fbRegister
|
|
|
|
retval = 0
|
|
- for x in range(8): #MSB,
|
|
+ for x in range(8): # MSB,
|
|
retval >>= 1
|
|
- retval |= ((fbRegister << 1)&0x80) # start with bit 7
|
|
+ retval |= ((fbRegister << 1) & 0x80) # start with bit 7
|
|
|
|
- nb = ( ( fbRegister>>3) ^ (fbRegister>>6)) &1
|
|
- fbRegister = ( ( fbRegister << 1 ) | nb ) & 0x7f # do shifting
|
|
- #print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb)
|
|
+ nb = ((fbRegister >> 3) ^ (fbRegister >> 6)) & 1
|
|
+ fbRegister = ((fbRegister << 1) | nb) & 0x7f # do shifting
|
|
+ # print "retval: %x fbRegister: %x bit7: %x nb: %x" % (retval, fbRegister, (fbRegister>>6), nb)
|
|
|
|
return retval
|
|
|
|
@@ -138,13 +144,14 @@ def whitenData(data, seed=0xffff, getNextByte=getNextByte_feedbackRegister7bitsM
|
|
global fbRegister
|
|
fbRegister = seed
|
|
|
|
- carry = 0
|
|
+ carry = 0 # FIXME carry is never used, remove it?
|
|
news = []
|
|
for x in range(len(data)-1):
|
|
- newc = ((ord(data[x]) ^ getNextByte() ) & 0xff)
|
|
- news.append("%c"%newc)
|
|
+ newc = ((ord(data[x]) ^ getNextByte()) & 0xff)
|
|
+ news.append("{:c}".format(newc))
|
|
return "".join(news)
|
|
|
|
+
|
|
def findSyncWord(byts, sensitivity=4, minpreamble=2):
|
|
'''
|
|
seek SyncWords from a raw bitstream.
|
|
@@ -153,10 +160,10 @@ def findSyncWord(byts, sensitivity=4, minpreamble=2):
|
|
possDwords = []
|
|
# find the preamble (if any)
|
|
while True: # keep searching through string until we don't find any more preamble bits to pick on
|
|
- sbyts = byts
|
|
- pidx = byts.find("\xaa"*minpreamble)
|
|
+ sbyts = byts # FIXME sbyts is never used, after assigning it the value of byts, remove it?
|
|
+ pidx = byts.find("\xaa" * minpreamble)
|
|
if pidx == -1:
|
|
- pidx = byts.find("\x55"*minpreamble)
|
|
+ pidx = byts.find("\x55" * minpreamble)
|
|
byts = shiftString(byts, 1)
|
|
|
|
if pidx == -1:
|
|
@@ -164,46 +171,46 @@ def findSyncWord(byts, sensitivity=4, minpreamble=2):
|
|
|
|
# chop off the nonsense before the preamble
|
|
sbyts = byts[pidx:]
|
|
- #print "sbyts: %s" % repr(sbyts)
|
|
+ # print "sbyts: %s" % repr(sbyts)
|
|
|
|
# find the definite end of the preamble (ie. it may be sooner, but we know this is the end)
|
|
- while (sbyts[0] == '\xaa' and len(sbyts)>2):
|
|
+ while sbyts[0] == '\xaa' and len(sbyts) > 2:
|
|
sbyts = sbyts[1:]
|
|
|
|
- #print "sbyts: %s" % repr(sbyts)
|
|
+ # print "sbyts: %s" % repr(sbyts)
|
|
# now we look at the next 16 bits to narrow the possibilities to 8
|
|
# at this point we have no hints at bit-alignment aside from 0xaa vs 0x55
|
|
- dwbits, = struct.unpack(">H", sbyts[:2])
|
|
- #print "sbyts: %s" % repr(sbyts)
|
|
- #print "dwbits: %s" % repr(dwbits)
|
|
- if len(sbyts)>=3:
|
|
- bitcnt = 0
|
|
+ dwbits, = struct.unpack(">H", sbyts[:2]) # FIXME dwbits is not used, remove it?
|
|
+ # print "sbyts: %s" % repr(sbyts)
|
|
+ # print "dwbits: %s" % repr(dwbits)
|
|
+ if len(sbyts) >= 3:
|
|
+ bitcnt = 0 # FIXME bitcnt is never used, remove it?
|
|
# bits1 = aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb
|
|
# bits2 = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|
bits1, = struct.unpack(">H", sbyts[:2])
|
|
bits1 = bits1 | (ord('\xaa') << 16)
|
|
bits1 = bits1 | (ord('\xaa') << 24)
|
|
bits1 <<= 8
|
|
- bits1 |= (ord(sbyts[2]) )
|
|
- #print "bits: %x" % (bits1)
|
|
+ bits1 |= (ord(sbyts[2]))
|
|
+ # print "bits: %x" % (bits1)
|
|
|
|
bit = (5 * 8) - 2 # bytes times bits/byte #FIXME: MAGIC NUMBERS!?
|
|
- while (bits1 & (3<<bit) == (2<<bit)):
|
|
+ while bits1 & (3 << bit) == (2 << bit):
|
|
bit -= 2
|
|
- #print "bit = %d" % bit
|
|
+ # print "bit = %d" % bit
|
|
bits1 >>= (bit-16)
|
|
- #while (bits1 & 0x30000 != 0x20000): # now we align the end of the 101010 pattern with the beginning of the dword
|
|
+ # while (bits1 & 0x30000 != 0x20000): # now we align the end of the 101010 pattern with the beginning of the dword
|
|
# bits1 >>= 2
|
|
- #print "bits: %x" % (bits1)
|
|
+ # print "bits: %x" % (bits1)
|
|
|
|
- bitcount = min( 2 * sensitivity, 17 )
|
|
+ bitcount = min(2 * sensitivity, 17)
|
|
for frontbits in range( bitcount ): # with so many bit-inverted systems, let's not assume we know anything about the bit-arrangement. \x55\x55 could be a perfectly reasonable preamble.
|
|
poss = (bits1 >> frontbits) & 0xffff
|
|
if not poss in possDwords:
|
|
possDwords.append(poss)
|
|
byts = byts[pidx+1:]
|
|
|
|
- return possDwords
|
|
+ return possDwords # FIXME this code is unreachable due to 'while True' loop.
|
|
|
|
def findSyncWordDoubled(byts):
|
|
possDwords = []
|
|
@@ -220,54 +227,57 @@ def findSyncWordDoubled(byts):
|
|
byts = byts[pidx:]
|
|
|
|
# find the definite end of the preamble (ie. it may be sooner, but we know this is the end)
|
|
- while (byts[0] == ('\xaa', '\x55')[bitoff] and len(byts)>2):
|
|
+ while byts[0] == ('\xaa', '\x55')[bitoff] and len(byts) > 2:
|
|
byts = byts[1:]
|
|
|
|
# now we look at the next 16 bits to narrow the possibilities to 8
|
|
# at this point we have no hints at bit-alignment
|
|
- dwbits, = struct.unpack(">H", byts[:2])
|
|
- if len(byts)>=5:
|
|
- bitcnt = 0
|
|
+ dwbits, = struct.unpack(">H", byts[:2]) # FIXME dwbits is never used, remove?
|
|
+ if len(byts) >= 5:
|
|
+ bitcnt = 0 # FIXME bitcnt is never used, remove it?
|
|
# bits1 = aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbb
|
|
# bits2 = bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
|
bits1, = struct.unpack(">H", byts[:2])
|
|
- bits1 = bits1 | (ord(('\xaa','\x55')[bitoff]) << 16)
|
|
- bits1 = bits1 | (ord(('\xaa','\x55')[bitoff]) << 24)
|
|
+ bits1 = bits1 | (ord(('\xaa', '\x55')[bitoff]) << 16)
|
|
+ bits1 = bits1 | (ord(('\xaa', '\x55')[bitoff]) << 24)
|
|
bits1 <<= 8
|
|
- bits1 |= (ord(byts[2]) )
|
|
+ bits1 |= (ord(byts[2]))
|
|
bits1 >>= bitoff
|
|
|
|
bits2, = struct.unpack(">L", byts[:4])
|
|
bits2 <<= 8
|
|
- bits2 |= (ord(byts[4]) )
|
|
+ bits2 |= (ord(byts[4]))
|
|
bits2 >>= bitoff
|
|
-
|
|
|
|
frontbits = 0
|
|
- for frontbits in range(16, 40, 2): #FIXME: if this doesn't work, try 16, then 18+frontbits
|
|
- dwb1 = (bits1 >> (frontbits)) & 3
|
|
- dwb2 = (bits2 >> (frontbits)) & 3
|
|
- print("\tfrontbits: %d \t\t dwb1: %s dwb2: %s" % (frontbits, bin(bits1 >> (frontbits)), bin(bits2 >> (frontbits))))
|
|
+ for frontbits in range(16, 40, 2): # FIXME: if this doesn't work, try 16, then 18+frontbits
|
|
+ dwb1 = (bits1 >> frontbits) & 3
|
|
+ dwb2 = (bits2 >> frontbits) & 3
|
|
+ print("\tfrontbits: {:d} \t\t dwb1: {} dwb2: {}".format(frontbits,
|
|
+ bin(bits1 >> frontbits),
|
|
+ bin(bits2 >> frontbits)))
|
|
if dwb2 != dwb1:
|
|
break
|
|
|
|
# frontbits now represents our unknowns... let's go from the other side now
|
|
for tailbits in range(16, -1, -2):
|
|
- dwb1 = (bits1 >> (tailbits)) & 3
|
|
- dwb2 = (bits2 >> (tailbits)) & 3
|
|
- print("\ttailbits: %d\t\t dwb1: %s dwb2: %s" % (tailbits, bin(bits1 >> (tailbits)), bin(bits2 >> (tailbits))))
|
|
+ dwb1 = (bits1 >> tailbits) & 3
|
|
+ dwb2 = (bits2 >> tailbits) & 3
|
|
+ print("\ttailbits: {:d}\t\t dwb1: {} dwb2: {}".format(tailbits, bin(bits1 >> tailbits),
|
|
+ bin(bits2 >> tailbits)))
|
|
if dwb2 != dwb1:
|
|
tailbits += 2
|
|
break
|
|
|
|
# now, if we have a double syncword, iinm, tailbits + frontbits >= 16
|
|
- print("frontbits: %d\t\t tailbits: %d, bits: %s " % (frontbits, tailbits, bin((bits2>>tailbits & 0xffffffff))))
|
|
- if (frontbits + tailbits >= 16):
|
|
- tbits = bits2 >> (tailbits&0xffff)
|
|
- tbits &= (0xffffffff)
|
|
- print("tbits: %x" % tbits)
|
|
-
|
|
- poss = tbits&0xffffffff
|
|
+ print("frontbits: {:d}\t\t tailbits: {:d}, bits: {} ".format(frontbits, tailbits,
|
|
+ bin((bits2 >> tailbits & 0xffffffff))))
|
|
+ if frontbits + tailbits >= 16:
|
|
+ tbits = bits2 >> (tailbits & 0xffff)
|
|
+ tbits &= 0xffffffff
|
|
+ print("tbits: {:x}".format(tbits))
|
|
+
|
|
+ poss = tbits & 0xffffffff
|
|
if poss not in possDwords:
|
|
possDwords.append(poss)
|
|
else:
|
|
@@ -277,50 +287,49 @@ def findSyncWordDoubled(byts):
|
|
possDwords.reverse()
|
|
return possDwords
|
|
|
|
-#def test():
|
|
+# def test():
|
|
+
|
|
|
|
def visBits(data):
|
|
pass
|
|
|
|
|
|
-
|
|
def getBit(data, bit):
|
|
idx = old_div(bit, 8)
|
|
bidx = bit % 8
|
|
char = data[idx]
|
|
- return (ord(char)>>(7-bidx)) & 1
|
|
-
|
|
+ return (ord(char) >> (7 - bidx)) & 1
|
|
|
|
|
|
def detectRepeatPatterns(data, size=64, minEntropy=.07):
|
|
- #FIXME: convert strings to bit arrays before comparing.
|
|
+ # FIXME: convert strings to bit arrays before comparing.
|
|
c1 = 0
|
|
c2 = 0
|
|
d1 = 0
|
|
p1 = 0
|
|
- mask = (1<<size) - 1
|
|
- bitlen = 8*len(data)
|
|
+ mask = (1 << size) - 1
|
|
+ bitlen = 8 * len(data)
|
|
|
|
- while p1 < (bitlen-size-8):
|
|
+ while p1 < (bitlen - size - 8):
|
|
d1 <<= 1
|
|
d1 |= getBit(data, p1)
|
|
d1 &= mask
|
|
- #print bin(d1)
|
|
+ # print bin(d1)
|
|
|
|
- if c1 < (size):
|
|
+ if c1 < size:
|
|
p1 += 1
|
|
c1 += 1
|
|
continue
|
|
|
|
d2 = 0
|
|
- p2 = p1+size
|
|
- while p2 < (bitlen):
|
|
+ p2 = p1 + size
|
|
+ while p2 < bitlen:
|
|
d2 <<= 1
|
|
d2 |= getBit(data, p2)
|
|
d2 &= mask
|
|
- #print bin(d2)
|
|
+ # print bin(d2)
|
|
|
|
- if c2 < (size):
|
|
+ if c2 < size:
|
|
p2 += 1
|
|
c2 += 1
|
|
continue
|
|
@@ -328,19 +337,19 @@ def detectRepeatPatterns(data, size=64, minEntropy=.07):
|
|
if d1 == d2 and d1 > 0:
|
|
s1 = p1 - size
|
|
s2 = p2 - size
|
|
- print("s1: %d\t p1: %d\t " % (s1, p1))
|
|
- print("s2: %d\t p2: %d\t " % (s2, p2))
|
|
+ print("s1: {:d}\t p1: {:d}\t ".format(s1, p1))
|
|
+ print("s2: {:d}\t p2: {:d}\t ".format(s2, p2))
|
|
# complete the pattern until the numbers differ or meet
|
|
while True:
|
|
p1 += 1
|
|
p2 += 1
|
|
- #print "s1: %d\t p1: %d\t " % (s1, p1)
|
|
- #print "s2: %d\t p2: %d\t " % (s2, p2)
|
|
+ # print "s1: %d\t p1: %d\t " % (s1, p1)
|
|
+ # print "s2: %d\t p2: %d\t " % (s2, p2)
|
|
if p2 >= bitlen:
|
|
break
|
|
|
|
- b1 = getBit(data,p1)
|
|
- b2 = getBit(data,p2)
|
|
+ b1 = getBit(data, p1)
|
|
+ b2 = getBit(data, p2)
|
|
|
|
if p1 == s2 or b1 != b2:
|
|
break
|
|
@@ -349,12 +358,13 @@ def detectRepeatPatterns(data, size=64, minEntropy=.07):
|
|
c2 = 0
|
|
p2 -= size
|
|
|
|
- bitSection, ent = bitSectString(data, s1, s1+length)
|
|
+ bitSection, ent = bitSectString(data, s1, s1 + length)
|
|
if ent > minEntropy:
|
|
print("success:")
|
|
- print(" * bit idx1: %4d (%4d bits) - '%s' %s" % (s1, length, bin(d1), bitSection.encode("hex")))
|
|
- print(" * bit idx2: %4d (%4d bits) - '%s'" % (s2, length, bin(d2)))
|
|
- #else:
|
|
+ print(" * bit idx1: {:4d} ({:4d} bits) - '{}' {}".format(s1, length, bin(d1),
|
|
+ bitSection.encode("hex")))
|
|
+ print(" * bit idx2: {:4d} ({:4d} bits) - '{}'".format(s2, length, bin(d2)))
|
|
+ # else:
|
|
# print " * idx1: %d - '%s' * idx2: %d - '%s'" % (p1, d1, p2, d2)
|
|
p2 += 1
|
|
p1 += 1
|
|
@@ -377,17 +387,17 @@ def bitSectString(string, startbit, endbit):
|
|
|
|
while bit < endbit:
|
|
|
|
- byte1 = ord( string[Bidx] )
|
|
+ byte1 = ord(string[Bidx])
|
|
try:
|
|
- byte2 = ord( string[Bidx+1] )
|
|
+ byte2 = ord(string[Bidx+1])
|
|
except IndexError:
|
|
byte2 = 0
|
|
|
|
byte = (byte1 << bidx) & 0xff
|
|
byte |= (byte2 >> (8-bidx))
|
|
- #calculate entropy over the byte
|
|
+ # calculate entropy over the byte
|
|
for bi in range(8):
|
|
- b = (byte>>bi) & 1
|
|
+ b = (byte >> bi) & 1
|
|
entropy[b] += 1
|
|
|
|
bit += 8
|
|
@@ -395,17 +405,16 @@ def bitSectString(string, startbit, endbit):
|
|
|
|
if bit > endbit:
|
|
diff = bit-endbit
|
|
- mask = ~ ( (1<<diff) - 1 )
|
|
+ mask = ~ ((1 << diff) - 1)
|
|
byte &= mask
|
|
|
|
s += correctbytes(byte)
|
|
|
|
- ent = old_div((min(entropy)+1.0), (max(entropy)+1))
|
|
- #print "entropy: %f" % ent
|
|
+ ent = old_div((min(entropy) + 1.0), (max(entropy) + 1))
|
|
+ # print "entropy: %f" % ent
|
|
return (s, ent)
|
|
|
|
|
|
-
|
|
def genBitArray(string, startbit, endbit):
|
|
'''
|
|
bitsects a string... ie. chops out the bits from the middle of the string
|
|
@@ -417,43 +426,43 @@ def genBitArray(string, startbit, endbit):
|
|
for byte in binStr:
|
|
byte = ord(byte)
|
|
for bitx in range(7, -1, -1):
|
|
- bit = (byte>>bitx) & 1
|
|
+ bit = (byte >> bitx) & 1
|
|
s.append(bit)
|
|
|
|
return (s, ent)
|
|
|
|
|
|
chars_top = [
|
|
- " ", #000
|
|
- " ", #001
|
|
- "^", #010
|
|
- "/", #011
|
|
- " ", #100
|
|
- " ", #101
|
|
- "\\",#110
|
|
- "-", #111
|
|
+ " ", # 000
|
|
+ " ", # 001
|
|
+ "^", # 010
|
|
+ "/", # 011
|
|
+ " ", # 100
|
|
+ " ", # 101
|
|
+ "\\", # 110
|
|
+ "-", # 111
|
|
]
|
|
|
|
chars_mid = [
|
|
- " ", #000
|
|
- "|", #001
|
|
- "#", #010
|
|
- " ", #011
|
|
- "|", #100
|
|
- "#", #101
|
|
- " ", #110
|
|
- " ", #110
|
|
+ " ", # 000
|
|
+ "|", # 001
|
|
+ "#", # 010
|
|
+ " ", # 011
|
|
+ "|", # 100
|
|
+ "#", # 101
|
|
+ " ", # 110
|
|
+ " ", # 110
|
|
]
|
|
|
|
chars_bot = [
|
|
- "-", #000
|
|
- "/", #001
|
|
- " ", #010
|
|
- " ", #011
|
|
- "\\",#100
|
|
- "V", #101
|
|
- " ", #110
|
|
- " ", #110
|
|
+ "-", # 000
|
|
+ "/", # 001
|
|
+ " ", # 010
|
|
+ " ", # 011
|
|
+ "\\", # 100
|
|
+ "V", # 101
|
|
+ " ", # 110
|
|
+ " ", # 110
|
|
]
|
|
|
|
|
|
@@ -464,38 +473,39 @@ def reprBitArray(bitAry, width=194):
|
|
|
|
arylen = len(bitAry)
|
|
# top line
|
|
- #FIXME: UGGGGLY and kinda broken.
|
|
+ # FIXME: UGGGGLY and kinda broken.
|
|
fraction = 1.0 * arylen/width
|
|
- expand = [bitAry[int(x*fraction)] for x in range(width)]
|
|
+ expand = [bitAry[int(x * fraction)] for x in range(width)]
|
|
|
|
for bindex in range(width):
|
|
bits = 0
|
|
- if bindex>0:
|
|
- bits += (expand[bindex-1]) << (2)
|
|
+ if bindex > 0:
|
|
+ bits += (expand[bindex - 1]) << (2)
|
|
bits += (expand[bindex]) << (1)
|
|
if bindex < width-1:
|
|
bits += (expand[bindex+1])
|
|
|
|
- top.append( chars_top[ bits ] )
|
|
- mid.append( chars_mid[ bits ] )
|
|
- bot.append( chars_bot[ bits ] )
|
|
+ top.append(chars_top[bits])
|
|
+ mid.append(chars_mid[bits])
|
|
+ bot.append(chars_bot[bits])
|
|
|
|
tops = "".join(top)
|
|
mids = "".join(mid)
|
|
bots = "".join(bot)
|
|
return "\n".join([tops, mids, bots])
|
|
|
|
+
|
|
def invertBits(data):
|
|
output = []
|
|
ldata = len(data)
|
|
off = 0
|
|
|
|
- if ldata&1:
|
|
- output.append( correctbytes( ord( data[0] ) ^ 0xff) )
|
|
+ if ldata & 1:
|
|
+ output.append(correctbytes(ord(data[0]) ^ 0xff))
|
|
off = 1
|
|
|
|
- if ldata&2:
|
|
- output.append( struct.pack( "<H", struct.unpack( "<H", data[off:off+2] )[0] ^ 0xffff) )
|
|
+ if ldata & 2:
|
|
+ output.append(struct.pack("<H", struct.unpack("<H", data[off:off + 2])[0] ^ 0xffff))
|
|
off += 2
|
|
|
|
#method 1
|
|
@@ -505,8 +515,8 @@ def invertBits(data):
|
|
#method2
|
|
count = old_div(ldata, 4)
|
|
#print ldata, count
|
|
- numlist = struct.unpack( "<%dI" % count, data[off:] )
|
|
- modlist = [ struct.pack("<L", (x^0xffffffff) ) for x in numlist ]
|
|
+ numlist = struct.unpack("<%dI" % count, data[off:])
|
|
+ modlist = [struct.pack("<L", (x ^ 0xffffffff)) for x in numlist]
|
|
output.extend(modlist)
|
|
|
|
return ''.join(output)
|
|
@@ -533,29 +543,30 @@ def diff_manchester_decode(data, align=False):
|
|
for y in range(6, -1, -2):
|
|
if not syncd:
|
|
diff = last & 1
|
|
- bit0 = (byte >> (y+1)) & 1
|
|
+ bit0 = (byte >> (y + 1)) & 1
|
|
bit1 = (byte >> y) & 1
|
|
else:
|
|
diff = last >> 1
|
|
bit0 = last & 1
|
|
- bit1 = (byte >> (y+1)) & 1
|
|
+ bit1 = (byte >> (y + 1)) & 1
|
|
|
|
if bit0 == bit1:
|
|
if syncd or not align:
|
|
- raise Exception("Differential Manchester Decoder cannot work with this data. Sync fault at index %d,%d" % (bidx, y))
|
|
+ raise Exception("Differential Manchester Decoder cannot work with this data. Sync fault at index "
|
|
+ "{:d},{:d}".format(bidx, y))
|
|
|
|
syncd = 1
|
|
# redo the last stuff with new info
|
|
diff = last >> 1
|
|
bit0 = last & 1
|
|
- bit1 = (byte >> (y+1)) & 1
|
|
+ bit1 = (byte >> (y + 1)) & 1
|
|
|
|
obyte <<= 1
|
|
if diff != bit0:
|
|
obyte |= 1
|
|
|
|
last = (bit0 << 1) | bit1
|
|
- if (bidx & 1):
|
|
+ if bidx & 1:
|
|
out.append(correctbytes(obyte))
|
|
obyte = 0
|
|
|
|
@@ -565,7 +576,6 @@ def diff_manchester_decode(data, align=False):
|
|
return ''.join(out)
|
|
|
|
|
|
-
|
|
def biphase_mark_coding_encode(data):
|
|
# FIXME: broken? this looks more like BMC (biphase mark encoding)
|
|
# FIXME: write encoder as well
|
|
@@ -592,6 +602,7 @@ def biphase_mark_coding_encode(data):
|
|
|
|
return ''.join(out)
|
|
|
|
+
|
|
def manchester_decode(data, hilo=1):
|
|
out = []
|
|
last = 0
|
|
@@ -611,15 +622,16 @@ def manchester_decode(data, hilo=1):
|
|
obyte |= 1
|
|
|
|
last = bit
|
|
- if (bidx & 1):
|
|
+ if bidx & 1:
|
|
out.append(correctbytes(obyte))
|
|
obyte = 0
|
|
|
|
if not (bidx & 1):
|
|
- obyte << 4 # pad 0's on end
|
|
+ obyte << 4 # pad 0's on end
|
|
out.append(correctbytes(obyte))
|
|
return ''.join(out)
|
|
|
|
+
|
|
def manchester_encode(data, hilo=1):
|
|
'''
|
|
for the sake of testing.
|
|
@@ -634,15 +646,16 @@ def manchester_encode(data, hilo=1):
|
|
for bidx in range(len(data)):
|
|
byte = ord(data[bidx])
|
|
obyte = 0
|
|
- for bitx in range(7,-1,-1):
|
|
- bit = (byte>>bitx) & 1
|
|
+ for bitx in range(7, -1, -1):
|
|
+ bit = (byte >> bitx) & 1
|
|
obyte <<= 2
|
|
obyte |= bits[bit]
|
|
|
|
out.append(struct.pack(">H", obyte))
|
|
return ''.join(out)
|
|
|
|
-def findManchesterData(data, hilo=1):
|
|
+
|
|
+def findManchesterData(data, hilo=1): # FIXME hilo is never used, remove?
|
|
poss = []
|
|
|
|
for x in range(8):
|
|
@@ -653,6 +666,7 @@ def findManchesterData(data, hilo=1):
|
|
except:
|
|
pass
|
|
|
|
+
|
|
def findManchester(data, minbytes=10):
|
|
print("DEBUG: DATA=" + repr(data))
|
|
success = []
|
|
@@ -666,9 +680,9 @@ def findManchester(data, minbytes=10):
|
|
byt = ord(data[bidx])
|
|
for btidx in range(0, 8, 2):
|
|
# compare every other bits
|
|
- bit = (byt>>(8-btidx)) & 1
|
|
+ bit = (byt >> (8 - btidx)) & 1
|
|
|
|
- if (bit + last + last2) in (1,2):
|
|
+ if (bit + last + last2) in (1, 2):
|
|
lastCount += 1
|
|
else:
|
|
# we're done, or not started
|
|
@@ -681,7 +695,7 @@ def findManchester(data, minbytes=10):
|
|
lenbits -= 8
|
|
startbit = btidx - lenbits
|
|
|
|
- stopbyte = startbyte + lenbytes + (0,1)[lenbits>0]
|
|
+ stopbyte = startbyte + lenbytes + (0, 1)[lenbits > 0]
|
|
bytez = data[startbyte:stopbyte]
|
|
|
|
success.append((bidx, startbyte, startbit, bytez))
|
|
@@ -690,4 +704,3 @@ def findManchester(data, minbytes=10):
|
|
last2 = last
|
|
last = bit
|
|
return success
|
|
-
|
|
diff --git a/rflib/cc111Xhparser.py b/rflib/cc111Xhparser.py
|
|
index a89f22e..db08ef3 100644
|
|
--- a/rflib/cc111Xhparser.py
|
|
+++ b/rflib/cc111Xhparser.py
|
|
@@ -52,26 +52,26 @@ def parseLines(lines):
|
|
for line in lines:
|
|
# find single-line comments
|
|
slc = line.find("//")
|
|
- if (slc > -1):
|
|
- line = line[:slc] + "#" + line[slc+2:]
|
|
+ if slc > -1:
|
|
+ line = line[:slc] + "#" + line[slc+2:]
|
|
# find /* */ comments
|
|
mlcs = line.find("/*")
|
|
mlce = line.find("*/")
|
|
- if (mlcs>-1):
|
|
- if (mlce>-1): # both are in this line
|
|
- if (mlce>mlcs): # they are "together"
|
|
- if (mlce >= len(line.strip())-3):
|
|
- line = line[:mlcs] + '#' + line[mlcs+2:mlce]
|
|
+ if mlcs > -1:
|
|
+ if mlce > -1: # both are in this line
|
|
+ if mlce > mlcs: # they are "together"
|
|
+ if mlce >= len(line.strip())-3:
|
|
+ line = line[:mlcs] + '#' + line[mlcs + 2:mlce]
|
|
else:
|
|
- line = line[:mlcs] + '"""' + line[mlcs+2:mlce] + '"""' + line[mlce+2:]
|
|
+ line = line[:mlcs] + '"""' + line[mlcs + 2:mlce] + '"""' + line[mlce + 2:]
|
|
else: # they are *not* together
|
|
- line = line[mlce+2:mlcs]
|
|
+ line = line[mlce + 2:mlcs]
|
|
else: # only the beginning is in this line, treat like a single-line comment for now
|
|
line = line[:mlcs]
|
|
incomment = True
|
|
elif incomment: # no mlc-starter found... are we incomment? then ignore until the end of comment
|
|
- if (mlce>-1):
|
|
- line = line[mlce+2:]
|
|
+ if mlce > -1:
|
|
+ line = line[mlce + 2:]
|
|
incomment = False
|
|
else:
|
|
line = ''
|
|
@@ -82,37 +82,37 @@ def parseLines(lines):
|
|
line = line.strip()
|
|
|
|
# now we can actually parse the line
|
|
- if (line.startswith("#define ")):
|
|
+ if line.startswith("#define "):
|
|
line = line[8:].strip() # peel off any additional spaces after the #define
|
|
pieces = line.split(" ", 1)
|
|
- if len(pieces)<2:
|
|
+ if len(pieces) < 2:
|
|
continue
|
|
name, value = pieces
|
|
if "(" in name:
|
|
- print(("SKIPPING: %s"%(line)), file=sys.stderr)
|
|
+ print(("SKIPPING: {}".format(line)), file=sys.stderr)
|
|
continue # skip adding "function" defines
|
|
defs[name.strip()] = value.strip()
|
|
|
|
- elif (line.startswith("SFR(")):
|
|
+ elif line.startswith("SFR("):
|
|
endparen = line.find(")")
|
|
- if (endparen == -1):
|
|
- print(("ERROR: SFR without end parens: '%s'"%(line)), file=sys.stderr)
|
|
+ if endparen == -1:
|
|
+ print(("ERROR: SFR without end parens: '{}'".format(line)), file=sys.stderr)
|
|
continue
|
|
line = line[4:endparen].strip()
|
|
name, value = line.split(",", 1)
|
|
defs[name.strip()] = value.strip()
|
|
- elif (line.startswith("SFRX(")):
|
|
+ elif line.startswith("SFRX("):
|
|
endparen = line.find(")")
|
|
- if (endparen == -1):
|
|
- print(("ERROR: SFRX without end parens: '%s'"%(line)), file=sys.stderr)
|
|
+ if endparen == -1:
|
|
+ print(("ERROR: SFRX without end parens: '{}'".format(line)), file=sys.stderr)
|
|
continue
|
|
line = line[5:endparen].strip()
|
|
name, value = line.split(",", 1)
|
|
defs[name.strip()] = value.strip()
|
|
- elif (line.startswith("SBIT")):
|
|
+ elif line.startswith("SBIT"):
|
|
endparen = line.find(")")
|
|
- if (endparen == -1):
|
|
- print(("ERROR: SBIT without end parens: '%s'"%(line)), file=sys.stderr)
|
|
+ if endparen == -1:
|
|
+ print(("ERROR: SBIT without end parens: '{}'".format(line)), file=sys.stderr)
|
|
continue
|
|
line = line[5:endparen].strip()
|
|
name, val1, val2 = line.split(",", 2)
|
|
@@ -123,28 +123,19 @@ def parseLines(lines):
|
|
|
|
if __name__ == '__main__':
|
|
defs = {}
|
|
- defs.update(parseLines(file('../includes/cc1110-ext.h')))
|
|
- defs.update(parseLines(file('../includes/cc1111.h')))
|
|
- defs.update(parseLines(file('/usr/share/sdcc/include/mcs51/cc1110.h')))
|
|
+ defs.update(parseLines(open('../includes/cc1110-ext.h', 'r')))
|
|
+ defs.update(parseLines(open('../includes/cc1111.h', 'r')))
|
|
+ defs.update(parseLines(open('/usr/share/sdcc/include/mcs51/cc1110.h', 'r')))
|
|
|
|
skeys = list(defs.keys())
|
|
skeys.sort()
|
|
- out = ["%-30s = %s"%(key,defs[key]) for key in skeys]
|
|
+ out = ["%-30s = %s" % (key, defs[key]) for key in skeys]
|
|
|
|
trueout = []
|
|
for x in out:
|
|
try:
|
|
- compile(x,'stdin','exec')
|
|
+ compile(x, 'stdin', 'exec')
|
|
trueout.append(x)
|
|
print(x)
|
|
except:
|
|
sys.excepthook(*sys.exc_info())
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
-
|
|
diff --git a/rflib/ccrecvdump.py b/rflib/ccrecvdump.py
|
|
index 744d5aa..0f51fcb 100644
|
|
--- a/rflib/ccrecvdump.py
|
|
+++ b/rflib/ccrecvdump.py
|
|
@@ -11,12 +11,12 @@
|
|
|
|
dport = "/dev/tty" + port
|
|
|
|
-print("Opening serial port %s for listening..." % dport)
|
|
+print("Opening serial port {} for listening...".format(dport))
|
|
s=serial.Serial(dport, 115200)
|
|
|
|
counter = 0
|
|
while True:
|
|
- print ("%d: %s" % (counter, repr(s.read(12))))
|
|
+ print("{:d} {}".format(counter, repr(s.read(12))))
|
|
counter += 1
|
|
- #sys.stdout.write(s.read(1))
|
|
- #sys.stdout.flush()
|
|
+ # sys.stdout.write(s.read(1))
|
|
+ # sys.stdout.flush()
|
|
diff --git a/rflib/ccspecan.py b/rflib/ccspecan.py
|
|
index f6bd796..69dba9a 100755
|
|
--- a/rflib/ccspecan.py
|
|
+++ b/rflib/ccspecan.py
|
|
@@ -24,8 +24,6 @@
|
|
|
|
from future import standard_library
|
|
standard_library.install_aliases()
|
|
-from builtins import bytes
|
|
-from builtins import range
|
|
from past.utils import old_div
|
|
import sys
|
|
import time
|
|
@@ -42,6 +40,7 @@
|
|
from PySide2 import QtCore, QtGui, QtWidgets
|
|
from PySide2.QtCore import Qt, QPointF, QLineF
|
|
|
|
+
|
|
def ensureQapp():
|
|
global _qt_app
|
|
if not globals().get("_qt_app"):
|
|
@@ -51,6 +50,7 @@ def ensureQapp():
|
|
APP_SPECAN = 0x43
|
|
SPECAN_QUEUE = 1
|
|
|
|
+
|
|
class SpecanThread(threading.Thread):
|
|
def __init__(self, data, low_frequency, high_frequency, freq_step, delay, new_frame_callback):
|
|
threading.Thread.__init__(self)
|
|
@@ -68,16 +68,20 @@ def __init__(self, data, low_frequency, high_frequency, freq_step, delay, new_fr
|
|
|
|
def run(self):
|
|
# this is where we pull in the data from the device
|
|
- #frame_source = self._device.specan(self._low_frequency, self._high_frequency)
|
|
+ # frame_source = self._device.specan(self._low_frequency, self._high_frequency)
|
|
|
|
num_chans = int(old_div((self._high_frequency - self._low_frequency), self._freq_step))
|
|
+ # FIXME num_chans isnt used, remove it?
|
|
|
|
if type(self._data) == list:
|
|
for rssi_values, timestamp in self._data:
|
|
- rssi_values = [ (old_div((ord(x)^0x80),2))-88 for x in rssi_values[4:] ]
|
|
+ rssi_values = [(old_div((ord(x) ^ 0x80), 2)) - 88 for x in rssi_values[4:]]
|
|
# since we are not accessing the dongle, we need some sort of delay
|
|
time.sleep(self._delay)
|
|
- frequency_axis = numpy.linspace(self._low_frequency, self._high_frequency, num=len(rssi_values), endpoint=True)
|
|
+ frequency_axis = numpy.linspace(self._low_frequency,
|
|
+ self._high_frequency,
|
|
+ num=len(rssi_values),
|
|
+ endpoint=True)
|
|
|
|
self._new_frame_callback(numpy.copy(frequency_axis), numpy.copy(rssi_values))
|
|
if self._stop:
|
|
@@ -86,8 +90,11 @@ def run(self):
|
|
while not self._stop:
|
|
try:
|
|
rssi_values, timestamp = self._data.recv(APP_SPECAN, SPECAN_QUEUE, 10000)
|
|
- rssi_values = [ (old_div((ord(x)^0x80),2))-88 for x in rssi_values ]
|
|
- frequency_axis = numpy.linspace(self._low_frequency, self._high_frequency, num=len(rssi_values), endpoint=True)
|
|
+ rssi_values = [(old_div((ord(x) ^ 0x80), 2)) - 88 for x in rssi_values]
|
|
+ frequency_axis = numpy.linspace(self._low_frequency,
|
|
+ self._high_frequency,
|
|
+ num=len(rssi_values),
|
|
+ endpoint=True)
|
|
|
|
self._new_frame_callback(numpy.copy(frequency_axis), numpy.copy(rssi_values))
|
|
except:
|
|
@@ -99,6 +106,7 @@ def stop(self):
|
|
self.join(3.0)
|
|
self._stopped = True
|
|
|
|
+
|
|
class RenderArea(QtWidgets.QWidget):
|
|
def __init__(self, data, low_freq=2.400e9, high_freq=2.483e9, freq_step=1e6, delay=0, parent=None):
|
|
QtWidgets.QWidget.__init__(self, parent)
|
|
@@ -113,9 +121,9 @@ def __init__(self, data, low_freq=2.400e9, high_freq=2.483e9, freq_step=1e6, del
|
|
self._persisted_frames_depth = 350
|
|
self._path_max = None
|
|
|
|
- self._low_frequency = low_freq #2.400e9
|
|
- self._high_frequency = high_freq #2.483e9
|
|
- self._frequency_step = freq_step #1e6
|
|
+ self._low_frequency = low_freq # 2.400e9
|
|
+ self._high_frequency = high_freq # 2.483e9
|
|
+ self._frequency_step = freq_step # 1e6
|
|
self._high_dbm = 0.0
|
|
self._low_dbm = -100.0
|
|
|
|
@@ -155,8 +163,8 @@ def minimumSizeHint(self):
|
|
return QtCore.QSize(x_points * 4, y_points * 1)
|
|
|
|
def _new_frame(self, frequency_axis, rssi_values):
|
|
- #print repr(frequency_axis)
|
|
- #print repr(rssi_values)
|
|
+ # print repr(frequency_axis)
|
|
+ # print repr(rssi_values)
|
|
self._frame = (frequency_axis, rssi_values)
|
|
if self._persisted_frames is None:
|
|
self._new_persisted_frames(len(frequency_axis))
|
|
@@ -211,32 +219,34 @@ def _draw_graph(self):
|
|
pen.setBrush(Qt.red)
|
|
pen.setStyle(Qt.DotLine)
|
|
painter.setPen(pen)
|
|
- painter.drawText(QPointF(x_axis[max_max] + 4, 30), '%.06f' % (old_div(self._x_to_hz(x_axis[max_max]), 1e6)))
|
|
- painter.drawText(QPointF(30, y_max[max_max] - 4), '%d' % (self._y_to_dbm(y_max[max_max])))
|
|
+ painter.drawText(QPointF(x_axis[max_max] + 4, 30), '{:.06f}'.format(old_div(
|
|
+ self._x_to_hz(x_axis[max_max]),
|
|
+ 1e6)))
|
|
+ painter.drawText(QPointF(30, y_max[max_max] - 4), '{:d}'.format(self._y_to_dbm(y_max[max_max])))
|
|
painter.drawLine(QPointF(x_axis[max_max], 0), QPointF(x_axis[max_max], self.height()))
|
|
painter.drawLine(QPointF(0, y_max[max_max]), QPointF(self.width(), y_max[max_max]))
|
|
if self._mouse_x:
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 58), '(%.06f)' % ((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x, 1e6))))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 58), '({:.06f})'.format((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x, 1e6))))
|
|
pen.setBrush(Qt.yellow)
|
|
painter.setPen(pen)
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 44), '%.06f' % (old_div(self._mouse_x, 1e6)))
|
|
- painter.drawText(QPointF(54, self._dbm_to_y(self._mouse_y) - 4), '%d' % (self._mouse_y))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 44), '{:.06f}'.format(old_div(self._mouse_x, 1e6)))
|
|
+ painter.drawText(QPointF(54, self._dbm_to_y(self._mouse_y) - 4), '{:d}'.format(self._mouse_y))
|
|
painter.drawLine(QPointF(self._hz_to_x(self._mouse_x), 0), QPointF(self._hz_to_x(self._mouse_x), self.height()))
|
|
painter.drawLine(QPointF(0, self._dbm_to_y(self._mouse_y)), QPointF(self.width(), self._dbm_to_y(self._mouse_y)))
|
|
if self._mouse_x2:
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 118), '(%.06f)' % ((old_div(self._mouse_x, 1e6)) - (old_div(self._mouse_x2, 1e6))))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 118), '({:.06f})'.format((old_div(self._mouse_x, 1e6)) - (old_div(self._mouse_x2, 1e6))))
|
|
if self._mouse_x2:
|
|
pen.setBrush(Qt.red)
|
|
painter.setPen(pen)
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 102), '(%.06f)' % ((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x2, 1e6))))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 102), '({:.06f})'.format((old_div(self._x_to_hz(x_axis[max_max]), 1e6)) - (old_div(self._mouse_x2, 1e6))))
|
|
pen.setBrush(Qt.magenta)
|
|
painter.setPen(pen)
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 88), '%.06f' % (old_div(self._mouse_x2, 1e6)))
|
|
- painter.drawText(QPointF(78, self._dbm_to_y(self._mouse_y2) - 4), '%d' % (self._mouse_y2))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x2) + 4, 88), '{:.06f}'.format(old_div(self._mouse_x2, 1e6)))
|
|
+ painter.drawText(QPointF(78, self._dbm_to_y(self._mouse_y2) - 4), '{:d}'.format(self._mouse_y2))
|
|
painter.drawLine(QPointF(self._hz_to_x(self._mouse_x2), 0), QPointF(self._hz_to_x(self._mouse_x2), self.height()))
|
|
painter.drawLine(QPointF(0, self._dbm_to_y(self._mouse_y2)), QPointF(self.width(), self._dbm_to_y(self._mouse_y2)))
|
|
if self._mouse_x:
|
|
- painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 74), '(%.06f)' % ((old_div(self._mouse_x2, 1e6)) - (old_div(self._mouse_x, 1e6))))
|
|
+ painter.drawText(QPointF(self._hz_to_x(self._mouse_x) + 4, 74), '({:.06f})'.format((old_div(self._mouse_x2, 1e6)) - (old_div(self._mouse_x, 1e6))))
|
|
finally:
|
|
painter.end()
|
|
|
|
@@ -263,10 +273,10 @@ def _draw_reticle(self):
|
|
painter.setPen(Qt.blue)
|
|
|
|
# TODO: Removed to support old (<1.0) PySide API in Ubuntu 10.10
|
|
- #painter.drawLines(dbm_lines)
|
|
+ # painter.drawLines(dbm_lines)
|
|
for dbm_line in dbm_lines: painter.drawLine(dbm_line)
|
|
# TODO: Removed to support old (<1.0) PySide API in Ubuntu 10.10
|
|
- #painter.drawLines(frequency_lines)
|
|
+ # painter.drawLines(frequency_lines)
|
|
for frequency_line in frequency_lines: painter.drawLine(frequency_line)
|
|
|
|
painter.setPen(Qt.white)
|
|
@@ -305,7 +315,7 @@ def _hz_to_x(self, frequency_hz):
|
|
delta = frequency_hz - self._low_frequency
|
|
range = self._high_frequency - self._low_frequency
|
|
normalized = old_div(delta, range)
|
|
- #print "freq: %s \nlow: %s \nhigh: %s \ndelta: %s \nrange: %s \nnormalized: %s" % (frequency_hz, self._low_frequency, self._high_frequency, delta, range, normalized)
|
|
+ # print "freq: %s \nlow: %s \nhigh: %s \ndelta: %s \nrange: %s \nnormalized: %s" % (frequency_hz, self._low_frequency, self._high_frequency, delta, range, normalized)
|
|
return normalized * self.width()
|
|
|
|
def _x_to_hz(self, x):
|
|
@@ -326,6 +336,7 @@ def _y_to_dbm(self, y):
|
|
delta = tmp * range
|
|
return self._high_dbm - delta
|
|
|
|
+
|
|
class Window(QtWidgets.QWidget):
|
|
def __init__(self, data, low_freq, high_freq, spacing, delay=.01, parent=None):
|
|
QtWidgets.QWidget.__init__(self, parent)
|
|
@@ -333,7 +344,7 @@ def __init__(self, data, low_freq, high_freq, spacing, delay=.01, parent=None):
|
|
self._low_freq = low_freq
|
|
self._high_freq = high_freq
|
|
self._spacing = spacing
|
|
- self._delay= delay
|
|
+ self._delay = delay
|
|
|
|
self._data = self._open_data(data)
|
|
|
|
@@ -359,7 +370,7 @@ def _open_data(self, data):
|
|
numChans = int(old_div((self._high_freq-self._low_freq), self._spacing))
|
|
data._doSpecAn(freq, spc, numChans)
|
|
else:
|
|
- data = pickle.load(file(data,'rb'))
|
|
+ data = pickle.load(open(data, 'rb'))
|
|
if data is None:
|
|
raise Exception('Data not found')
|
|
return data
|
|
@@ -391,21 +402,21 @@ def mousePressEvent(self, event):
|
|
def keyPressEvent(self, event):
|
|
# test for non-alphanumeric keys first
|
|
# arrow key
|
|
- if event.key() >= Qt.Key_Left and event.key() <= Qt.Key_Down:
|
|
+ if Qt.Key_Left <= event.key() <= Qt.Key_Down:
|
|
# left
|
|
if event.key() == Qt.Key_Left:
|
|
- self._low_freq -= self._spacing
|
|
- self._high_freq -= self._spacing
|
|
+ self._low_freq -= self._spacing
|
|
+ self._high_freq -= self._spacing
|
|
# up
|
|
if event.key() == Qt.Key_Up:
|
|
- self._spacing = int(self._spacing * 1.1)
|
|
+ self._spacing = int(self._spacing * 1.1)
|
|
# right
|
|
if event.key() == Qt.Key_Right:
|
|
- self._low_freq += self._spacing
|
|
- self._high_freq += self._spacing
|
|
+ self._low_freq += self._spacing
|
|
+ self._high_freq += self._spacing
|
|
# down
|
|
if event.key() == Qt.Key_Down:
|
|
- self._spacing = int(self._spacing / 1.1)
|
|
+ self._spacing = int(self._spacing / 1.1)
|
|
# this will redraw window with the correct labels etc., but we also need to re-start
|
|
# specan on the dongle, and I'm not sure how best to do that!
|
|
self.layout().removeWidget(self.render_area)
|
|
@@ -416,7 +427,7 @@ def keyPressEvent(self, event):
|
|
|
|
# anything else is alphanumeric
|
|
try:
|
|
- key= correctbytes(event.key()).upper()
|
|
+ key = correctbytes(event.key()).upper()
|
|
event.accept()
|
|
except:
|
|
print('Unknown key pressed: 0x%x' % event.key())
|
|
@@ -449,6 +460,7 @@ def keyPressEvent(self, event):
|
|
return
|
|
print('Unsupported key pressed:', key)
|
|
|
|
+
|
|
if __name__ == '__main__':
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
f = sys.argv[1]
|
|
@@ -461,6 +473,6 @@ def keyPressEvent(self, event):
|
|
delay = .01
|
|
|
|
window = Window(f, fbase, fhigh, fdelta, delay)
|
|
- #window = Window('../data.again', 902.0, 928.0, 3e-1)
|
|
+ # window = Window('../data.again', 902.0, 928.0, 3e-1)
|
|
window.show()
|
|
sys.exit(app.exec_())
|
|
diff --git a/rflib/chipcon_nic.py b/rflib/chipcon_nic.py
|
|
index dfeec3d..9255360 100644
|
|
--- a/rflib/chipcon_nic.py
|
|
+++ b/rflib/chipcon_nic.py
|
|
@@ -4,10 +4,6 @@
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
|
|
-from builtins import bytes
|
|
-from builtins import hex
|
|
-from builtins import range
|
|
-from builtins import object
|
|
from past.utils import old_div
|
|
import re
|
|
import sys
|
|
@@ -21,6 +17,7 @@
|
|
from .bits import correctbytes
|
|
from .const import *
|
|
|
|
+
|
|
def makeFriendlyAscii(instring):
|
|
out = []
|
|
start = 0
|
|
@@ -28,36 +25,34 @@ def makeFriendlyAscii(instring):
|
|
instrlen = len(instring)
|
|
|
|
for cidx in range(instrlen):
|
|
- if (0x20 < ord(instring[cidx]) < 0x7f):
|
|
- if last < cidx-1:
|
|
- out.append( "." * (cidx-1-last))
|
|
+ if 0x20 < ord(instring[cidx]) < 0x7f:
|
|
+ if last < cidx - 1:
|
|
+ out.append("." * (cidx - 1 - last))
|
|
start = cidx
|
|
last = cidx
|
|
else:
|
|
if last == cidx-1:
|
|
- out.append( instring[ start:last+1 ] )
|
|
+ out.append(instring[start:last + 1])
|
|
|
|
if last != cidx:
|
|
out.append( "." * (cidx-last) )
|
|
- else: # if start == 0:
|
|
- out.append( instring[ start: ] )
|
|
+ else: # if start == 0:
|
|
+ out.append(instring[start:])
|
|
|
|
return ''.join(out)
|
|
|
|
|
|
-
|
|
-
|
|
def calculateT2(tick_ms, mhz=24):
|
|
# each tick, not each cycle
|
|
- TICKSPD = [(old_div(mhz*1000000,pow(2,x))) for x in range(8)]
|
|
+ TICKSPD = [(old_div(mhz * 1000000, pow(2, x))) for x in range(8)]
|
|
|
|
- tick_ms = 1.0*tick_ms/1000
|
|
+ tick_ms = 1.0 * tick_ms / 1000
|
|
candidates = []
|
|
for tickidx in range(8):
|
|
for tipidx in range(4):
|
|
for PR in range(256):
|
|
T = 1.0 * PR * TIP[tipidx] / TICKSPD[tickidx]
|
|
- if abs(T-tick_ms) < .010:
|
|
+ if abs(T - tick_ms) < .010:
|
|
candidates.append((T, tickidx, tipidx, PR))
|
|
diff = 1024
|
|
best = None
|
|
@@ -66,30 +61,35 @@ def calculateT2(tick_ms, mhz=24):
|
|
best = c
|
|
diff = abs(c[0] - tick_ms)
|
|
return best
|
|
- #return ms, candidates, best
|
|
+ # return ms, candidates, best
|
|
|
|
|
|
class EnDeCode(object):
|
|
def encode(self, msg):
|
|
raise Exception("EnDeCode.encode() not implemented. Each subclass must implement their own")
|
|
+
|
|
def decode(self, msg):
|
|
raise Exception("EnDeCode.encode() not implemented. Each subclass must implement their own")
|
|
|
|
|
|
def savePkts(pkts, filename):
|
|
- pickle.dump(pkts, file(filename, 'a'))
|
|
+ pickle.dump(pkts, open(filename, 'a'))
|
|
+
|
|
+
|
|
def loadPkts(filename):
|
|
- return pickle.load( file(filename, 'r'))
|
|
+ return pickle.load(open(filename, 'r'))
|
|
+
|
|
|
|
def printSyncWords(syncworddict):
|
|
print("SyncWords seen:")
|
|
|
|
tmp = []
|
|
- for x,y in list(syncworddict.items()):
|
|
- tmp.append((y,x))
|
|
+ for x, y in list(syncworddict.items()):
|
|
+ tmp.append((y, x))
|
|
tmp.sort()
|
|
- for y,x in tmp:
|
|
- print("0x%.4x: %d" % (x,y))
|
|
+ for y, x in tmp:
|
|
+ print("{:#x}: {:d}".format(x[0:3], y))
|
|
+
|
|
|
|
class NICxx11(USBDongle):
|
|
'''
|
|
@@ -115,7 +115,7 @@ def setRfMode(self, rfmode, parms=''):
|
|
sets the radio state to "rfmode", and makes
|
|
'''
|
|
self._rfmode = rfmode
|
|
- r = self.send(APP_SYSTEM, SYS_CMD_RFMODE, "%c" % (self._rfmode) + parms)
|
|
+ r = self.send(APP_SYSTEM, SYS_CMD_RFMODE, "{:c}".format(self._rfmode) + parms)
|
|
|
|
### set standard radio state to TX/RX/IDLE (TX is pretty much only good for jamming). TX/RX modes are set to return to whatever state you choose here.
|
|
def setModeTX(self):
|
|
@@ -138,38 +138,37 @@ def setModeIDLE(self):
|
|
AND: set radio to return to IDLE state when done with other states
|
|
'''
|
|
self.setRfMode(RFST_SIDLE)
|
|
-
|
|
|
|
### send raw state change to radio (doesn't update the return state for after RX/TX occurs)
|
|
def strobeModeTX(self):
|
|
'''
|
|
set radio to TX state (transient)
|
|
'''
|
|
- self.poke(X_RFST, "%c"%RFST_STX)
|
|
+ self.poke(X_RFST, "{:c}".format(RFST_STX))
|
|
|
|
def strobeModeRX(self):
|
|
'''
|
|
set radio to RX state (transient)
|
|
'''
|
|
- self.poke(X_RFST, "%c"%RFST_SRX)
|
|
+ self.poke(X_RFST, "{:c}".format(RFST_SRX))
|
|
|
|
def strobeModeIDLE(self):
|
|
'''
|
|
set radio to IDLE state (transient)
|
|
'''
|
|
- self.poke(X_RFST, "%c"%RFST_SIDLE)
|
|
+ self.poke(X_RFST, "{:c}".format(RFST_SIDLE))
|
|
|
|
def strobeModeFSTXON(self):
|
|
'''
|
|
set radio to FSTXON state (transient)
|
|
'''
|
|
- self.poke(X_RFST, "%c"%RFST_SFSTXON)
|
|
+ self.poke(X_RFST, "{:c}".format(RFST_SFSTXON))
|
|
|
|
def strobeModeCAL(self):
|
|
'''
|
|
set radio to CAL state (will return to whichever state is configured (via setMode* functions)
|
|
'''
|
|
- self.poke(X_RFST, "%c"%RFST_SCAL)
|
|
+ self.poke(X_RFST, "{:c}".format(RFST_SCAL))
|
|
|
|
def strobeModeReturn(self, marcstate=None):
|
|
"""
|
|
@@ -180,10 +179,7 @@ def strobeModeReturn(self, marcstate=None):
|
|
#marcstate = self.radiocfg.marcstate
|
|
#if self._debug: print("MARCSTATE: %x returning to %x" % (marcstate, MARC_STATE_MAPPINGS[marcstate][2]) )
|
|
#self.poke(X_RFST, "%c"%MARC_STATE_MAPPINGS[marcstate][2])
|
|
- self.poke(X_RFST, "%c" % self._rfmode)
|
|
-
|
|
-
|
|
-
|
|
+ self.poke(X_RFST, "{:c}".format(self._rfmode))
|
|
|
|
#### radio config #####
|
|
def getRadioConfig(self):
|
|
@@ -191,7 +187,7 @@ def getRadioConfig(self):
|
|
self.radiocfg.vsParse(bytedef)
|
|
return bytedef
|
|
|
|
- def setRadioConfig(self, bytedef = None):
|
|
+ def setRadioConfig(self, bytedef=None):
|
|
if bytedef is None:
|
|
bytedef = self.radiocfg.vsEmit()
|
|
|
|
@@ -211,7 +207,6 @@ def setRadioConfig(self, bytedef = None):
|
|
|
|
return bytedef
|
|
|
|
-
|
|
##### GETTER/SETTERS for Radio Config/Status #####
|
|
### radio state
|
|
def setLedMode(self, ledmode):
|
|
@@ -219,7 +214,7 @@ def setLedMode(self, ledmode):
|
|
sets the led state to "ledmode"
|
|
'''
|
|
self._ledmode = ledmode
|
|
- r = self.send(APP_SYSTEM, SYS_CMD_LED_MODE, "%c" % (self._ledmode))
|
|
+ r = self.send(APP_SYSTEM, SYS_CMD_LED_MODE, "{:c}".format(self._ledmode))
|
|
|
|
def getMARCSTATE(self, radiocfg=None):
|
|
if radiocfg is None:
|
|
@@ -254,7 +249,7 @@ def setRFRegister(self, regaddr, value, suppress=False):
|
|
|
|
def setRFbits(self, addr, bitnum, bitsz, val, suppress=False):
|
|
''' sets individual bits of a register '''
|
|
- mask = ((1<<bitsz) - 1) << bitnum
|
|
+ mask = ((1 << bitsz) - 1) << bitnum
|
|
rmask = ~mask
|
|
|
|
temp = ord(self.peek(addr)) & rmask
|
|
@@ -273,7 +268,7 @@ def setEnableCCA(self, mode=3, absthresh=0, relthresh=1, magn=3, radiocfg=None):
|
|
if radiocfg is None:
|
|
radiocfg = self.radiocfg
|
|
else:
|
|
- applyConfig = False
|
|
+ applyConfig = False # FIXME applyConfig is never used. Remove it and the else clause?
|
|
|
|
mcsm1 = radiocfg.mcsm1 & 0xf
|
|
mcsm1 |= (mode << 4)
|
|
@@ -299,13 +294,13 @@ def setFreq(self, freq=902000000, mhz=24, radiocfg=None, applyConfig=True):
|
|
freqmult = old_div((0x10000 / 1000000.0), mhz)
|
|
num = int(freq * freqmult)
|
|
radiocfg.freq2 = num >> 16
|
|
- radiocfg.freq1 = (num>>8) & 0xff
|
|
+ radiocfg.freq1 = (num >> 8) & 0xff
|
|
radiocfg.freq0 = num & 0xff
|
|
|
|
- if (freq > FREQ_EDGE_900 and freq < FREQ_MID_900) or (freq > FREQ_EDGE_400 and freq < FREQ_MID_400) or (freq < FREQ_MID_300):
|
|
+ if (FREQ_EDGE_900 < freq < FREQ_MID_900) or (FREQ_EDGE_400 < freq < FREQ_MID_400) or (freq < FREQ_MID_300):
|
|
# select low VCO
|
|
radiocfg.fscal2 = 0x0A
|
|
- elif freq <1e9 and ((freq > FREQ_MID_900) or (freq > FREQ_MID_400) or (freq > FREQ_MID_300)):
|
|
+ elif freq < 1e9 and ((freq > FREQ_MID_900) or (freq > FREQ_MID_400) or (freq > FREQ_MID_300)):
|
|
# select high VCO
|
|
radiocfg.fscal2 = 0x2A
|
|
|
|
@@ -324,16 +319,16 @@ def setFreq(self, freq=902000000, mhz=24, radiocfg=None, applyConfig=True):
|
|
|
|
def getFreq(self, mhz=24, radiocfg=None):
|
|
freqmult = old_div((0x10000 / 1000000.0), mhz)
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- num = (radiocfg.freq2<<16) + (radiocfg.freq1<<8) + radiocfg.freq0
|
|
+ num = (radiocfg.freq2 << 16) + (radiocfg.freq1 << 8) + radiocfg.freq0
|
|
freq = old_div(num, freqmult)
|
|
return freq, hex(num)
|
|
|
|
def getFreqEst(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -344,7 +339,7 @@ def getFreqEst(self, radiocfg=None):
|
|
# the TI design note for this is missing from TI's main website but can be found here:
|
|
# http://e2e.ti.com/cfs-file/__key/telligent-evolution-components-attachments/00-155-01-00-00-73-46-38/DN015_5F00_Permanent_5F00_Frequency_5F00_Offset_5F00_Compensation.pdf
|
|
def adjustFreqOffset(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -354,7 +349,7 @@ def adjustFreqOffset(self, mhz=24, radiocfg=None):
|
|
|
|
# set 'standard' power - for more complex power shaping this will need to be done manually
|
|
def setPower(self, power=None, radiocfg=None, invert=False):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -379,63 +374,63 @@ def setPower(self, power=None, radiocfg=None, invert=False):
|
|
|
|
# max power settings are frequency dependent, so set frequency before calling
|
|
def setMaxPower(self, radiocfg=None, invert=False):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
freq= self.getFreq(radiocfg=radiocfg)[0]
|
|
|
|
if freq <= 400000000:
|
|
- power= 0xC2
|
|
+ power = 0xC2
|
|
elif freq <= 464000000:
|
|
- power= 0xC0
|
|
+ power = 0xC0
|
|
elif freq <= 900000000:
|
|
- power= 0xC2
|
|
+ power = 0xC2
|
|
else:
|
|
- power= 0xC0
|
|
+ power = 0xC0
|
|
|
|
self.setPower(power, radiocfg=radiocfg, invert=invert)
|
|
|
|
def setMdmModulation(self, mod, radiocfg=None, invert=False):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- if (mod) & ~MDMCFG2_MOD_FORMAT:
|
|
+ if mod & ~MDMCFG2_MOD_FORMAT:
|
|
raise Exception("Please use constants MOD_FORMAT_* to specify modulation and ")
|
|
|
|
radiocfg.mdmcfg2 &= ~MDMCFG2_MOD_FORMAT
|
|
- radiocfg.mdmcfg2 |= (mod)
|
|
+ radiocfg.mdmcfg2 |= mod
|
|
|
|
- power= None
|
|
+ power = None
|
|
# ASK_OOK needs to flip power table
|
|
if mod == MOD_ASK_OOK and not invert:
|
|
if radiocfg.pa_table1 == 0x00 and radiocfg.pa_table0 != 0x00:
|
|
- power= radiocfg.pa_table0
|
|
+ power = radiocfg.pa_table0
|
|
else:
|
|
if radiocfg.pa_table0 == 0x00 and radiocfg.pa_table1 != 0x00:
|
|
- power= radiocfg.pa_table1
|
|
+ power = radiocfg.pa_table1
|
|
|
|
self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2)
|
|
self.setPower(power, radiocfg=radiocfg, invert=invert)
|
|
|
|
def getMdmModulation(self, radiocfg=None):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
mdmcfg2 = radiocfg.mdmcfg2
|
|
- mod = (mdmcfg2) & MDMCFG2_MOD_FORMAT
|
|
+ mod = mdmcfg2 & MDMCFG2_MOD_FORMAT
|
|
return mod
|
|
|
|
def getMdmChanSpc(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
chanspc_m = radiocfg.mdmcfg0
|
|
chanspc_e = radiocfg.mdmcfg1 & 3
|
|
- chanspc = 1000000.0 * mhz/pow(2,18) * (256 + chanspc_m) * pow(2, chanspc_e)
|
|
+ chanspc = 1000000.0 * mhz/pow(2, 18) * (256 + chanspc_m) * pow(2, chanspc_e)
|
|
#print "chanspc_e: %x chanspc_m: %x chanspc: %f hz" % (chanspc_e, chanspc_m, chanspc)
|
|
return (chanspc)
|
|
|
|
@@ -449,11 +444,11 @@ def setMdmChanSpc(self, chanspc=None, chanspc_m=None, chanspc_e=None, mhz=24, ra
|
|
* chanspc
|
|
* chanspc_m and chanspc_e
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- if (chanspc != None):
|
|
+ if chanspc is not None:
|
|
for e in range(4):
|
|
m = int(((old_div(chanspc * pow(2,18), (1000000.0 * mhz * pow(2,e))))-256) +.5) # rounded evenly
|
|
if m < 256:
|
|
@@ -469,11 +464,11 @@ def setMdmChanSpc(self, chanspc=None, chanspc_m=None, chanspc_e=None, mhz=24, ra
|
|
radiocfg.mdmcfg1 &= ~MDMCFG1_CHANSPC_E # clear out old exponent value
|
|
radiocfg.mdmcfg1 |= chanspc_e
|
|
radiocfg.mdmcfg0 = chanspc_m
|
|
- self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1))
|
|
- self.setRFRegister(MDMCFG0, (radiocfg.mdmcfg0))
|
|
+ self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1)
|
|
+ self.setRFRegister(MDMCFG0, radiocfg.mdmcfg0)
|
|
|
|
def makePktVLEN(self, maxlen=RF_MAX_TX_BLOCK, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -488,12 +483,12 @@ def makePktVLEN(self, maxlen=RF_MAX_TX_BLOCK, radiocfg=None):
|
|
|
|
|
|
def makePktFLEN(self, flen=RF_MAX_TX_BLOCK, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
if flen > EP5OUT_BUFFER_SIZE - 4:
|
|
- raise Exception("Packet too large (%d bytes). Maximum fixed length packet is %d bytes." % (flen, EP5OUT_BUFFER_SIZE - 6))
|
|
+ raise Exception("Packet too large ({:d} bytes). Maximum fixed length packet is {:d} bytes.".format(flen, EP5OUT_BUFFER_SIZE - 6))
|
|
|
|
radiocfg.pktctrl0 &= ~PKTCTRL0_LENGTH_CONFIG
|
|
# if we're sending a large block, pktlen is dealt with by the firmware
|
|
@@ -502,8 +497,8 @@ def makePktFLEN(self, flen=RF_MAX_TX_BLOCK, radiocfg=None):
|
|
radiocfg.pktlen = 0x00
|
|
else:
|
|
radiocfg.pktlen = flen
|
|
- self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0))
|
|
- self.setRFRegister(PKTLEN, (radiocfg.pktlen))
|
|
+ self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0)
|
|
+ self.setRFRegister(PKTLEN, radiocfg.pktlen)
|
|
|
|
def getPktLEN(self):
|
|
'''
|
|
@@ -512,54 +507,54 @@ def getPktLEN(self):
|
|
return (self.radiocfg.pktlen, self.radiocfg.pktctrl0 & PKTCTRL0_LENGTH_CONFIG)
|
|
|
|
def setEnablePktCRC(self, enable=True, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- crcE = (0,1)[enable]<<2
|
|
- crcM = ~(1<<2)
|
|
+ crcE = (0,1)[enable] << 2
|
|
+ crcM = ~(1 << 2)
|
|
radiocfg.pktctrl0 &= crcM
|
|
radiocfg.pktctrl0 |= crcE
|
|
- self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0))
|
|
+ self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0)
|
|
|
|
def getEnablePktCRC(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- return (radiocfg.pktctrl0 >>2) & 0x1
|
|
+ return (radiocfg.pktctrl0 >> 2) & 0x1
|
|
|
|
def setEnablePktDataWhitening(self, enable=True, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- dwEnable = (0,1)[enable]<<6
|
|
+ dwEnable = (0, 1)[enable] << 6
|
|
radiocfg.pktctrl0 &= ~PKTCTRL0_WHITE_DATA
|
|
radiocfg.pktctrl0 |= dwEnable
|
|
- self.setRFRegister(PKTCTRL0, (radiocfg.pktctrl0))
|
|
+ self.setRFRegister(PKTCTRL0, radiocfg.pktctrl0)
|
|
|
|
def getEnablePktDataWhitening(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- return (radiocfg.pktctrl0 >>6) & 0x1
|
|
+ return (radiocfg.pktctrl0 >> 6) & 0x1
|
|
|
|
def setPktPQT(self, num=3, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
num &= 7
|
|
num <<= 5
|
|
- numM = ~(7<<5)
|
|
+ numM = ~(7 << 5)
|
|
radiocfg.pktctrl1 &= numM
|
|
radiocfg.pktctrl1 |= num
|
|
- self.setRFRegister(PKTCTRL1, (radiocfg.pktctrl1))
|
|
+ self.setRFRegister(PKTCTRL1, radiocfg.pktctrl1)
|
|
|
|
def getPktPQT(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -570,82 +565,81 @@ def setEnablePktAppendStatus(self, enable=True, radiocfg=None):
|
|
enable append status bytes. two bytes will be appended to the payload of the packet, containing
|
|
RSSI and LQI values as well as CRC OK.
|
|
'''
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.pktctrl1 &= ~PKTCTRL1_APPEND_STATUS
|
|
- radiocfg.pktctrl1 |= (enable<<2)
|
|
+ radiocfg.pktctrl1 |= (enable << 2)
|
|
self.setRFRegister(PKTCTRL1, radiocfg.pktctrl1)
|
|
|
|
def getEnablePktAppendStatus(self, radiocfg=None):
|
|
'''
|
|
return append status bytes setting.
|
|
'''
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
pktctrl1 = radiocfg.pktctrl1
|
|
- append = (pktctrl1>>2) & 0x01
|
|
+ append = (pktctrl1 >> 2) & 0x01
|
|
return append
|
|
|
|
def setEnableMdmManchester(self, enable=True, radiocfg=None):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.mdmcfg2 &= ~MDMCFG2_MANCHESTER_EN
|
|
- radiocfg.mdmcfg2 |= (enable<<3)
|
|
+ radiocfg.mdmcfg2 |= (enable << 3)
|
|
self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2)
|
|
|
|
def getEnableMdmManchester(self, radiocfg=None):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
mdmcfg2 = radiocfg.mdmcfg2
|
|
- mchstr = (mdmcfg2>>3) & 0x01
|
|
+ mchstr = (mdmcfg2 >> 3) & 0x01
|
|
return mchstr
|
|
|
|
def setEnableMdmFEC(self, enable=True, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- fecEnable = (0,1)[enable]<<7
|
|
+ fecEnable = (0, 1)[enable] << 7
|
|
radiocfg.mdmcfg1 &= ~MFMCFG1_FEC_EN
|
|
radiocfg.mdmcfg1 |= fecEnable
|
|
- self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1))
|
|
+ self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1)
|
|
|
|
def getEnableMdmFEC(self, radiocfg=None):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
mdmcfg1 = radiocfg.mdmcfg1
|
|
- fecEnable = (mdmcfg1>>7) & 0x01
|
|
+ fecEnable = (mdmcfg1 >> 7) & 0x01
|
|
return fecEnable
|
|
|
|
def setEnableMdmDCFilter(self, enable=True, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- dcfEnable = (0,1)[enable]<<7
|
|
+ dcfEnable = (0, 1)[enable] << 7
|
|
radiocfg.mdmcfg2 &= ~MDMCFG2_DEM_DCFILT_OFF
|
|
radiocfg.mdmcfg2 |= dcfEnable
|
|
self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2)
|
|
|
|
def getEnableMdmDCFilter(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- dcfEnable = (radiocfg.mdmcfg2>>7) & 0x1
|
|
+ dcfEnable = (radiocfg.mdmcfg2 >> 7) & 0x1
|
|
return dcfEnable
|
|
|
|
-
|
|
def setFsIF(self, freq_if, mhz=24, radiocfg=None):
|
|
'''
|
|
Note that the SmartRF Studio software
|
|
@@ -653,43 +647,42 @@ def setFsIF(self, freq_if, mhz=24, radiocfg=None):
|
|
setting based on channel spacing and channel
|
|
filter bandwidth. (from cc1110f32.pdf)
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
ifBits = old_div(freq_if * pow(2,10), (1000000.0 * mhz))
|
|
ifBits = int(ifBits + .5) # rounded evenly
|
|
|
|
- if ifBits >0x1f:
|
|
- raise Exception("FAIL: freq_if is too high? freqbits: %x (must be <0x1f)" % ifBits)
|
|
- radiocfg.fsctrl1 &= ~(0x1f)
|
|
+ if ifBits > 0x1f:
|
|
+ raise Exception("FAIL: freq_if is too high? freqbits: {:x} (must be <0x1f)".format(ifBits))
|
|
+ radiocfg.fsctrl1 &= ~0x1f
|
|
radiocfg.fsctrl1 |= int(ifBits)
|
|
- self.setRFRegister(FSCTRL1, (radiocfg.fsctrl1))
|
|
+ self.setRFRegister(FSCTRL1, radiocfg.fsctrl1)
|
|
|
|
def getFsIF(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- freq_if = (radiocfg.fsctrl1&0x1f) * (1000000.0 * mhz / pow(2,10))
|
|
+ freq_if = (radiocfg.fsctrl1 & 0x1f) * (1000000.0 * mhz / pow(2, 10))
|
|
return freq_if
|
|
|
|
-
|
|
- def setFsOffset(self, if_off, mhz=24, radiocfg=None):
|
|
+ def setFsOffset(self, if_off, mhz=24, radiocfg=None): # FIXME mhz is never used, remove?
|
|
'''
|
|
Note that the SmartRF Studio software
|
|
automatically calculates the optimum register
|
|
setting based on channel spacing and channel
|
|
filter bandwidth. (from cc1110f32.pdf)
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.fsctrl0 = if_off
|
|
- self.setRFRegister(FSCTRL0, (radiocfg.fsctrl0))
|
|
+ self.setRFRegister(FSCTRL0, radiocfg.fsctrl0)
|
|
|
|
- def getFsOffset(self, mhz=24, radiocfg=None):
|
|
+ def getFsOffset(self, mhz=24, radiocfg=None): # FIXME mhz is never used, remove?
|
|
if radiocfg==None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
@@ -711,7 +704,7 @@ def setChannel(self, channr, radiocfg=None):
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.channr = channr
|
|
- self.setRFRegister(CHANNR, (radiocfg.channr))
|
|
+ self.setRFRegister(CHANNR, radiocfg.channr)
|
|
|
|
def setMdmChanBW(self, bw, mhz=24, radiocfg=None):
|
|
'''
|
|
@@ -747,14 +740,14 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None):
|
|
|
|
DR:500kb Mod:MSK RXBW:750kHz sensitive fsctrl1:0e mdmcfg:0e 55 73 43 11 dev:00 foc/bscfg:1d/1c agctrl:c7 00 b0 frend:b6 10 (IF_changes, Modulation of course, Deviation has different meaning with MSK)
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
chanbw_e = None
|
|
chanbw_m = None
|
|
for e in range(4):
|
|
- m = int(((old_div(mhz*1000000.0, (bw *pow(2,e) * 8.0 ))) - 4) + .5) # rounded evenly
|
|
+ m = int(((old_div(mhz*1000000.0, (bw *pow(2, e) * 8.0))) - 4) + .5) # rounded evenly
|
|
if m < 4:
|
|
chanbw_e = e
|
|
chanbw_m = m
|
|
@@ -762,12 +755,12 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None):
|
|
if chanbw_e is None:
|
|
raise Exception("ChanBW does not translate into acceptable parameters. Should you be changing this?")
|
|
|
|
- bw = 1000.0*mhz / (8.0*(4+chanbw_m) * pow(2,chanbw_e))
|
|
+ bw = 1000.0* mhz / (8.0 * (4 + chanbw_m) * pow(2, chanbw_e))
|
|
#print "chanbw_e: %x chanbw_m: %x chanbw: %f kHz" % (e, m, bw)
|
|
|
|
radiocfg.mdmcfg4 &= ~(MDMCFG4_CHANBW_E | MDMCFG4_CHANBW_M)
|
|
- radiocfg.mdmcfg4 |= ((chanbw_e<<6) | (chanbw_m<<4))
|
|
- self.setRFRegister(MDMCFG4, (radiocfg.mdmcfg4))
|
|
+ radiocfg.mdmcfg4 |= ((chanbw_e << 6) | (chanbw_m << 4))
|
|
+ self.setRFRegister(MDMCFG4, radiocfg.mdmcfg4)
|
|
|
|
# from http://www.cs.jhu.edu/~carlson/download/datasheets/ask_ook_settings.pdf
|
|
if bw > 102e3:
|
|
@@ -783,13 +776,13 @@ def setMdmChanBW(self, bw, mhz=24, radiocfg=None):
|
|
self.setRFRegister(TEST1, 0x35)
|
|
|
|
def getMdmChanBW(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
chanbw_e = (radiocfg.mdmcfg4 >> 6) & 0x3
|
|
chanbw_m = (radiocfg.mdmcfg4 >> 4) & 0x3
|
|
- bw = 1000000.0*mhz / (8.0*(4+chanbw_m) * pow(2,chanbw_e))
|
|
+ bw = 1000000.0*mhz / (8.0 * (4 + chanbw_m) * pow(2, chanbw_e))
|
|
#print "chanbw_e: %x chanbw_m: %x chanbw: %f hz" % (chanbw_e, chanbw_m, bw)
|
|
return bw
|
|
|
|
@@ -797,14 +790,14 @@ def setMdmDRate(self, drate, mhz=24, radiocfg=None):
|
|
'''
|
|
set the baud of data being modulated through the radio
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
drate_e = None
|
|
drate_m = None
|
|
for e in range(16):
|
|
- m = int((old_div(drate * pow(2,28), (pow(2,e)* (mhz*1000000.0)))-256) + .5) # rounded evenly
|
|
+ m = int((old_div(drate * pow(2, 28), (pow(2, e) * (mhz * 1000000.0))) - 256) + .5) # rounded evenly
|
|
if m < 256:
|
|
drate_e = e
|
|
drate_m = m
|
|
@@ -812,43 +805,43 @@ def setMdmDRate(self, drate, mhz=24, radiocfg=None):
|
|
if drate_e is None:
|
|
raise Exception("DRate does not translate into acceptable parameters. Should you be changing this?")
|
|
|
|
- drate = 1000000.0 * mhz * (256+drate_m) * pow(2,drate_e) / pow(2,28)
|
|
- if self._debug: print("drate_e: %x drate_m: %x drate: %f Hz" % (drate_e, drate_m, drate))
|
|
+ drate = 1000000.0 * mhz * (256 + drate_m) * pow(2, drate_e) / pow(2, 28)
|
|
+ if self._debug:
|
|
+ print("drate_e: {:x} drate_m: {:x} drate: {:f} Hz".format(drate_e, drate_m, drate))
|
|
|
|
radiocfg.mdmcfg3 = drate_m
|
|
radiocfg.mdmcfg4 &= ~MDMCFG4_DRATE_E
|
|
radiocfg.mdmcfg4 |= drate_e
|
|
- self.setRFRegister(MDMCFG3, (radiocfg.mdmcfg3))
|
|
- self.setRFRegister(MDMCFG4, (radiocfg.mdmcfg4))
|
|
+ self.setRFRegister(MDMCFG3, radiocfg.mdmcfg3)
|
|
+ self.setRFRegister(MDMCFG4, radiocfg.mdmcfg4)
|
|
|
|
def getMdmDRate(self, mhz=24, radiocfg=None):
|
|
'''
|
|
get the baud of data being modulated through the radio
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
drate_e = radiocfg.mdmcfg4 & 0xf
|
|
drate_m = radiocfg.mdmcfg3
|
|
|
|
- drate = 1000000.0 * mhz * (256+drate_m) * pow(2,drate_e) / pow(2,28)
|
|
+ drate = 1000000.0 * mhz * (256 + drate_m) * pow(2, drate_e) / pow(2, 28)
|
|
#print "drate_e: %x drate_m: %x drate: %f hz" % (drate_e, drate_m, drate)
|
|
return drate
|
|
-
|
|
-
|
|
+
|
|
def setMdmDeviatn(self, deviatn, mhz=24, radiocfg=None):
|
|
'''
|
|
configure the deviation settings for the given modulation scheme
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
dev_e = None
|
|
dev_m = None
|
|
for e in range(8):
|
|
- m = int((old_div(deviatn * pow(2,17), (pow(2,e)* (mhz*1000000.0)))-8) + .5) # rounded evenly
|
|
+ m = int((old_div(deviatn * pow(2, 17), (pow(2, e) * (mhz * 1000000.0))) - 8) + .5) # rounded evenly
|
|
if m < 8:
|
|
dev_e = e
|
|
dev_m = m
|
|
@@ -856,61 +849,61 @@ def setMdmDeviatn(self, deviatn, mhz=24, radiocfg=None):
|
|
if dev_e is None:
|
|
raise Exception("Deviation does not translate into acceptable parameters. Should you be changing this?")
|
|
|
|
- dev = 1000000.0 * mhz * (8+dev_m) * pow(2,dev_e) / pow(2,17)
|
|
+ dev = 1000000.0 * mhz * (8 + dev_m) * pow(2, dev_e) / pow(2, 17)
|
|
#print "dev_e: %x dev_m: %x deviatn: %f Hz" % (e, m, dev)
|
|
|
|
radiocfg.deviatn = (dev_e << 4) | dev_m
|
|
self.setRFRegister(DEVIATN, radiocfg.deviatn)
|
|
|
|
def getMdmDeviatn(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
dev_e = radiocfg.deviatn >> 4
|
|
dev_m = radiocfg.deviatn & DEVIATN_DEVIATION_M
|
|
- dev = 1000000.0 * mhz * (8+dev_m) * pow(2,dev_e) / pow(2,17)
|
|
+ dev = 1000000.0 * mhz * (8 + dev_m) * pow(2, dev_e) / pow(2, 17)
|
|
return dev
|
|
|
|
def getMdmSyncWord(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
return (radiocfg.sync1 << 8) + radiocfg.sync0
|
|
|
|
def setMdmSyncWord(self, word, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.sync1 = word >> 8
|
|
radiocfg.sync0 = word & 0xff
|
|
- self.setRFRegister(SYNC1, (radiocfg.sync1))
|
|
- self.setRFRegister(SYNC0, (radiocfg.sync0))
|
|
+ self.setRFRegister(SYNC1, radiocfg.sync1)
|
|
+ self.setRFRegister(SYNC0, radiocfg.sync0)
|
|
|
|
def getMdmSyncMode(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
return radiocfg.mdmcfg2 & MDMCFG2_SYNC_MODE
|
|
|
|
def setMdmSyncMode(self, syncmode=SYNCM_15_of_16, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.mdmcfg2 &= ~MDMCFG2_SYNC_MODE
|
|
radiocfg.mdmcfg2 |= syncmode
|
|
- self.setRFRegister(MDMCFG2, (radiocfg.mdmcfg2))
|
|
+ self.setRFRegister(MDMCFG2, radiocfg.mdmcfg2)
|
|
|
|
def getMdmNumPreamble(self, radiocfg=None):
|
|
'''
|
|
get the minimum number of preamble bits to be transmitted. note this is a flag, not a count
|
|
so the return value must be interpeted - e.g. 0x30 == 0x03 << 4 == MFMCFG1_NUM_PREAMBLE_6 == 6 bytes
|
|
'''
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -921,19 +914,19 @@ def setMdmNumPreamble(self, preamble=MFMCFG1_NUM_PREAMBLE_4, radiocfg=None):
|
|
'''
|
|
set the minimum number of preamble bits to be transmitted (default: MFMCFG1_NUM_PREAMBLE_4)
|
|
'''
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.mdmcfg1 &= ~MFMCFG1_NUM_PREAMBLE
|
|
radiocfg.mdmcfg1 |= preamble
|
|
- self.setRFRegister(MDMCFG1, (radiocfg.mdmcfg1))
|
|
+ self.setRFRegister(MDMCFG1, radiocfg.mdmcfg1)
|
|
|
|
def getBSLimit(self, radiocfg=None):
|
|
'''
|
|
get the saturation point for the data rate offset compensation algorithm
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -943,13 +936,13 @@ def setBSLimit(self, bslimit, radiocfg=None):
|
|
'''
|
|
set the saturation point for the data rate offset compensation algorithm
|
|
'''
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
radiocfg.bscfg &= ~BSCFG_BS_LIMIT
|
|
radiocfg.bscfg |= bslimit
|
|
- self.setRFRegister(BSCFG, (radiocfg.bscfg))
|
|
+ self.setRFRegister(BSCFG, radiocfg.bscfg)
|
|
|
|
def calculateMdmDeviatn(self, mhz=24, radiocfg=None):
|
|
''' calculates the optimal DEVIATN setting for the current freq/baud
|
|
@@ -964,9 +957,9 @@ def calculateMdmDeviatn(self, mhz=24, radiocfg=None):
|
|
if baud <= 2400:
|
|
deviatn = 5100
|
|
elif baud <= 38400:
|
|
- deviatn = 20000 * (old_div((baud-2400),36000))
|
|
+ deviatn = 20000 * (old_div((baud - 2400), 36000))
|
|
else:
|
|
- deviatn = 129000 * (old_div((baud-38400),211600))
|
|
+ deviatn = 129000 * (old_div((baud - 38400), 211600))
|
|
self.setMdmDeviatn(deviatn)
|
|
|
|
def calculatePktChanBW(self, mhz=24, radiocfg=None):
|
|
@@ -979,13 +972,14 @@ def calculatePktChanBW(self, mhz=24, radiocfg=None):
|
|
250 kbaud BW: 600khz
|
|
'''
|
|
freq, freqhex = self.getFreq()
|
|
- center_freq = freq + 14000000
|
|
+ center_freq = freq + 14000000 # FIXME center_freq isn't used. Remove?
|
|
freq_uncertainty = 20e-6 * freq # +-20ppm
|
|
freq_uncertainty *= 2 # both xmitter and receiver
|
|
#minbw = (2 * freq_uncertainty) + self.getMdmDRate() # uncertainty for both sender/receiver
|
|
minbw = (self.getMdmDRate() + freq_uncertainty)
|
|
|
|
- possibles = [ 53e3,63e3,75e3,93e3,107e3,125e3,150e3,188e3,214e3,250e3,300e3,375e3,428e3,500e3,600e3,750e3, ]
|
|
+ possibles = [53e3, 63e3, 75e3, 93e3, 107e3, 125e3, 150e3, 188e3, 214e3, 250e3, 300e3, 375e3, 428e3, 500e3,
|
|
+ 600e3, 750e3,]
|
|
for bw in possibles:
|
|
#if (.8 * bw) > minbw: # can't occupy more the 80% of BW
|
|
if (bw) > minbw:
|
|
@@ -1002,6 +996,7 @@ def calculateFsIF(self, mhz=24, radiocfg=None):
|
|
500 kbaud IF: 328khz
|
|
'''
|
|
pass
|
|
+
|
|
def calculateFsOffset(self, mhz=24, radiocfg=None):
|
|
''' calculates the optimal FreqOffset setting for the current freq/baud
|
|
* totally experimental *
|
|
@@ -1017,7 +1012,6 @@ def getLQI(self):
|
|
lqi = self.peek(LQI)
|
|
return lqi
|
|
|
|
-
|
|
def setAESmode(self, aesmode=AES_CRYPTO_DEFAULT):
|
|
'''
|
|
set AES crypto co-processor mode.
|
|
@@ -1062,7 +1056,7 @@ def setAESmode(self, aesmode=AES_CRYPTO_DEFAULT):
|
|
(ENCCS_MODE_CBC | AES_CRYPTO_OUT_ON | AES_CRYPTO_OUT_ENCRYPT | AES_CRYPTO_IN_ON | AES_CRYPTO_IN_DECRYPT)
|
|
|
|
'''
|
|
- return self.send(APP_NIC, NIC_SET_AES_MODE, "%c"%aesmode)
|
|
+ return self.send(APP_NIC, NIC_SET_AES_MODE, "{:c}".format(aesmode))
|
|
|
|
def getAESmode(self):
|
|
'''
|
|
@@ -1070,7 +1064,7 @@ def getAESmode(self):
|
|
'''
|
|
return self.send(APP_NIC, NIC_GET_AES_MODE, "")
|
|
|
|
- def setAESiv(self, iv= '\0'*16):
|
|
+ def setAESiv(self, iv='\0'*16):
|
|
'''
|
|
set the AES IV. this will persist until the next reboot, but it should be noted that some modes
|
|
update the IV automatically with each operation, so care must be taken with the higher level
|
|
@@ -1078,7 +1072,7 @@ def setAESiv(self, iv= '\0'*16):
|
|
'''
|
|
return self.send(APP_NIC, NIC_SET_AES_IV, iv)
|
|
|
|
- def setAESkey(self, key= '\0'*16):
|
|
+ def setAESkey(self, key='\0'*16):
|
|
'''
|
|
set the AES key. this will persist until the next reboot. key must be 128 bits.
|
|
'''
|
|
@@ -1088,7 +1082,8 @@ def setAmpMode(self, ampmode=0):
|
|
'''
|
|
set the amplifier mode (RF amp external to CC1111)
|
|
'''
|
|
- return self.send(APP_NIC, NIC_SET_AMP_MODE, "%c"%ampmode)
|
|
+ return self.send(APP_NIC, NIC_SET_AMP_MODE, "{:c}".format(ampmode))
|
|
+
|
|
def getAmpMode(self):
|
|
'''
|
|
get the amplifier mode (RF amp external to CC1111)
|
|
@@ -1120,7 +1115,7 @@ def RFxmit(self, data, repeat=0, offset=0):
|
|
waitlen = len(data)
|
|
waitlen += repeat * (len(data) - offset)
|
|
wait = USB_TX_WAIT * ((old_div(waitlen, RF_MAX_TX_BLOCK)) + 1)
|
|
- self.send(APP_NIC, NIC_XMIT, "%s" % struct.pack("<HHH",len(data),repeat,offset)+data, wait=wait)
|
|
+ self.send(APP_NIC, NIC_XMIT, "{}".format(struct.pack("<HHH", len(data), repeat, offset) + data), wait=wait)
|
|
|
|
def RFxmitLong(self, data, doencoding=True):
|
|
# encode, if necessary
|
|
@@ -1145,7 +1140,7 @@ def RFxmitLong(self, data, doencoding=True):
|
|
chunks.append(data[-(datalen % RF_MAX_TX_CHUNK):])
|
|
|
|
preload = old_div(RF_MAX_TX_BLOCK, RF_MAX_TX_CHUNK)
|
|
- retval, ts = self.send(APP_NIC, NIC_XMIT_LONG, "%s" % struct.pack("<HB",datalen,preload)+data[:RF_MAX_TX_CHUNK * preload], wait=wait*preload)
|
|
+ retval, ts = self.send(APP_NIC, NIC_XMIT_LONG, "{}".format(struct.pack("<HB", datalen, preload) + data[:RF_MAX_TX_CHUNK * preload]), wait=wait*preload)
|
|
#sys.stderr.write('=' + repr(retval))
|
|
error = struct.unpack("<B", retval[0])[0]
|
|
if error:
|
|
@@ -1156,7 +1151,7 @@ def RFxmitLong(self, data, doencoding=True):
|
|
chunk = chunks[chidx]
|
|
error = RC_TEMP_ERR_BUFFER_NOT_AVAILABLE
|
|
while error == RC_TEMP_ERR_BUFFER_NOT_AVAILABLE:
|
|
- retval,ts = self.send(APP_NIC, NIC_XMIT_LONG_MORE, "%s" % struct.pack("B", len(chunk))+chunk, wait=wait)
|
|
+ retval, ts = self.send(APP_NIC, NIC_XMIT_LONG_MORE, "{}".format(struct.pack("B", len(chunk))+chunk), wait=wait)
|
|
error = struct.unpack("<B", retval[0])[0]
|
|
if error:
|
|
return error
|
|
@@ -1164,7 +1159,7 @@ def RFxmitLong(self, data, doencoding=True):
|
|
# sys.stderr.write('.')
|
|
#sys.stderr.write('+')
|
|
# tell dongle we've finished
|
|
- retval,ts = self.send(APP_NIC, NIC_XMIT_LONG_MORE, "%s" % struct.pack("B", 0), wait=wait)
|
|
+ retval, ts = self.send(APP_NIC, NIC_XMIT_LONG_MORE, "{}".format(struct.pack("B", 0)), wait=wait)
|
|
return struct.unpack("<b", retval[0])[0]
|
|
|
|
def RFtestLong(self, data="BLAHabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZblahaBcDeFgHiJkLmNoPqRsTuVwXyZBLahAbCdEfGhIjKlMnOpQrStUvWxYz"):
|
|
@@ -1175,16 +1170,15 @@ def RFtestLong(self, data="BLAHabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW
|
|
chunks.append(data[:RF_MAX_TX_CHUNK])
|
|
data = data[RF_MAX_TX_CHUNK:]
|
|
|
|
- retval, ts = self.send(APP_NIC, NIC_XMIT_LONG, "%s" % struct.pack("<H",datalen)+chunks[0], wait=1000)
|
|
+ retval, ts = self.send(APP_NIC, NIC_XMIT_LONG, "{}".format(struct.pack("<H", datalen)+chunks[0]), wait=1000)
|
|
sys.stderr.write('=' + repr(retval))
|
|
|
|
-
|
|
# set blocksize to larger than 255 to receive large blocks or 0 to revert to normal
|
|
def RFrecv(self, timeout=USB_RX_WAIT, blocksize=None):
|
|
- if not blocksize == None:
|
|
+ if not blocksize is None:
|
|
if blocksize > EP5OUT_BUFFER_SIZE:
|
|
- raise Exception("Blocksize too large. Maximum %d" % EP5OUT_BUFFER_SIZE)
|
|
- self.send(APP_NIC, NIC_SET_RECV_LARGE, "%s" % struct.pack("<H",blocksize))
|
|
+ raise Exception("Blocksize too large. Maximum {:d}".format(EP5OUT_BUFFER_SIZE))
|
|
+ self.send(APP_NIC, NIC_SET_RECV_LARGE, "{}".format(struct.pack("<H", blocksize)))
|
|
data = self.recv(APP_NIC, NIC_RECV, timeout)
|
|
# decode, if necessary
|
|
if self.endec is not None:
|
|
@@ -1204,7 +1198,7 @@ def RFlisten(self):
|
|
|
|
try:
|
|
y, t = self.RFrecv()
|
|
- print("(%5.3f) Received: %s | %s" % (t, y.encode('hex'), makeFriendlyAscii(y)))
|
|
+ print("({:5.3f}) Received: {} | {}".format(t, y.encode('hex'), makeFriendlyAscii(y)))
|
|
|
|
except ChipconUsbTimeoutException:
|
|
pass
|
|
@@ -1224,8 +1218,8 @@ def RFcapture(self):
|
|
try:
|
|
y, t = self.RFrecv()
|
|
#print "(%5.3f) Received: %s" % (t, y.encode('hex'))
|
|
- print("(%5.3f) Received: %s | %s" % (t, y.encode('hex'), makeFriendlyAscii(y)))
|
|
- capture.append((y,t))
|
|
+ print("({:5.3f}) Received: {} | {}".format(t, y.encode('hex'), makeFriendlyAscii(y)))
|
|
+ capture.append((y, t))
|
|
|
|
except ChipconUsbTimeoutException:
|
|
pass
|
|
@@ -1253,14 +1247,14 @@ def discover(self, lowball=1, debug=None, length=30, IdentSyncWord=False, ISWsen
|
|
retval = {}
|
|
oldebug = self._debug
|
|
|
|
- if SyncWordMatchList != None:
|
|
+ if SyncWordMatchList is not None:
|
|
IdentSyncWord = True
|
|
|
|
if IdentSyncWord:
|
|
if lowball <= 1:
|
|
print("Entering Discover mode and searching for possible SyncWords...")
|
|
- if SyncWordMatchList != None:
|
|
- print(" seeking one of: %s" % repr([hex(x) for x in SyncWordMatchList]))
|
|
+ if SyncWordMatchList is not None:
|
|
+ print(" seeking one of: {}".format(repr([hex(x) for x in SyncWordMatchList])))
|
|
|
|
else:
|
|
print("-- lowball too high -- ignoring request to IdentSyncWord")
|
|
@@ -1272,10 +1266,10 @@ def discover(self, lowball=1, debug=None, length=30, IdentSyncWord=False, ISWsen
|
|
self._debug = debug
|
|
|
|
if Search is not None:
|
|
- print("Search:",repr(Search))
|
|
+ print("Search:", repr(Search))
|
|
|
|
if RegExpSearch is not None:
|
|
- print("RegExpSearch:",repr(RegExpSearch))
|
|
+ print("RegExpSearch:", repr(RegExpSearch))
|
|
|
|
print("(press Enter to quit)")
|
|
while not keystop():
|
|
@@ -1284,19 +1278,19 @@ def discover(self, lowball=1, debug=None, length=30, IdentSyncWord=False, ISWsen
|
|
y, t = self.RFrecv()
|
|
yhex = y.encode('hex')
|
|
|
|
- print("(%5.3f) Received: %s" % (t, yhex))
|
|
+ print("({:5.3f}) Received: {}".format(t, yhex))
|
|
if RegExpSearch is not None:
|
|
ynext = y
|
|
for loop in range(8):
|
|
if (re.search(RegExpSearch, ynext) is not None):
|
|
- print(" REG EXP SEARCH SUCCESS:",RegExpSearch)
|
|
+ print(" REG EXP SEARCH SUCCESS:", RegExpSearch)
|
|
ynext = bits.shiftString(ynext, 1)
|
|
|
|
if Search is not None:
|
|
ynext = y
|
|
for loop in range(8):
|
|
- if (Search in ynext):
|
|
- print(" SEARCH SUCCESS:",Search)
|
|
+ if Search in ynext:
|
|
+ print(" SEARCH SUCCESS:", Search)
|
|
ynext = bits.shiftString(ynext, 1)
|
|
|
|
if IdentSyncWord:
|
|
@@ -1305,7 +1299,7 @@ def discover(self, lowball=1, debug=None, length=30, IdentSyncWord=False, ISWsen
|
|
|
|
poss = bits.findSyncWord(y, ISWsensitivity, ISWminpreamble)
|
|
if len(poss):
|
|
- print(" possible Sync Dwords: %s" % repr([hex(x) for x in poss]))
|
|
+ print(" possible Sync Dwords: {}".format(repr([hex(x) for x in poss])))
|
|
for dw in poss:
|
|
lst = retval.get(dw, 0)
|
|
lst += 1
|
|
@@ -1342,7 +1336,8 @@ def lowball(self, level=1, sync=0xaaaa, length=250, pqt=0, crc=False, fec=False,
|
|
level == 3 sets the Sync Mode to SYNCM_CARRIER_16_of_16 (requires a valid carrier detection and 16 of 16 bits of SYNC WORD match for the data to be considered a packet)
|
|
'''
|
|
if hasattr(self, '_last_radiocfg') and len(self._last_radiocfg):
|
|
- print('not saving radio state. already have one saved. use lowballRestore() to restore the saved config and the next time you run lowball() the radio config will be saved.')
|
|
+ print('not saving radio state. already have one saved. use lowballRestore() to restore the saved config '
|
|
+ 'and the next time you run lowball() the radio config will be saved.')
|
|
else:
|
|
self._last_radiocfg = self.getRadioConfig()
|
|
|
|
@@ -1353,19 +1348,19 @@ def lowball(self, level=1, sync=0xaaaa, length=250, pqt=0, crc=False, fec=False,
|
|
self.setMdmSyncWord(sync)
|
|
self.setPktPQT(pqt)
|
|
|
|
- if (level == 3):
|
|
+ if level == 3:
|
|
self.setMdmSyncMode(SYNCM_CARRIER_16_of_16)
|
|
- elif (level == 2):
|
|
+ elif level == 2:
|
|
self.setMdmSyncMode(SYNCM_15_of_16)
|
|
- elif (level == 1):
|
|
+ elif level == 1:
|
|
self.setMdmSyncMode(SYNCM_CARRIER)
|
|
else:
|
|
self.setMdmSyncMode(SYNCM_NONE)
|
|
|
|
-
|
|
def lowballRestore(self):
|
|
if not hasattr(self, '_last_radiocfg'):
|
|
- raise Exception("lowballRestore requires that lowball have been executed first (it saves radio config state!)")
|
|
+ raise Exception("lowballRestore requires that lowball have been executed first (it saves radio config "
|
|
+ "state!)")
|
|
self.setRadioConfig(self._last_radiocfg)
|
|
self._last_radiocfg = ''
|
|
|
|
@@ -1374,7 +1369,7 @@ def printRadioConfig(self, mhz=24, radiocfg=None):
|
|
print(self.reprRadioConfig(mhz, radiocfg))
|
|
|
|
def reprRadioConfig(self, mhz=24, radiocfg=None):
|
|
- if radiocfg == None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
output = []
|
|
@@ -1401,10 +1396,10 @@ def reprRadioConfig(self, mhz=24, radiocfg=None):
|
|
|
|
def reprMdmModulation(self, radiocfg=None):
|
|
mod = self.getMdmModulation(radiocfg)
|
|
- return ("Modulation: %s" % MODULATIONS[mod])
|
|
+ return ("Modulation: {}".format(MODULATIONS[mod]))
|
|
|
|
def reprRadioTestSignalConfig(self, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -1422,26 +1417,24 @@ def reprRadioTestSignalConfig(self, radiocfg=None):
|
|
output.append("VCO_SEL_CAL_EN: 0x%x"%((radiocfg.test2>>1)&1))
|
|
return "\n".join(output)
|
|
|
|
-
|
|
def reprFreqConfig(self, mhz=24, radiocfg=None):
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
output = []
|
|
freq,num = self.getFreq(mhz, radiocfg)
|
|
- output.append("Frequency: %f hz (%s)" % (freq,num))
|
|
-
|
|
- output.append("Channel: %d" % radiocfg.channr)
|
|
+ output.append("Frequency: {:f} hz ({})".format(freq, num))
|
|
|
|
+ output.append("Channel: {:d}".format(radiocfg.channr))
|
|
|
|
freq_if = self.getFsIF(mhz, radiocfg)
|
|
freqoff = self.getFsOffset(mhz, radiocfg)
|
|
freqest = self.getFreqEst(radiocfg)
|
|
|
|
- output.append("Intermediate freq: %d hz" % freq_if)
|
|
- output.append("Frequency Offset: %d +/-" % freqoff)
|
|
- output.append("Est. Freq Offset: %d" % freqest)
|
|
+ output.append("Intermediate freq: {:d} hz".format(freq_if))
|
|
+ output.append("Frequency Offset: {:d} +/-".format(freqoff))
|
|
+ output.append("Est. Freq Offset: {:d}".format(freqest))
|
|
|
|
return "\n".join(output)
|
|
|
|
@@ -1449,13 +1442,13 @@ def reprAESMode(self):
|
|
output = []
|
|
aesmode= ord(self.getAESmode()[0])
|
|
|
|
- output.append("AES Mode: %s" % AESMODES[(aesmode & AES_CRYPTO_MODE)])
|
|
+ output.append("AES Mode: {}".format(AESMODES[(aesmode & AES_CRYPTO_MODE)]))
|
|
if aesmode & AES_CRYPTO_IN_ENABLE:
|
|
- output.append("Crypt RF Input: %s" % ("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_IN_TYPE)])
|
|
+ output.append("Crypt RF Input: {}".format(("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_IN_TYPE)]))
|
|
else:
|
|
output.append("Crypt RF Input: off")
|
|
if aesmode & AES_CRYPTO_OUT_ENABLE:
|
|
- output.append("Crypt RF Output: %s" % ("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_OUT_TYPE) >> 2])
|
|
+ output.append("Crypt RF Output: {}".format(("Decrypt", "Encrypt")[(aesmode & AES_CRYPTO_OUT_TYPE) >> 2]))
|
|
else:
|
|
output.append("Crypt RF Output: off")
|
|
|
|
@@ -1467,30 +1460,30 @@ def reprPacketConfig(self, radiocfg=None):
|
|
radiocfg = self.radiocfg
|
|
|
|
output = []
|
|
- output.append("Sync Word: 0x%.2X%.2X" % (radiocfg.sync1, radiocfg.sync0))
|
|
- output.append("Packet Length: %d" % radiocfg.pktlen)
|
|
- length_config = radiocfg.pktctrl0&3
|
|
- output.append("Length Config: %s" % LENGTH_CONFIGS[length_config])
|
|
+ output.append("Sync Word: {:#X}{:X}".format(radiocfg.sync1[0:1], radiocfg.sync0[0:1]))
|
|
+ output.append("Packet Length: {:d}".format(radiocfg.pktlen))
|
|
+ length_config = radiocfg.pktctrl0 & 3
|
|
+ output.append("Length Config: {}".format(LENGTH_CONFIGS[length_config]))
|
|
|
|
- output.append("Configured Address: 0x%x" % radiocfg.addr)
|
|
+ output.append("Configured Address: {:#x}".format(radiocfg.addr))
|
|
|
|
pqt = self.getPktPQT(radiocfg)
|
|
- output.append("Preamble Quality Threshold: 4 * %d" % pqt)
|
|
+ output.append("Preamble Quality Threshold: 4 * {:d}".format(pqt))
|
|
|
|
- append = (radiocfg.pktctrl1>>2) & 1
|
|
- output.append("Append Status: %s" % ("No","Yes")[append])
|
|
+ append = (radiocfg.pktctrl1 >> 2) & 1
|
|
+ output.append("Append Status: {}".format(("No", "Yes")[append]))
|
|
|
|
- adr_chk = radiocfg.pktctrl1&3
|
|
- output.append("Rcvd Packet Check: %s" % ADR_CHK_TYPES[adr_chk])
|
|
+ adr_chk = radiocfg.pktctrl1 & 3
|
|
+ output.append("Rcvd Packet Check: {}".format(ADR_CHK_TYPES[adr_chk]))
|
|
|
|
whitedata = self.getEnablePktDataWhitening(radiocfg)
|
|
- output.append("Data Whitening: %s" % ("off", "ON (but only with cc2400_en==0)")[whitedata])
|
|
+ output.append("Data Whitening: {}".format(("off", "ON (but only with cc2400_en==0)")[whitedata]))
|
|
|
|
- pkt_format = (radiocfg.pktctrl0>>5)&3
|
|
- output.append("Packet Format: %s" % PKT_FORMATS[pkt_format])
|
|
+ pkt_format = (radiocfg.pktctrl0 >> 5) & 3
|
|
+ output.append("Packet Format: {}".format(PKT_FORMATS[pkt_format]))
|
|
|
|
crc = self.getEnablePktCRC(radiocfg)
|
|
- output.append("CRC: %s" % ("disabled", "ENABLED")[crc])
|
|
+ output.append("CRC: {}".format(("disabled", "ENABLED")[crc]))
|
|
|
|
return "\n".join(output)
|
|
|
|
@@ -1500,12 +1493,12 @@ def printRadioState(self, radiocfg=None):
|
|
def reprRadioState(self, radiocfg=None):
|
|
output = []
|
|
try:
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
- output.append(" MARCSTATE: %s (%x)" % (self.getMARCSTATE(radiocfg)))
|
|
- output.append(" DONGLE RESPONDING: mode :%x, last error# %d"%(self.getDebugCodes()))
|
|
+ output.append(" MARCSTATE: %s (%x)" % self.getMARCSTATE(radiocfg))
|
|
+ output.append(" DONGLE RESPONDING: mode :%x, last error# %d" % (self.getDebugCodes()))
|
|
except:
|
|
output.append(repr(sys.exc_info()))
|
|
output.append(" DONGLE *not* RESPONDING")
|
|
@@ -1514,7 +1507,7 @@ def reprRadioState(self, radiocfg=None):
|
|
|
|
def reprModemConfig(self, mhz=24, radiocfg=None):
|
|
output = []
|
|
- if radiocfg==None:
|
|
+ if radiocfg is None:
|
|
self.getRadioConfig()
|
|
radiocfg = self.radiocfg
|
|
|
|
@@ -1524,59 +1517,57 @@ def reprModemConfig(self, mhz=24, radiocfg=None):
|
|
output.append(reprMdmModulation)
|
|
|
|
drate = self.getMdmDRate(mhz, radiocfg)
|
|
- output.append("DRate: %f hz"%drate)
|
|
+ output.append("DRate: {:f} hz".format(drate))
|
|
|
|
bw = self.getMdmChanBW(mhz, radiocfg)
|
|
- output.append("ChanBW: %f hz"%bw)
|
|
+ output.append("ChanBW: {:f} hz".format(bw))
|
|
|
|
- output.append("DEVIATION: %f hz" % self.getMdmDeviatn(mhz, radiocfg))
|
|
+ output.append("DEVIATION: {:f} hz".format(self.getMdmDeviatn(mhz, radiocfg)))
|
|
|
|
- output.append("Sync Mode: %s" % SYNCMODES[syncmode])
|
|
+ output.append("Sync Mode: {}".format(SYNCMODES[syncmode]))
|
|
|
|
- num_preamble = (radiocfg.mdmcfg1>>4)&7
|
|
- output.append("Min TX Preamble: %d bytes" % (NUM_PREAMBLE[num_preamble]) )
|
|
+ num_preamble = (radiocfg.mdmcfg1 >> 4) & 7
|
|
+ output.append("Min TX Preamble: {:d} bytes".format(NUM_PREAMBLE[num_preamble]))
|
|
|
|
chanspc = self.getMdmChanSpc(mhz, radiocfg)
|
|
- output.append("Chan Spacing: %f hz" % chanspc)
|
|
+ output.append("Chan Spacing: {:f} hz".format(chanspc))
|
|
|
|
bslimit = radiocfg.bscfg & BSCFG_BS_LIMIT
|
|
- output.append("BSLimit: %s"%BSLIMITS[bslimit])
|
|
+ output.append("BSLimit: {}".format(BSLIMITS[bslimit]))
|
|
|
|
- output.append("DC Filter: %s" % (("enabled", "disabled")[self.getEnableMdmDCFilter(radiocfg)]))
|
|
+ output.append("DC Filter: {}".format(("enabled", "disabled")[self.getEnableMdmDCFilter(radiocfg)]))
|
|
|
|
mchstr = self.getEnableMdmManchester(radiocfg)
|
|
- output.append("Manchester Encoding: %s" % (("disabled","enabled")[mchstr]))
|
|
+ output.append("Manchester Encoding: {}".format(("disabled","enabled")[mchstr]))
|
|
|
|
fec = self.getEnableMdmFEC(radiocfg)
|
|
- output.append("Fwd Err Correct: %s" % (("disabled","enabled")[fec]))
|
|
-
|
|
+ output.append("Fwd Err Correct: {}".format(("disabled","enabled")[fec]))
|
|
|
|
return "\n".join(output)
|
|
|
|
-
|
|
def checkRepr(self, matchstr, checkval, maxdiff=0):
|
|
starry = self.reprRadioConfig().split('\n')
|
|
- line,val = getValueFromReprString(starry, matchstr)
|
|
+ line, val = getValueFromReprString(starry, matchstr)
|
|
try:
|
|
f = checkval.__class__(val.split(" ")[0])
|
|
if abs(f-checkval) <= maxdiff:
|
|
- print(" passed: reprRadioConfig test: %s %s" % (repr(val), checkval))
|
|
+ print(" passed: reprRadioConfig test: {} {}".format(repr(val), checkval))
|
|
else:
|
|
- print(" *FAILED* reprRadioConfig test: %s %s %s" % (repr(line), repr(val), checkval))
|
|
+ print(" *FAILED* reprRadioConfig test: {} {} {}".format(repr(line), repr(val), checkval))
|
|
|
|
except ValueError as e:
|
|
- print(" ERROR checking repr: %s" % e)
|
|
+ print(" ERROR checking repr: {}".format(e))
|
|
|
|
def testTX(self, data="XYZABCDEFGHIJKL"):
|
|
- while (sys.stdin not in select.select([sys.stdin],[],[],0)[0]):
|
|
+ while sys.stdin not in select.select([sys.stdin], [], [], 0)[0]:
|
|
time.sleep(.4)
|
|
- print("transmitting %s" % repr(data))
|
|
+ print("transmitting {}".format(repr(data)))
|
|
self.RFxmit(data)
|
|
sys.stdin.read(1)
|
|
|
|
######## APPLICATION METHODS - more for demonstration than anything ########
|
|
def setup24330MHz(self):
|
|
- #self.setRadioConfig('0c4eff000800000b0065600068b583231145073f14166c4340915610a90a0011593f3f8831090000000000000000c02e0006000000000000000000000000'.decode('hex'))
|
|
+ # self.setRadioConfig('0c4eff000800000b0065600068b583231145073f14166c4340915610a90a0011593f3f8831090000000000000000c02e0006000000000000000000000000'.decode('hex'))
|
|
self.getRadioConfig()
|
|
rc = self.radiocfg
|
|
rc.iocfg0 = 0x06
|
|
@@ -1789,17 +1780,18 @@ def setup_rfstudio_902PktTx(self):
|
|
rc.pa_table0 = 0xc0
|
|
self.setRadioConfig()
|
|
|
|
+
|
|
class FHSSNIC(NICxx11):
|
|
'''
|
|
advanced NIC implementation for CCxx11 chips, including Frequency Hopping
|
|
'''
|
|
def FHSSxmit(self, data):
|
|
- return self.send(APP_NIC, FHSS_XMIT, "%c%s" % (len(data), data))
|
|
+ return self.send(APP_NIC, FHSS_XMIT, "{:c}{}".format(len(data), data))
|
|
|
|
def changeChannel(self, chan):
|
|
- return self.send(APP_NIC, FHSS_CHANGE_CHANNEL, "%c" % (chan))
|
|
+ return self.send(APP_NIC, FHSS_CHANGE_CHANNEL, "{:c}".format(chan))
|
|
|
|
- def getChannels(self, channels=[]):
|
|
+ def getChannels(self, channels=[]): # FIXME channels isn't used, remove?
|
|
return self.send(APP_NIC, FHSS_GET_CHANNELS, '')
|
|
|
|
def setChannels(self, channels=[]):
|
|
@@ -1809,7 +1801,7 @@ def setChannels(self, channels=[]):
|
|
return self.send(APP_NIC, FHSS_SET_CHANNELS, length + chans)
|
|
|
|
def nextChannel(self):
|
|
- return self.send(APP_NIC, FHSS_NEXT_CHANNEL, '' )
|
|
+ return self.send(APP_NIC, FHSS_NEXT_CHANNEL, '')
|
|
|
|
def startHopping(self):
|
|
return self.send(APP_NIC, FHSS_START_HOPPING, '')
|
|
@@ -1826,7 +1818,7 @@ def setMACperiod(self, dwell_ms, mhz=24):
|
|
T, tickidx, tipidx, PR = val
|
|
print("Setting MAC period to %f secs (%x %x %x)" % (val))
|
|
t2ctl = (ord(self.peek(X_T2CTL)) & 0xfc) | (tipidx)
|
|
- clkcon = (ord(self.peek(X_CLKCON)) & 0xc7) | (tickidx<<3)
|
|
+ clkcon = (ord(self.peek(X_CLKCON)) & 0xc7) | (tickidx << 3)
|
|
|
|
self.poke(X_T2PR, correctbytes(PR))
|
|
self.poke(X_T2CTL, correctbytes(t2ctl))
|
|
@@ -1838,7 +1830,7 @@ def _setMACmode(self, _mode):
|
|
'''
|
|
macdata = self.getMACdata()
|
|
print(repr(macdata))
|
|
- macdata = (_mode,) + macdata[1:]
|
|
+ macdata = (_mode,) + macdata[1:]
|
|
print(repr(macdata))
|
|
self.setMACdata(macdata)
|
|
|
|
@@ -1884,24 +1876,25 @@ def reprMACdata(self):
|
|
u8 g_txMsgIdx;
|
|
"""
|
|
|
|
- def getMACthreshold(self):
|
|
- return self.send(APP_NIC, FHSS_SET_MAC_THRESHOLD, struct.pack("<I",value))
|
|
+ def getMACthreshold(self, value):
|
|
+ return self.send(APP_NIC, FHSS_SET_MAC_THRESHOLD, struct.pack("<I", value))
|
|
|
|
def setMACthreshold(self, value):
|
|
- return self.send(APP_NIC, FHSS_SET_MAC_THRESHOLD, struct.pack("<I",value))
|
|
+ return self.send(APP_NIC, FHSS_SET_MAC_THRESHOLD, struct.pack("<I", value))
|
|
|
|
def setFHSSstate(self, state):
|
|
- return self.send(APP_NIC, FHSS_SET_STATE, struct.pack("<I",state))
|
|
+ return self.send(APP_NIC, FHSS_SET_STATE, struct.pack("<I", state))
|
|
|
|
def getFHSSstate(self):
|
|
state = self.send(APP_NIC, FHSS_GET_STATE, '')
|
|
- #print repr(state)
|
|
+ # print repr(state)
|
|
state = ord(state[0])
|
|
return FHSS_STATES[state], state
|
|
|
|
def mac_SyncCell(self, CellID=0x0000):
|
|
- return self.send(APP_NIC, FHSS_START_SYNC, struct.pack("<H",CellID))
|
|
-
|
|
+ return self.send(APP_NIC, FHSS_START_SYNC, struct.pack("<H", CellID))
|
|
+
|
|
+
|
|
def unittest(dongle):
|
|
from . import chipcon_usb
|
|
chipcon_usb.unittest(dongle)
|
|
@@ -1921,25 +1914,25 @@ def unittest(dongle):
|
|
dongle.setFreq(testfreq)
|
|
freq,freqstr = dongle.getFreq()
|
|
if abs(testfreq - freq) < 1024:
|
|
- print(" passed: %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" passed: {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
else:
|
|
- print(" *FAILED* %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" *FAILED* {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
|
|
testfreq = 868000000
|
|
dongle.setFreq(testfreq)
|
|
freq,freqstr = dongle.getFreq()
|
|
if abs(testfreq - freq) < 1024:
|
|
- print(" passed: %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" passed: {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
else:
|
|
- print(" *FAILED* %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" *FAILED* {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
|
|
testfreq = 433000000
|
|
dongle.setFreq(testfreq)
|
|
freq,freqstr = dongle.getFreq()
|
|
if abs(testfreq - freq) < 1024:
|
|
- print(" passed: %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" passed: {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
else:
|
|
- print(" *FAILED* %d : %f (diff: %f)" % (testfreq, freq, testfreq-freq))
|
|
+ print(" *FAILED* {:d} : {:f} (diff: {:f})".format(testfreq, freq, testfreq-freq))
|
|
|
|
dongle.checkRepr("Frequency:", float(testfreq), 1024)
|
|
dongle.setFreq(freq0)
|
|
@@ -1950,29 +1943,29 @@ def unittest(dongle):
|
|
dongle.setChannel(x)
|
|
channr = dongle.getChannel()
|
|
if channr != x:
|
|
- print(" *FAILED* get/setChannel(): %d : %d" % (x, channr))
|
|
+ print(" *FAILED* get/setChannel(): {:d} : {:d}".format(x, channr))
|
|
else:
|
|
- print(" passed: get/setChannel(): %d : %d" % (x, channr))
|
|
+ print(" passed: get/setChannel(): {:d} : {:d}".format(x, channr))
|
|
dongle.checkRepr("Channel:", channr)
|
|
dongle.setChannel(channr0)
|
|
|
|
# IF and FREQ_OFF
|
|
freq_if = dongle.getFsIF()
|
|
freqoff = dongle.getFsOffset()
|
|
- for fif, foff in ((164062,1),(140625,2),(187500,3)):
|
|
+ for fif, foff in ((164062, 1), (140625, 2), (187500, 3)):
|
|
dongle.setFsIF(fif)
|
|
dongle.setFsOffset(foff)
|
|
nfif = dongle.getFsIF()
|
|
nfoff = dongle.getFsOffset()
|
|
if abs(nfif - fif) > 5:
|
|
- print(" *FAILED* get/setFsIFandOffset(): %d : %f (diff: %f)" % (fif,nfif,nfif-fif))
|
|
+ print(" *FAILED* get/setFsIFandOffset(): {:d} : {:f} (diff: {:f})".format(fif, nfif, nfif - fif))
|
|
else:
|
|
- print(" passed: get/setFsIFandOffset(): %d : %f (diff: %f)" % (fif,nfif,nfif-fif))
|
|
+ print(" passed: get/setFsIFandOffset(): {:d} : {:f} (diff: {:f})".format(fif, nfif, nfif - fif))
|
|
|
|
if foff != nfoff:
|
|
- print(" *FAILED* get/setFsIFandOffset(): %d : %d (diff: %d)" % (foff,nfoff,nfoff-foff))
|
|
+ print(" *FAILED* get/setFsIFandOffset(): {:d} : {:d} (diff: {:d})".format(foff,nfoff,nfoff-foff))
|
|
else:
|
|
- print(" passed: get/setFsIFandOffset(): %d : %d (diff: %d)" % (foff,nfoff,nfoff-foff))
|
|
+ print(" passed: get/setFsIFandOffset(): {:d} : {:d} (diff: {:d})".format(foff,nfoff,nfoff-foff))
|
|
dongle.checkRepr("Intermediate freq:", fif, 11720)
|
|
dongle.checkRepr("Frequency Offset:", foff)
|
|
|
|
@@ -1986,73 +1979,73 @@ def unittest(dongle):
|
|
dongle.setMdmModulation(mod, dongle.radiocfg)
|
|
modcheck = dongle.getMdmModulation(dongle.radiocfg)
|
|
if mod != modcheck:
|
|
- print(" *FAILED* get/setMdmModulation(): %d : %d " % (mod, modcheck))
|
|
+ print(" *FAILED* get/setMdmModulation(): {:d} : {:d} ".format(mod, modcheck))
|
|
else:
|
|
- print(" passed: get/setMdmModulation(): %d : %d " % (mod, modcheck))
|
|
+ print(" passed: get/setMdmModulation(): {:d} : {:d} ".format(mod, modcheck))
|
|
|
|
chanspc = dongle.getMdmChanSpc(dongle.mhz, dongle.radiocfg)
|
|
dongle.setMdmChanSpc(chanspc, dongle.mhz, dongle.radiocfg)
|
|
chanspc_check = dongle.getMdmChanSpc(dongle.mhz, dongle.radiocfg)
|
|
if chanspc != chanspc_check:
|
|
- print(" *FAILED* get/setMdmChanSpc(): %d : %d" % (chanspc, chanspc_check))
|
|
+ print(" *FAILED* get/setMdmChanSpc(): {:d} : {:d}".format(chanspc, chanspc_check))
|
|
else:
|
|
- print(" passed: get/setMdmChanSpc(): %d : %d" % (chanspc, chanspc_check))
|
|
+ print(" passed: get/setMdmChanSpc(): {:d} : {:d}".format(chanspc, chanspc_check))
|
|
|
|
chanbw = dongle.getMdmChanBW(dongle.mhz, dongle.radiocfg)
|
|
dongle.setMdmChanBW(chanbw, dongle.mhz, dongle.radiocfg)
|
|
chanbw_check = dongle.getMdmChanBW(dongle.mhz, dongle.radiocfg)
|
|
if chanbw != chanbw_check:
|
|
- print(" *FAILED* get/setMdmChanBW(): %d : %d" % (chanbw, chanbw_check))
|
|
+ print(" *FAILED* get/setMdmChanBW(): {:d} : {:d}".format(chanbw, chanbw_check))
|
|
else:
|
|
- print(" passed: get/setMdmChanBW(): %d : %d" % (chanbw, chanbw_check))
|
|
+ print(" passed: get/setMdmChanBW(): {:d} : {:d}".format(chanbw, chanbw_check))
|
|
|
|
drate = dongle.getMdmDRate(dongle.mhz, dongle.radiocfg)
|
|
dongle.setMdmDRate(drate, dongle.mhz, dongle.radiocfg)
|
|
drate_check = dongle.getMdmDRate(dongle.mhz, dongle.radiocfg)
|
|
if drate != drate_check:
|
|
- print(" *FAILED* get/setMdmDRate(): %d : %d" % (drate, drate_check))
|
|
+ print(" *FAILED* get/setMdmDRate(): {:d} : {:d}".format(drate, drate_check))
|
|
else:
|
|
- print(" passed: get/setMdmDRate(): %d : %d" % (drate, drate_check))
|
|
+ print(" passed: get/setMdmDRate(): {:d} : {:d}".format(drate, drate_check))
|
|
|
|
deviatn = dongle.getMdmDeviatn(dongle.mhz, dongle.radiocfg)
|
|
dongle.setMdmDeviatn(deviatn, dongle.mhz, dongle.radiocfg)
|
|
deviatn_check = dongle.getMdmDeviatn(dongle.mhz, dongle.radiocfg)
|
|
if deviatn != deviatn_check:
|
|
- print(" *FAILED* get/setMdmdeviatn(): %d : %d" % (deviatn, deviatn_check))
|
|
+ print(" *FAILED* get/setMdmdeviatn(): {:d} : {:d}".format(deviatn, deviatn_check))
|
|
else:
|
|
- print(" passed: get/setMdmdeviatn(): %d : %d" % (deviatn, deviatn_check))
|
|
+ print(" passed: get/setMdmdeviatn(): {:d} : {:d}".format(deviatn, deviatn_check))
|
|
|
|
syncm = dongle.getMdmSyncMode(dongle.radiocfg)
|
|
dongle.setMdmSyncMode(syncm, dongle.radiocfg)
|
|
syncm_check = dongle.getMdmSyncMode(dongle.radiocfg)
|
|
if syncm != syncm_check:
|
|
- print(" *FAILED* get/setMdmSyncMode(): %d : %d" % (syncm, syncm_check))
|
|
+ print(" *FAILED* get/setMdmSyncMode(): {:d} : {:d}".format(syncm, syncm_check))
|
|
else:
|
|
- print(" passed: get/setMdmSyncMode(): %d : %d" % (syncm, syncm_check))
|
|
+ print(" passed: get/setMdmSyncMode(): {:d} : {:d}".format(syncm, syncm_check))
|
|
|
|
mchstr = dongle.getEnableMdmManchester(dongle.radiocfg)
|
|
dongle.setEnableMdmManchester(mchstr, dongle.radiocfg)
|
|
mchstr_check = dongle.getEnableMdmManchester(dongle.radiocfg)
|
|
if mchstr != mchstr_check:
|
|
- print(" *FAILED* get/setMdmManchester(): %d : %d" % (mchstr, mchstr_check))
|
|
+ print(" *FAILED* get/setMdmManchester(): {:d} : {:d}".format(mchstr, mchstr_check))
|
|
else:
|
|
- print(" passed: get/setMdmManchester(): %d : %d" % (mchstr, mchstr_check))
|
|
+ print(" passed: get/setMdmManchester(): {:d} : {:d}".format(mchstr, mchstr_check))
|
|
|
|
fec = dongle.getEnableMdmFEC(dongle.radiocfg)
|
|
dongle.setEnableMdmFEC(fec, dongle.radiocfg)
|
|
fec_check = dongle.getEnableMdmFEC(dongle.radiocfg)
|
|
if fec != fec_check:
|
|
- print(" *FAILED* get/setEnableMdmFEC(): %d : %d" % (fec, fec_check))
|
|
+ print(" *FAILED* get/setEnableMdmFEC(): {:d} : {:d}".format(fec, fec_check))
|
|
else:
|
|
- print(" passed: get/setEnableMdmFEC(): %d : %d" % (fec, fec_check))
|
|
+ print(" passed: get/setEnableMdmFEC(): {:d} : {:d}".format(fec, fec_check))
|
|
|
|
dcf = dongle.getEnableMdmDCFilter(dongle.radiocfg)
|
|
dongle.setEnableMdmDCFilter(dcf, dongle.radiocfg)
|
|
dcf_check = dongle.getEnableMdmDCFilter(dongle.radiocfg)
|
|
if dcf != dcf_check:
|
|
- print(" *FAILED* get/setEnableMdmDCFilter(): %d : %d" % (dcf, dcf_check))
|
|
+ print(" *FAILED* get/setEnableMdmDCFilter(): {:d} : {:d}".format(dcf, dcf_check))
|
|
else:
|
|
- print(" passed: get/setEnableMdmDCFilter(): %d : %d" % (dcf, dcf_check))
|
|
+ print(" passed: get/setEnableMdmDCFilter(): {:d} : {:d}".format(dcf, dcf_check))
|
|
|
|
|
|
# Pkt tests
|
|
@@ -2060,9 +2053,9 @@ def unittest(dongle):
|
|
dongle.setPktPQT(pqt, dongle.radiocfg)
|
|
pqt_check = dongle.getPktPQT(dongle.radiocfg)
|
|
if pqt != pqt_check:
|
|
- print(" *FAILED* get/setEnableMdmFEC(): %d : %d" % (pqt, pqt_check))
|
|
+ print(" *FAILED* get/setEnableMdmFEC(): {:d} : {:d}".format(pqt, pqt_check))
|
|
else:
|
|
- print(" passed: get/setEnableMdmFEC(): %d : %d" % (pqt, pqt_check))
|
|
+ print(" passed: get/setEnableMdmFEC(): {:d} : {:d}".format(pqt, pqt_check))
|
|
|
|
# FHSS tests
|
|
print("\nTesting FHSS State set/get")
|
|
@@ -2075,6 +2068,7 @@ def unittest(dongle):
|
|
print(repr(dongle.setFHSSstate(fhssstate[1] )))
|
|
print(repr(dongle.getFHSSstate()))
|
|
|
|
+
|
|
def getValueFromReprString(stringarray, line_text):
|
|
for string in stringarray:
|
|
if line_text in string:
|
|
@@ -2082,6 +2076,7 @@ def getValueFromReprString(stringarray, line_text):
|
|
val = string[idx+1:].strip()
|
|
return (string,val)
|
|
|
|
+
|
|
def mkFreq(freq=902000000, mhz=24):
|
|
freqmult = old_div((0x10000 / 1000000.0), mhz)
|
|
num = int(freq * freqmult)
|
|
@@ -2091,7 +2086,6 @@ def mkFreq(freq=902000000, mhz=24):
|
|
return (num, freq2,freq1,freq0)
|
|
|
|
|
|
-
|
|
if __name__ == "__main__":
|
|
idx = 0
|
|
if len(sys.argv) > 1:
|
|
diff --git a/rflib/chipcon_usb.py b/rflib/chipcon_usb.py
|
|
index aca9696..eab9995 100644
|
|
--- a/rflib/chipcon_usb.py
|
|
+++ b/rflib/chipcon_usb.py
|
|
@@ -102,7 +102,7 @@ def cleanup(self):
|
|
self.reset_event.clear()
|
|
self.trash = []
|
|
|
|
- def setRFparameters(self):
|
|
+ def setRFparameters(self, *args, **kwargs): # Fixed, rfconfigure would call this function w/o req'd args
|
|
pass
|
|
|
|
def run_ctrl(self):
|
|
diff --git a/rflib/chipcondefs.py b/rflib/chipcondefs.py
|
|
index 54a2ef9..e71c5ee 100644
|
|
--- a/rflib/chipcondefs.py
|
|
+++ b/rflib/chipcondefs.py
|
|
@@ -1,6 +1,7 @@
|
|
import vstruct
|
|
from vstruct.primitives import *
|
|
|
|
+
|
|
class RadioConfig(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -1513,6 +1514,3 @@ def __init__(self):
|
|
PKTCTRL0S[val] = key
|
|
elif key.startswith("PKTCTRL1_"):
|
|
PKTCTRL1S[val] = key
|
|
-
|
|
-
|
|
-
|
|
diff --git a/rflib/const.py b/rflib/const.py
|
|
index 063df12..138e65a 100644
|
|
--- a/rflib/const.py
|
|
+++ b/rflib/const.py
|
|
@@ -257,7 +257,7 @@
|
|
ENCCS_MODE_OFB: "OFB - Output Feedback",
|
|
}
|
|
|
|
-NUM_PREAMBLE = [2, 3, 4, 6, 8, 12, 16, 24 ]
|
|
+NUM_PREAMBLE = [2, 3, 4, 6, 8, 12, 16, 24]
|
|
|
|
ADR_CHK_TYPES = [
|
|
"No address check",
|
|
@@ -334,4 +334,3 @@
|
|
0x11: 24,
|
|
0x01: 26,
|
|
}
|
|
-
|
|
diff --git a/rflib/intelhex.py b/rflib/intelhex.py
|
|
index 6abc498..e50a7f8 100644
|
|
--- a/rflib/intelhex.py
|
|
+++ b/rflib/intelhex.py
|
|
@@ -38,11 +38,7 @@
|
|
'''
|
|
from __future__ import division, print_function
|
|
|
|
-from builtins import bytes
|
|
-from builtins import str
|
|
-from builtins import range
|
|
from past.builtins import basestring
|
|
-from builtins import object
|
|
from past.utils import old_div
|
|
__docformat__ = "javadoc"
|
|
|
|
@@ -72,7 +68,7 @@ def __init__(self, source=None):
|
|
(file name of HEX file, file object, addr dict or
|
|
other IntelHex object)
|
|
'''
|
|
- #public members
|
|
+ # public members
|
|
self.padding = 0x0FF
|
|
# Start Address
|
|
self.start_addr = None
|
|
@@ -193,7 +189,7 @@ def loadhex(self, fobj):
|
|
@param fobj file name or file-like object
|
|
"""
|
|
if getattr(fobj, "read", None) is None:
|
|
- fobj = file(fobj, "r")
|
|
+ fobj = open(fobj, "r")
|
|
fclose = fobj.close
|
|
else:
|
|
fclose = None
|
|
@@ -223,7 +219,7 @@ def loadbin(self, fobj, offset=0):
|
|
"""
|
|
fread = getattr(fobj, "read", None)
|
|
if fread is None:
|
|
- f = file(fobj, "rb")
|
|
+ f = open(fobj, "rb")
|
|
fread = f.read
|
|
fclose = f.close
|
|
else:
|
|
@@ -237,20 +233,20 @@ def loadbin(self, fobj, offset=0):
|
|
if fclose:
|
|
fclose()
|
|
|
|
- def loadfile(self, fobj, format):
|
|
+ def loadfile(self, fobj, text_format):
|
|
"""Load data file into internal buffer. Preferred wrapper over
|
|
loadbin or loadhex.
|
|
|
|
@param fobj file name or file-like object
|
|
- @param format file format ("hex" or "bin")
|
|
+ @param text_format file format ("hex" or "bin")
|
|
"""
|
|
- if format == "hex":
|
|
+ if text_format == "hex":
|
|
self.loadhex(fobj)
|
|
- elif format == "bin":
|
|
+ elif text_format == "bin":
|
|
self.loadbin(fobj)
|
|
else:
|
|
raise ValueError('format should be either "hex" or "bin";'
|
|
- ' got %r instead' % format)
|
|
+ ' got {!r} instead'.format(text_format))
|
|
|
|
# alias (to be consistent with method tofile)
|
|
fromfile = loadfile
|
|
@@ -307,7 +303,7 @@ def tobinarray(self, start=None, end=None, pad=None):
|
|
|
|
start, end = self._get_start_end(start, end)
|
|
|
|
- for i in range(start, end+1):
|
|
+ for i in range(start, end + 1):
|
|
bin.append(self._buf.get(i, pad))
|
|
|
|
return bin
|
|
@@ -332,7 +328,7 @@ def tobinfile(self, fobj, start=None, end=None, pad=0xFF):
|
|
(if None used self.padding).
|
|
'''
|
|
if getattr(fobj, "write", None) is None:
|
|
- fobj = file(fobj, "wb")
|
|
+ fobj = open(fobj, "wb")
|
|
close_fd = True
|
|
else:
|
|
close_fd = False
|
|
@@ -366,7 +362,7 @@ def minaddr(self):
|
|
@return minimal address or None if no data
|
|
'''
|
|
aa = list(self._buf.keys())
|
|
- if aa == []:
|
|
+ if not aa:
|
|
return None
|
|
else:
|
|
return min(aa)
|
|
@@ -376,7 +372,7 @@ def maxaddr(self):
|
|
@return maximal address or None if no data
|
|
'''
|
|
aa = list(self._buf.keys())
|
|
- if aa == []:
|
|
+ if not aa:
|
|
return None
|
|
else:
|
|
return max(aa)
|
|
@@ -398,7 +394,7 @@ def __getitem__(self, addr):
|
|
if addresses:
|
|
addresses.sort()
|
|
start = addr.start or addresses[0]
|
|
- stop = addr.stop or (addresses[-1]+1)
|
|
+ stop = addr.stop or (addresses[-1] + 1)
|
|
step = addr.step or 1
|
|
for i in range(start, stop, step):
|
|
x = self._buf.get(i)
|
|
@@ -406,7 +402,7 @@ def __getitem__(self, addr):
|
|
ih[i] = x
|
|
return ih
|
|
else:
|
|
- raise TypeError('Address has unsupported type: %s' % t)
|
|
+ raise TypeError('Address has unsupported type: {}'.format(t))
|
|
|
|
def __setitem__(self, addr, byte):
|
|
"""Set byte at address."""
|
|
@@ -426,7 +422,7 @@ def __setitem__(self, addr, byte):
|
|
ra = list(range(start, stop, step))
|
|
if len(ra) != len(byte):
|
|
raise ValueError('Length of bytes sequence does not match '
|
|
- 'address range')
|
|
+ 'address range')
|
|
elif (start, stop) == (None, None):
|
|
raise TypeError('Unsupported address range')
|
|
elif start is None:
|
|
@@ -442,7 +438,7 @@ def __setitem__(self, addr, byte):
|
|
self._buf[i] = byte[j]
|
|
j += 1
|
|
else:
|
|
- raise TypeError('Address has unsupported type: %s' % t)
|
|
+ raise TypeError('Address has unsupported type: {}'.format(t))
|
|
|
|
def __delitem__(self, addr):
|
|
"""Delete byte at address."""
|
|
@@ -456,14 +452,14 @@ def __delitem__(self, addr):
|
|
if addresses:
|
|
addresses.sort()
|
|
start = addr.start or addresses[0]
|
|
- stop = addr.stop or (addresses[-1]+1)
|
|
+ stop = addr.stop or (addresses[-1] + 1)
|
|
step = addr.step or 1
|
|
for i in range(start, stop, step):
|
|
x = self._buf.get(i)
|
|
if x is not None:
|
|
del self._buf[i]
|
|
else:
|
|
- raise TypeError('Address has unsupported type: %s' % t)
|
|
+ raise TypeError('Address has unsupported type: {}'.format(t))
|
|
|
|
def __len__(self):
|
|
"""Return count of bytes with real values."""
|
|
@@ -483,7 +479,7 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
fobj = f
|
|
fclose = None
|
|
else:
|
|
- fobj = file(f, 'w')
|
|
+ fobj = open(f, 'w')
|
|
fwrite = fobj.write
|
|
fclose = fobj.close
|
|
|
|
@@ -491,14 +487,14 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
# timeit shows that using hexstr.translate(table)
|
|
# is faster than hexstr.upper():
|
|
# 0.452ms vs. 0.652ms (translate vs. upper)
|
|
- table = ''.join(correctbytes(i).upper() for i in range(256))
|
|
+ table = ''.join(correctbytes(i).upper() for i in range(256))
|
|
|
|
# start address record if any
|
|
if self.start_addr and write_start_addr:
|
|
keys = list(self.start_addr.keys())
|
|
keys.sort()
|
|
- bin = array('B', '\0'*9)
|
|
- if keys == ['CS','IP']:
|
|
+ bin = array('B', '\0' * 9)
|
|
+ if keys == ['CS', 'IP']:
|
|
# Start Segment Address Record
|
|
bin[0] = 4 # reclen
|
|
bin[1] = 0 # offset msb
|
|
@@ -549,7 +545,7 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
|
|
while cur_addr <= maxaddr:
|
|
if need_offset_record:
|
|
- bin = array('B', '\0'*7)
|
|
+ bin = array('B', '\0' * 7)
|
|
bin[0] = 2 # reclen
|
|
bin[1] = 0 # offset msb
|
|
bin[2] = 0 # offset lsb
|
|
@@ -565,7 +561,7 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
# produce one record
|
|
low_addr = cur_addr & 0x0FFFF
|
|
# chain_len off by 1
|
|
- chain_len = min(15, 65535-low_addr, maxaddr-cur_addr)
|
|
+ chain_len = min(15, 65535 - low_addr, maxaddr - cur_addr)
|
|
|
|
# search continuous chain
|
|
stop_addr = cur_addr + chain_len
|
|
@@ -581,18 +577,18 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
else:
|
|
chain_len = 1 # real chain_len
|
|
|
|
- bin = array('B', '\0'*(5+chain_len))
|
|
+ bin = array('B', '\0' * ( 5 + chain_len))
|
|
bytes = divmod(low_addr, 256)
|
|
bin[1] = bytes[0] # msb of low_addr
|
|
bin[2] = bytes[1] # lsb of low_addr
|
|
bin[3] = 0 # rectype
|
|
try: # if there is small holes we'll catch them
|
|
for i in range(chain_len):
|
|
- bin[4+i] = self._buf[cur_addr+i]
|
|
+ bin[4+i] = self._buf[cur_addr + i]
|
|
except KeyError:
|
|
# we catch a hole so we should shrink the chain
|
|
chain_len = i
|
|
- bin = bin[:5+i]
|
|
+ bin = bin[:5 + i]
|
|
bin[0] = chain_len
|
|
bin[4+chain_len] = (-sum(bin)) & 0x0FF # chksum
|
|
fwrite(':' + hexlify(bin.tostring()).translate(table) + '\n')
|
|
@@ -604,7 +600,7 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
else:
|
|
cur_addr = maxaddr + 1
|
|
break
|
|
- high_addr = int(old_div(cur_addr,65536))
|
|
+ high_addr = int(old_div(cur_addr, 65536))
|
|
if high_addr > high_ofs:
|
|
break
|
|
|
|
@@ -613,28 +609,28 @@ def write_hex_file(self, f, write_start_addr=True):
|
|
if fclose:
|
|
fclose()
|
|
|
|
- def tofile(self, fobj, format):
|
|
+ def tofile(self, fobj, text_format):
|
|
"""Write data to hex or bin file. Preferred method over tobin or tohex.
|
|
|
|
@param fobj file name or file-like object
|
|
- @param format file format ("hex" or "bin")
|
|
+ @param text_format file format ("hex" or "bin")
|
|
"""
|
|
- if format == 'hex':
|
|
+ if text_format == 'hex':
|
|
self.write_hex_file(fobj)
|
|
- elif format == 'bin':
|
|
+ elif text_format == 'bin':
|
|
self.tobinfile(fobj)
|
|
else:
|
|
raise ValueError('format should be either "hex" or "bin";'
|
|
- ' got %r instead' % format)
|
|
+ ' got {!r} instead'.format(text_format))
|
|
|
|
def gets(self, addr, length):
|
|
"""Get string of bytes from given address. If any entries are blank
|
|
from addr through addr+length, a NotEnoughDataError exception will
|
|
be raised. Padding is not used."""
|
|
- a = array('B', '\0'*length)
|
|
+ a = array('B', '\0' * length)
|
|
try:
|
|
for i in range(length):
|
|
- a[i] = self._buf[addr+i]
|
|
+ a[i] = self._buf[addr + i]
|
|
except KeyError:
|
|
raise NotEnoughDataError(address=addr, length=length)
|
|
return a.tostring()
|
|
@@ -658,8 +654,8 @@ def getsz(self, addr):
|
|
break
|
|
i += 1
|
|
except KeyError:
|
|
- raise NotEnoughDataError(msg=('Bad access at 0x%X: '
|
|
- 'not enough data to read zero-terminated string') % addr)
|
|
+ raise NotEnoughDataError(msg=('Bad access at {:#X}: '
|
|
+ 'not enough data to read zero-terminated string').format(addr))
|
|
return self.gets(addr, i)
|
|
|
|
def putsz(self, addr, s):
|
|
@@ -684,19 +680,19 @@ def dump(self, tofile=None):
|
|
ip = self.start_addr.get('IP')
|
|
eip = self.start_addr.get('EIP')
|
|
if eip is not None and cs is None and ip is None:
|
|
- tofile.write('EIP = 0x%08X\n' % eip)
|
|
+ tofile.write('EIP = {:#08X}\n'.format(eip))
|
|
elif eip is None and cs is not None and ip is not None:
|
|
- tofile.write('CS = 0x%04X, IP = 0x%04X\n' % (cs, ip))
|
|
+ tofile.write('CS = {:#04X}, IP = {:#04X}\n'.format(cs, ip))
|
|
else:
|
|
- tofile.write('start_addr = %r\n' % start_addr)
|
|
+ tofile.write('start_addr = {!r}\n'.format(self.start_addr))
|
|
# actual data
|
|
addresses = list(self._buf.keys())
|
|
if addresses:
|
|
addresses.sort()
|
|
minaddr = addresses[0]
|
|
maxaddr = addresses[-1]
|
|
- startaddr = int(old_div(minaddr,16))*16
|
|
- endaddr = int(old_div(maxaddr,16)+1)*16
|
|
+ startaddr = int(old_div(minaddr, 16)) * 16
|
|
+ endaddr = int(old_div(maxaddr, 16) + 1) * 16
|
|
maxdigits = max(len(str(endaddr)), 4)
|
|
templa = '%%0%dX' % maxdigits
|
|
range16 = list(range(16))
|
|
@@ -707,7 +703,7 @@ def dump(self, tofile=None):
|
|
for j in range16:
|
|
x = self._buf.get(i+j)
|
|
if x is not None:
|
|
- tofile.write(' %02X' % x)
|
|
+ tofile.write(' {:02X}'.format(x))
|
|
if 32 <= x < 128:
|
|
s.append(correctbytes(x))
|
|
else:
|
|
@@ -739,7 +735,7 @@ def merge(this, other, overlap='error'):
|
|
raise ValueError("Can't merge itself")
|
|
if overlap not in ('error', 'ignore', 'replace'):
|
|
raise ValueError("overlap argument should be either "
|
|
- "'error', 'ignore' or 'replace'")
|
|
+ "'error', 'ignore' or 'replace'")
|
|
# merge data
|
|
this_buf = this._buf
|
|
other_buf = other._buf
|
|
@@ -747,7 +743,7 @@ def merge(this, other, overlap='error'):
|
|
if i in this_buf:
|
|
if overlap == 'error':
|
|
raise AddressOverlapError(
|
|
- 'Data overlapped at address 0x%X' % i)
|
|
+ 'Data overlapped at address {:#X}'.format(i))
|
|
elif overlap == 'ignore':
|
|
continue
|
|
this_buf[i] = other_buf[i]
|
|
@@ -807,10 +803,10 @@ def __getitem__(self, addr16):
|
|
byte1 = self._buf.get(addr1, None)
|
|
byte2 = self._buf.get(addr2, None)
|
|
|
|
- if byte1 != None and byte2 != None:
|
|
+ if byte1 is not None and byte2 is not None:
|
|
return byte1 | (byte2 << 8) # low endian
|
|
|
|
- if byte1 == None and byte2 == None:
|
|
+ if byte1 is None and byte2 is None:
|
|
return self.padding
|
|
|
|
raise BadAccess16bit(address=addr16)
|
|
@@ -829,7 +825,7 @@ def minaddr(self):
|
|
@return minimal address used in this object
|
|
'''
|
|
aa = list(self._buf.keys())
|
|
- if aa == []:
|
|
+ if not aa:
|
|
return 0
|
|
else:
|
|
return old_div(min(aa),2)
|
|
@@ -840,10 +836,10 @@ def maxaddr(self):
|
|
@return maximal address used in this object
|
|
'''
|
|
aa = list(self._buf.keys())
|
|
- if aa == []:
|
|
+ if not aa:
|
|
return 0
|
|
else:
|
|
- return old_div(max(aa),2)
|
|
+ return old_div(max(aa), 2)
|
|
|
|
#/class IntelHex16bit
|
|
|
|
@@ -862,17 +858,17 @@ def hex2bin(fin, fout, start=None, end=None, size=None, pad=0xFF):
|
|
try:
|
|
h = IntelHex(fin)
|
|
except HexReaderError as e:
|
|
- print("ERROR: bad HEX file: %s" % str(e))
|
|
+ print("ERROR: bad HEX file: {}".format(str(e)))
|
|
return 1
|
|
|
|
# start, end, size
|
|
- if size != None and size != 0:
|
|
- if end == None:
|
|
- if start == None:
|
|
+ if size is not None and size != 0:
|
|
+ if end is None:
|
|
+ if start is None:
|
|
start = h.minaddr()
|
|
end = start + size - 1
|
|
else:
|
|
- if (end+1) >= size:
|
|
+ if (end + 1) >= size:
|
|
start = end + 1 - size
|
|
else:
|
|
start = 0
|
|
@@ -880,7 +876,7 @@ def hex2bin(fin, fout, start=None, end=None, size=None, pad=0xFF):
|
|
try:
|
|
h.tobinfile(fout, start, end, pad)
|
|
except IOError as e:
|
|
- print("ERROR: Could not write to file: %s: %s" % (fout, str(e)))
|
|
+ print("ERROR: Could not write to file: {}: {!s}".format(fout, e))
|
|
return 1
|
|
|
|
return 0
|
|
@@ -899,13 +895,13 @@ def bin2hex(fin, fout, offset=0):
|
|
try:
|
|
h.loadbin(fin, offset)
|
|
except IOError as e:
|
|
- print('ERROR: unable to load bin file:', str(e))
|
|
+ print('ERROR: unable to load bin file: ', str(e))
|
|
return 1
|
|
|
|
try:
|
|
- h.tofile(fout, format='hex')
|
|
+ h.tofile(fout, text_format='hex')
|
|
except IOError as e:
|
|
- print("ERROR: Could not write to file: %s: %s" % (fout, str(e)))
|
|
+ print("ERROR: Could not write to file: {}: {!s}".format(fout, e))
|
|
return 1
|
|
|
|
return 0
|
|
@@ -915,34 +911,34 @@ def bin2hex(fin, fout, offset=0):
|
|
class Record(object):
|
|
"""Helper methods to build valid ihex records."""
|
|
|
|
- def _from_bytes(bytes):
|
|
+ def _from_bytes(f_bytes):
|
|
"""Takes a list of bytes, computes the checksum, and outputs the entire
|
|
record as a string. bytes should be the hex record without the colon
|
|
or final checksum.
|
|
|
|
- @param bytes list of byte values so far to pack into record.
|
|
+ @param f_bytes list of byte values so far to pack into record.
|
|
@return String representation of one HEX record
|
|
"""
|
|
- assert len(bytes) >= 4
|
|
+ assert len(f_bytes) >= 4
|
|
# calculate checksum
|
|
- s = (-sum(bytes)) & 0x0FF
|
|
- bin = array('B', bytes + [s])
|
|
+ s = (-sum(f_bytes)) & 0x0FF
|
|
+ bin = array('B', f_bytes + [s])
|
|
return ':' + hexlify(bin.tostring()).upper()
|
|
_from_bytes = staticmethod(_from_bytes)
|
|
|
|
- def data(offset, bytes):
|
|
+ def data(offset, bytes_list):
|
|
"""Return Data record. This constructs the full record, including
|
|
the length information, the record type (0x00), the
|
|
checksum, and the offset.
|
|
|
|
@param offset load offset of first byte.
|
|
- @param bytes list of byte values to pack into record.
|
|
+ @param bytes_list list of byte values to pack into record.
|
|
|
|
@return String representation of one HEX record
|
|
"""
|
|
assert 0 <= offset < 65536
|
|
- assert 0 < len(bytes) < 256
|
|
- b = [len(bytes), (offset>>8)&0x0FF, offset&0x0FF, 0x00] + bytes
|
|
+ assert 0 < len(bytes_list) < 256
|
|
+ b = [len(bytes_list), (offset >> 8) & 0x0FF, offset & 0x0FF, 0x00] + bytes_list
|
|
return Record._from_bytes(b)
|
|
data = staticmethod(data)
|
|
|
|
@@ -959,7 +955,7 @@ def extended_segment_address(usba):
|
|
|
|
@return String representation of Intel Hex USBA record.
|
|
"""
|
|
- b = [2, 0, 0, 0x02, (usba>>8)&0x0FF, usba&0x0FF]
|
|
+ b = [2, 0, 0, 0x02, (usba >> 8) & 0x0FF, usba & 0x0FF]
|
|
return Record._from_bytes(b)
|
|
extended_segment_address = staticmethod(extended_segment_address)
|
|
|
|
@@ -970,8 +966,8 @@ def start_segment_address(cs, ip):
|
|
|
|
@return String representation of Intel Hex SSA record.
|
|
"""
|
|
- b = [4, 0, 0, 0x03, (cs>>8)&0x0FF, cs&0x0FF,
|
|
- (ip>>8)&0x0FF, ip&0x0FF]
|
|
+ b = [4, 0, 0, 0x03, (cs >> 8) & 0x0FF, cs & 0x0FF,
|
|
+ (ip >> 8) & 0x0FF, ip & 0x0FF]
|
|
return Record._from_bytes(b)
|
|
start_segment_address = staticmethod(start_segment_address)
|
|
|
|
@@ -981,7 +977,7 @@ def extended_linear_address(ulba):
|
|
|
|
@return String representation of Intel Hex ELA record.
|
|
"""
|
|
- b = [2, 0, 0, 0x04, (ulba>>8)&0x0FF, ulba&0x0FF]
|
|
+ b = [2, 0, 0, 0x04, (ulba >> 8) & 0x0FF, ulba & 0x0FF]
|
|
return Record._from_bytes(b)
|
|
extended_linear_address = staticmethod(extended_linear_address)
|
|
|
|
@@ -991,8 +987,8 @@ def start_linear_address(eip):
|
|
|
|
@return String representation of Intel Hex SLA record.
|
|
"""
|
|
- b = [4, 0, 0, 0x05, (eip>>24)&0x0FF, (eip>>16)&0x0FF,
|
|
- (eip>>8)&0x0FF, eip&0x0FF]
|
|
+ b = [4, 0, 0, 0x05, (eip >> 24) & 0x0FF, (eip >> 16) & 0x0FF,
|
|
+ (eip >> 8) & 0x0FF, eip & 0x0FF]
|
|
return Record._from_bytes(b)
|
|
start_linear_address = staticmethod(start_linear_address)
|
|
|
|
@@ -1001,6 +997,7 @@ class _BadFileNotation(Exception):
|
|
"""Special error class to use with _get_file_and_addr_range."""
|
|
pass
|
|
|
|
+
|
|
def _get_file_and_addr_range(s, _support_drive_letter=None):
|
|
"""Special method for hexmerge.py script to split file notation
|
|
into 3 parts: (filename, start, end)
|
|
@@ -1024,13 +1021,14 @@ def _get_file_and_addr_range(s, _support_drive_letter=None):
|
|
raise _BadFileNotation
|
|
else:
|
|
fname = parts[0]
|
|
- def ascii_hex_to_int(ascii):
|
|
- if ascii is not None:
|
|
+
|
|
+ def ascii_hex_to_int(ascii_text):
|
|
+ if ascii_text is not None:
|
|
try:
|
|
- return int(ascii, 16)
|
|
+ return int(ascii_text, 16)
|
|
except ValueError:
|
|
raise _BadFileNotation
|
|
- return ascii
|
|
+ return ascii_text
|
|
fstart = ascii_hex_to_int(parts[1] or None)
|
|
fend = ascii_hex_to_int(parts[2] or None)
|
|
return drive+fname, fstart, fend
|
|
@@ -1078,16 +1076,19 @@ def __str__(self):
|
|
try:
|
|
return self._fmt % self.__dict__
|
|
except (NameError, ValueError, KeyError) as e:
|
|
- return 'Unprintable exception %s: %s' \
|
|
- % (self.__class__.__name__, str(e))
|
|
+ return 'Unprintable exception {}: {!s}'.format(
|
|
+ self.__class__.__name__, e)
|
|
+
|
|
|
|
class _EndOfFile(IntelHexError):
|
|
"""Used for internal needs only."""
|
|
_fmt = 'EOF record reached -- signal to stop read file'
|
|
|
|
+
|
|
class HexReaderError(IntelHexError):
|
|
_fmt = 'Hex reader base error'
|
|
|
|
+
|
|
class AddressOverlapError(HexReaderError):
|
|
_fmt = 'Hex file has data overlap at address 0x%(address)X on line %(line)d'
|
|
|
|
@@ -1095,17 +1096,20 @@ class AddressOverlapError(HexReaderError):
|
|
|
|
|
|
class HexRecordError(HexReaderError):
|
|
- _fmt = 'Hex file contains invalid record at line %(line)d'
|
|
+ _fmt = 'Hex file contains invalid record at line {line:d}'
|
|
|
|
|
|
class RecordLengthError(HexRecordError):
|
|
- _fmt = 'Record at line %(line)d has invalid length'
|
|
+ _fmt = 'Record at line {line:d} has invalid length'
|
|
+
|
|
|
|
class RecordTypeError(HexRecordError):
|
|
- _fmt = 'Record at line %(line)d has invalid record type'
|
|
+ _fmt = 'Record at line {line:d} has invalid record type'
|
|
+
|
|
|
|
class RecordChecksumError(HexRecordError):
|
|
- _fmt = 'Record at line %(line)d has invalid checksum'
|
|
+ _fmt = 'Record at line {line:d} has invalid checksum'
|
|
+
|
|
|
|
class EOFRecordError(HexRecordError):
|
|
_fmt = 'File has invalid End-of-File record'
|
|
@@ -1114,32 +1118,39 @@ class EOFRecordError(HexRecordError):
|
|
class ExtendedAddressRecordError(HexRecordError):
|
|
_fmt = 'Base class for extended address exceptions'
|
|
|
|
+
|
|
class ExtendedSegmentAddressRecordError(ExtendedAddressRecordError):
|
|
- _fmt = 'Invalid Extended Segment Address Record at line %(line)d'
|
|
+ _fmt = 'Invalid Extended Segment Address Record at line {line:d}'
|
|
+
|
|
|
|
class ExtendedLinearAddressRecordError(ExtendedAddressRecordError):
|
|
- _fmt = 'Invalid Extended Linear Address Record at line %(line)d'
|
|
+ _fmt = 'Invalid Extended Linear Address Record at line {line:d}'
|
|
|
|
|
|
class StartAddressRecordError(HexRecordError):
|
|
_fmt = 'Base class for start address exceptions'
|
|
|
|
+
|
|
class StartSegmentAddressRecordError(StartAddressRecordError):
|
|
- _fmt = 'Invalid Start Segment Address Record at line %(line)d'
|
|
+ _fmt = 'Invalid Start Segment Address Record at line {line:d}'
|
|
+
|
|
|
|
class StartLinearAddressRecordError(StartAddressRecordError):
|
|
- _fmt = 'Invalid Start Linear Address Record at line %(line)d'
|
|
+ _fmt = 'Invalid Start Linear Address Record at line {line:d}'
|
|
+
|
|
|
|
class DuplicateStartAddressRecordError(StartAddressRecordError):
|
|
- _fmt = 'Start Address Record appears twice at line %(line)d'
|
|
+ _fmt = 'Start Address Record appears twice at line {line:d}'
|
|
+
|
|
|
|
class InvalidStartAddressValueError(StartAddressRecordError):
|
|
- _fmt = 'Invalid start address value: %(start_addr)s'
|
|
+ _fmt = 'Invalid start address value: {start_addr!s}'
|
|
|
|
|
|
class NotEnoughDataError(IntelHexError):
|
|
- _fmt = ('Bad access at 0x%(address)X: '
|
|
- 'not enough data to read %(length)d contiguous bytes')
|
|
+ _fmt = ('Bad access at {#address:X}: '
|
|
+ 'not enough data to read {length:d} contiguous bytes')
|
|
+
|
|
|
|
class BadAccess16bit(NotEnoughDataError):
|
|
- _fmt = 'Bad access at 0x%(address)X: not enough data to read 16 bit value'
|
|
+ _fmt = 'Bad access at {#address:X}: not enough data to read 16 bit value'
|
|
diff --git a/rflib/rflib_version.py b/rflib/rflib_version.py
|
|
index f4a1994..8136c49 100644
|
|
--- a/rflib/rflib_version.py
|
|
+++ b/rflib/rflib_version.py
|
|
@@ -1 +1 @@
|
|
-RFLIB_VERSION=543
|
|
+RFLIB_VERSION=574
|
|
diff --git a/setup.py b/setup.py
|
|
index 757aa93..6114bb6 100644
|
|
--- a/setup.py
|
|
+++ b/setup.py
|
|
@@ -1,7 +1,7 @@
|
|
import sys
|
|
import os
|
|
import codecs
|
|
-from distutils.core import setup, Extension
|
|
+from setuptools import setup
|
|
|
|
packages = ['rflib', 'vstruct', 'vstruct.defs']
|
|
mods = []
|
|
@@ -16,7 +16,7 @@
|
|
try:
|
|
REV = os.popen('./revision.sh').readline()
|
|
if len(REV):
|
|
- file('rflib/rflib_version.py', 'wb').write("RFLIB_VERSION=%s" % REV)
|
|
+ open('rflib/rflib_version.py', 'wb').write("RFLIB_VERSION={}".format(REV).encode())
|
|
except:
|
|
sys.excepthook(*sys.exc_info())
|
|
|
|
@@ -68,7 +68,8 @@ def readme():
|
|
'pyusb>=1.0.0',
|
|
'libusb>=1.0.21b2',
|
|
'PySide2==5.12.0',
|
|
- 'future>=0.17.1'
|
|
+ 'future>=0.17.1',
|
|
+ 'pyserial>=3.4'
|
|
],
|
|
python_requires = '>=2.7,<3.0.0'
|
|
)
|
|
diff --git a/tests/test_basics.py b/tests/test_basics.py
|
|
index c232caa..df77c2b 100644
|
|
--- a/tests/test_basics.py
|
|
+++ b/tests/test_basics.py
|
|
@@ -1,11 +1,12 @@
|
|
import unittest
|
|
|
|
+
|
|
class RfCatBasicTests(unittest.TestCase):
|
|
|
|
def test_importing(self):
|
|
import rflib
|
|
devs = rflib.getRfCatDevices()
|
|
- self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: %r" % devs)
|
|
+ self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {!r}".format(devs))
|
|
import rflib.chipcon_nic
|
|
import rflib.chipcon_usb
|
|
import rflib.chipcondefs
|
|
@@ -13,4 +14,3 @@ def test_importing(self):
|
|
import rflib.ccspecan
|
|
import rflib.intelhex
|
|
import rflib.rflib_defs
|
|
-
|
|
diff --git a/tests/test_fakedongle.py b/tests/test_fakedongle.py
|
|
index c00cf08..ef41990 100644
|
|
--- a/tests/test_fakedongle.py
|
|
+++ b/tests/test_fakedongle.py
|
|
@@ -5,25 +5,24 @@
|
|
import queue
|
|
import logging
|
|
import unittest
|
|
-import threading
|
|
|
|
from rflib.const import *
|
|
|
|
-logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s')
|
|
+logging.basicConfig(level=logging.INFO, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}')
|
|
logger = logging.getLogger(__name__)
|
|
|
|
EP0BUFSIZE = 512
|
|
|
|
|
|
class fakeMemory:
|
|
- def __init__(self, size=64*1024):
|
|
+ def __init__(self, size=64 * 1024):
|
|
self.memory = [0 for x in range(size)]
|
|
|
|
def readMemory(self, addr, size):
|
|
- return ''.join([chr(x) for x in self.memory[addr:addr+size]])
|
|
+ return ''.join([chr(x) for x in self.memory[addr:addr + size]])
|
|
|
|
def writeMemory(self, addr, data):
|
|
- self.memory = self.memory[:addr] + data + self.memory[addr+len(data):]
|
|
+ self.memory = self.memory[:addr] + data + self.memory[addr + len(data):]
|
|
|
|
|
|
class fakeDon:
|
|
@@ -39,13 +38,15 @@ def __init__(self):
|
|
|
|
def controlMsg(self, flags, request, buf, value, index, timeout):
|
|
if flags & USB_BM_REQTYPE_DIR_OUT:
|
|
- logger.warn("=> fakeDoer.controlMsg(flags=0x%x, request=%r, buf=%r, value=%r, index=%x, timeout=%r)", flags, request, buf, value, index, timeout)
|
|
+ logger.warn("=> fakeDoer.controlMsg(flags={:#h}, request={:!s}, buf={:!r}, value={:!r}, index={:h}, "
|
|
+ "timeout={:!r)", flags, request, buf, value, index, timeout)
|
|
elif flags & USB_BM_REQTYPE_DIR_IN:
|
|
- logger.warn("<= fakeDoer.controlMsg(flags=0x%x, request=%r, buf=%r, value=%r, index=%x, timeout=%r)", flags, request, buf, value, index, timeout)
|
|
+ logger.warn("<= fakeDoer.controlMsg(flags={:#h}, request={:!r}, buf={:!r}, value={:!r}, index={:h}, "
|
|
+ "timeout={:!r})", flags, request, buf, value, index, timeout)
|
|
|
|
- def bulkWrite(self, chan, buf, timeout=1):
|
|
+ def bulkWrite(self, chan, buf, timeout=1): # FIXME chan and timeout aren't used, remove?
|
|
self._initrcvd = buf
|
|
- logger.debug("=> fakeDoer.bulkWrite(5, %r)", buf)
|
|
+ logger.debug("=> fakeDoer.bulkWrite(5, {:!r})", buf)
|
|
|
|
app, cmd, mlen = struct.unpack("<BBH", buf[:4])
|
|
data = buf[4:]
|
|
@@ -70,7 +71,7 @@ def bulkWrite(self, chan, buf, timeout=1):
|
|
self.bulk5.put(buf)
|
|
|
|
else:
|
|
- self.log('WTFO! no APP_SYSTEM::0x%x', cmd)
|
|
+ self.log('WTFO! no APP_SYSTEM::{:#h}', cmd)
|
|
self.bulk5.put(buf)
|
|
|
|
elif app == APP_NIC:
|
|
@@ -80,7 +81,7 @@ def bulkWrite(self, chan, buf, timeout=1):
|
|
self.bulk5.put(retmsg)
|
|
|
|
else:
|
|
- self.log('WTFO! no APP_NIC::0x%x', cmd)
|
|
+ self.log('WTFO! no APP_NIC::{:#h}', cmd)
|
|
self.bulk5.put(buf)
|
|
else:
|
|
# everything else... just echo
|
|
@@ -88,25 +89,26 @@ def bulkWrite(self, chan, buf, timeout=1):
|
|
|
|
return len(buf)
|
|
|
|
- def bulkRead(self, chan, length, timeout=1):
|
|
+ def bulkRead(self, chan, length, timeout=1): # FIXME chan isn't used, remove?
|
|
starttime = time.time()
|
|
|
|
while time.time() - starttime < timeout:
|
|
try:
|
|
out = self.bulk5.get_nowait()
|
|
- logger.debug('<= fakeDoer.bulkRead(5, %r) == %r', length, out)
|
|
+ logger.debug('<= fakeDoer.bulkRead(5, {:!r}) == {:!r}', length, out)
|
|
return "@" + out
|
|
except queue.Empty:
|
|
time.sleep(.05)
|
|
|
|
- logger.debug('<= fakeDoer.bulkRead(5, %r) == <EmptyQueue>', length)
|
|
+ logger.debug('<= fakeDoer.bulkRead(5, {:!r}) == <EmptyQueue>', length)
|
|
raise usb.USBError('Operation timed out (FakeDongle)')
|
|
|
|
def log(self, msg, *args):
|
|
if len(args):
|
|
msg = msg % args
|
|
self.bulk5.put(struct.pack('<BBH', APP_DEBUG, DEBUG_CMD_STRING, len(msg)) + msg)
|
|
-
|
|
+
|
|
+
|
|
class FakeRfCat(rflib.RfCat):
|
|
def __init__(self, idx=0, debug=True, copyDongle=None, RfMode=RFST_SRX):
|
|
# instantiate ourself as an official RfCat dongle
|
|
@@ -120,12 +122,13 @@ def _internal_select_dongle(self):
|
|
def getPartNum(self):
|
|
return 0x40
|
|
|
|
+
|
|
class RfCatFakeDongle(unittest.TestCase):
|
|
|
|
def test_importing(self):
|
|
import rflib
|
|
devs = rflib.getRfCatDevices()
|
|
- self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: %r" % devs)
|
|
+ self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {:!r}".format(devs))
|
|
import rflib.chipcon_nic
|
|
import rflib.chipcon_usb
|
|
import rflib.chipcondefs
|
|
@@ -133,4 +136,3 @@ def test_importing(self):
|
|
import rflib.ccspecan
|
|
import rflib.intelhex
|
|
import rflib.rflib_defs
|
|
-
|
|
|
|
From 41bcd98ecbedf60b0ab9291b6042e384fc4023fb Mon Sep 17 00:00:00 2001
|
|
From: PlantDaddy <CqP5TZ77NYBf5uQt@protonmail.com>
|
|
Date: Mon, 13 Apr 2020 02:42:17 -0500
|
|
Subject: [PATCH 2/4] Fixed the bugs shown in the travis-ci build (I think),
|
|
fixed some bugs, possibly found a few bugs, added more python3 compatibility
|
|
|
|
---
|
|
rflib/chipcon_usb.py | 2 +-
|
|
setup.py | 2 +-
|
|
tests/test_fakedongle.py | 4 +--
|
|
vstruct/__init__.py | 51 ++++++++++++++++++------------
|
|
vstruct/builder.py | 61 ++++++++++++++++++------------------
|
|
vstruct/defs/__init__.py | 6 ++--
|
|
vstruct/defs/elf.py | 1 +
|
|
vstruct/defs/kdcom.py | 10 +++---
|
|
vstruct/defs/macho/fat.py | 2 ++
|
|
vstruct/defs/macho/loader.py | 1 +
|
|
vstruct/defs/pe.py | 13 ++++++++
|
|
vstruct/defs/win32.py | 2 ++
|
|
vstruct/primitives.py | 23 +++++++++-----
|
|
13 files changed, 109 insertions(+), 69 deletions(-)
|
|
|
|
diff --git a/rflib/chipcon_usb.py b/rflib/chipcon_usb.py
|
|
index eab9995..86c331a 100644
|
|
--- a/rflib/chipcon_usb.py
|
|
+++ b/rflib/chipcon_usb.py
|
|
@@ -43,7 +43,7 @@ def getRfCatDevices():
|
|
if (dev.idVendor == 0x0451 and dev.idProduct == 0x4715) or (dev.idVendor == 0x1d50 and (dev.idProduct == 0x6047 or dev.idProduct == 0x6048 or dev.idProduct == 0x605b or dev.idProduct == 0xecc1)):
|
|
rfcats.append(dev)
|
|
|
|
- elif (dev.idVendor == 0x1d50 and (dev.idProduct == 0x6049 or dev.idProduct == 0x604a or dev.idProduct == 0xecc0)):
|
|
+ elif dev.idVendor == 0x1d50 and (dev.idProduct == 0x6049 or dev.idProduct == 0x604a or dev.idProduct == 0xecc0):
|
|
print("Already in Bootloader Mode... exiting")
|
|
exit(0)
|
|
|
|
diff --git a/setup.py b/setup.py
|
|
index 6114bb6..0b9cc08 100644
|
|
--- a/setup.py
|
|
+++ b/setup.py
|
|
@@ -71,5 +71,5 @@ def readme():
|
|
'future>=0.17.1',
|
|
'pyserial>=3.4'
|
|
],
|
|
- python_requires = '>=2.7,<3.0.0'
|
|
+ python_requires = '>=2.7,>=3.0.0'
|
|
)
|
|
diff --git a/tests/test_fakedongle.py b/tests/test_fakedongle.py
|
|
index ef41990..7e0cbd5 100644
|
|
--- a/tests/test_fakedongle.py
|
|
+++ b/tests/test_fakedongle.py
|
|
@@ -8,7 +8,7 @@
|
|
|
|
from rflib.const import *
|
|
|
|
-logging.basicConfig(level=logging.INFO, format='{asctime:!s}:{levelname:!s}:{name:!s}: {message:!s}')
|
|
+logging.basicConfig(level=logging.INFO, format='%(asctime)s:%(levelname)s:%(name)s: %(message)s')
|
|
logger = logging.getLogger(__name__)
|
|
|
|
EP0BUFSIZE = 512
|
|
@@ -128,7 +128,7 @@ class RfCatFakeDongle(unittest.TestCase):
|
|
def test_importing(self):
|
|
import rflib
|
|
devs = rflib.getRfCatDevices()
|
|
- self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {:!r}".format(devs))
|
|
+ self.assertEquals(type(devs), list, "rflib.getRfCatDevices() doesn't return a list!: {!r}".format(devs))
|
|
import rflib.chipcon_nic
|
|
import rflib.chipcon_usb
|
|
import rflib.chipcondefs
|
|
diff --git a/vstruct/__init__.py b/vstruct/__init__.py
|
|
index a1a92c6..22f0321 100644
|
|
--- a/vstruct/__init__.py
|
|
+++ b/vstruct/__init__.py
|
|
@@ -1,12 +1,17 @@
|
|
|
|
import struct
|
|
-from StringIO import StringIO
|
|
+try:
|
|
+ from StringIO import StringIO
|
|
+except ImportError:
|
|
+ from io import StringIO
|
|
|
|
import vstruct.primitives as vs_prims
|
|
|
|
+
|
|
def isVstructType(x):
|
|
return isinstance(x, vs_prims.v_base)
|
|
|
|
+
|
|
class VStruct(vs_prims.v_base):
|
|
|
|
def __init__(self, bigend=False):
|
|
@@ -15,7 +20,7 @@ def __init__(self, bigend=False):
|
|
vs_prims.v_base.__init__(self)
|
|
self._vs_name = self.__class__.__name__
|
|
self._vs_fields = []
|
|
- self._vs_field_align = False # To toggle visual studio style packing
|
|
+ self._vs_field_align = False # To toggle visual studio style packing
|
|
self._vs_padnum = 0
|
|
self._vs_fmtbase = '<'
|
|
if bigend:
|
|
@@ -27,7 +32,7 @@ def vsGetClassPath(self):
|
|
'''
|
|
return '%s.%s' % (self.__module__, self._vs_name)
|
|
|
|
- def vsParse(self, bytes, offset=0):
|
|
+ def vsParse(self, bytes_parse, offset=0):
|
|
"""
|
|
For all the primitives contained within, allow them
|
|
an opportunity to parse the given data and return the
|
|
@@ -36,7 +41,7 @@ def vsParse(self, bytes, offset=0):
|
|
plist = self.vsGetPrims()
|
|
fmt = self.vsGetFormat()
|
|
size = struct.calcsize(fmt)
|
|
- vals = struct.unpack(fmt, bytes[offset:offset+size])
|
|
+ vals = struct.unpack(fmt, bytes_parse[offset:offset + size])
|
|
for i in range(len(plist)):
|
|
plist[i].vsSetParsedValue(vals[i])
|
|
|
|
@@ -67,17 +72,17 @@ def vsGetFields(self):
|
|
ret = []
|
|
for fname in self._vs_fields:
|
|
fobj = self._vs_values.get(fname)
|
|
- ret.append((fname,fobj))
|
|
+ ret.append((fname, fobj))
|
|
return ret
|
|
|
|
def vsGetField(self, name):
|
|
x = self._vs_values.get(name)
|
|
- if x == None:
|
|
- raise Exception("Invalid field: %s" % name)
|
|
+ if x is None:
|
|
+ raise Exception("Invalid field: {!s}".format(name))
|
|
return x
|
|
|
|
def vsHasField(self, name):
|
|
- return self._vs_values.get(name) != None
|
|
+ return self._vs_values.get(name) is not None
|
|
|
|
def vsSetField(self, name, value):
|
|
if isVstructType(value):
|
|
@@ -88,7 +93,7 @@ def vsSetField(self, name, value):
|
|
|
|
# FIXME implement more arithmetic for structs...
|
|
def __ixor__(self, other):
|
|
- for name,value in other._vs_values.items():
|
|
+ for name, value in other._vs_values.items():
|
|
self._vs_values[name] ^= value
|
|
return self
|
|
|
|
@@ -109,8 +114,8 @@ def vsAddField(self, name, value):
|
|
|
|
delta = len(self) % align
|
|
if delta != 0:
|
|
- print "PADDING %s by %d" % (name,align-delta)
|
|
- pname = "_pad%d" % self._vs_padnum
|
|
+ print("PADDING {} by {:d]".format(name, align-delta))
|
|
+ pname = "_pad{:d}".format(self._vs_padnum)
|
|
self._vs_padnum += 1
|
|
self._vs_fields.append(pname)
|
|
self._vs_values[pname] = vs_prims.v_bytes(align-delta)
|
|
@@ -170,7 +175,7 @@ def __len__(self):
|
|
def __getattr__(self, name):
|
|
# Gotta do this for pickle issues...
|
|
vsvals = self.__dict__.get("_vs_values")
|
|
- if vsvals == None:
|
|
+ if vsvals is None:
|
|
vsvals = {}
|
|
self.__dict__["_vs_values"] = vsvals
|
|
r = vsvals.get(name)
|
|
@@ -183,7 +188,7 @@ def __getattr__(self, name):
|
|
def __setattr__(self, name, value):
|
|
# If we have this field, asign to it
|
|
x = self._vs_values.get(name, None)
|
|
- if x != None:
|
|
+ if x is not None:
|
|
return self.vsSetField(name, value)
|
|
|
|
# If it's a vstruct type, create a new field
|
|
@@ -209,14 +214,15 @@ def tree(self, va=0, reprmax=None):
|
|
rstr = field.vsGetTypeName()
|
|
if isinstance(field, vs_prims.v_number):
|
|
val = field.vsGetValue()
|
|
- rstr = '0x%.8x (%d)' % (val,val)
|
|
+ rstr = '{:#x} {:d}'.format(val[0:7], val)
|
|
elif isinstance(field, vs_prims.v_prim):
|
|
rstr = repr(field)
|
|
- if reprmax != None and len(rstr) > reprmax:
|
|
+ if reprmax is not None and len(rstr) > reprmax:
|
|
rstr = rstr[:reprmax] + '...'
|
|
- ret += "%.8x (%.2d)%s %s: %s\n" % (va+off, len(field), " "*(indent*2),name,rstr)
|
|
+ ret += "{:#x} ({:d}){} {!s}: {!s}\n".format((va+off)[0:7], len(field)[0:1], " " * (indent * 2), name, rstr)
|
|
return ret
|
|
|
|
+
|
|
class VArray(VStruct):
|
|
|
|
def __init__(self, elems=()):
|
|
@@ -234,7 +240,8 @@ def vsAddElement(self, elem):
|
|
def __getitem__(self, index):
|
|
return self.vsGetField("%d" % index)
|
|
|
|
- #FIXME slice asignment
|
|
+ # FIXME slice asignment
|
|
+
|
|
|
|
def resolve(impmod, nameparts):
|
|
"""
|
|
@@ -247,14 +254,16 @@ def resolve(impmod, nameparts):
|
|
m = impmod
|
|
for nname in nameparts:
|
|
m = getattr(m, nname, None)
|
|
- if m == None:
|
|
+ if m is None:
|
|
break
|
|
|
|
return m
|
|
|
|
+
|
|
# NOTE: Gotta import this *after* VStruct/VSArray defined
|
|
import vstruct.defs as vs_defs
|
|
|
|
+
|
|
def getStructure(sname):
|
|
"""
|
|
Return an instance of the specified structure. The
|
|
@@ -263,18 +272,20 @@ def getStructure(sname):
|
|
definition from within vstruct.defs.
|
|
"""
|
|
x = resolve(vs_defs, sname.split("."))
|
|
- if x != None:
|
|
+ if x is not None:
|
|
return x()
|
|
|
|
return None
|
|
|
|
+
|
|
def getModuleNames():
|
|
return [x for x in dir(vs_defs) if not x.startswith("__")]
|
|
|
|
+
|
|
def getStructNames(modname):
|
|
ret = []
|
|
mod = resolve(vs_defs, modname)
|
|
- if mod == None:
|
|
+ if mod is None:
|
|
return ret
|
|
|
|
for n in dir(mod):
|
|
diff --git a/vstruct/builder.py b/vstruct/builder.py
|
|
index 07bafb2..0849947 100644
|
|
--- a/vstruct/builder.py
|
|
+++ b/vstruct/builder.py
|
|
@@ -9,7 +9,7 @@
|
|
import vstruct
|
|
import vstruct.primitives as vs_prim
|
|
|
|
-prim_types = [ None,
|
|
+prim_types = [None,
|
|
vs_prim.v_uint8,
|
|
vs_prim.v_uint16,
|
|
None,
|
|
@@ -22,6 +22,7 @@
|
|
VSFF_ARRAY = 1
|
|
VSFF_POINTER = 2
|
|
|
|
+
|
|
class VStructConstructor:
|
|
def __init__(self, builder, vsname):
|
|
self.builder = builder
|
|
@@ -30,6 +31,7 @@ def __init__(self, builder, vsname):
|
|
def __call__(self, *args, **kwargs):
|
|
return self.builder.buildVStruct(self.vsname)
|
|
|
|
+
|
|
class VStructBuilder:
|
|
|
|
def __init__(self, defs=(), enums=()):
|
|
@@ -43,14 +45,14 @@ def __init__(self, defs=(), enums=()):
|
|
|
|
def __getattr__(self, name):
|
|
ns = self._vs_namespaces.get(name)
|
|
- if ns != None:
|
|
+ if ns is not None:
|
|
return ns
|
|
|
|
vsdef = self._vs_defs.get(name)
|
|
- if vsdef != None:
|
|
+ if vsdef is not None:
|
|
return VStructConstructor(self, name)
|
|
|
|
- raise AttributeError, name
|
|
+ raise AttributeError(name)
|
|
|
|
def addVStructEnumeration(self, enum):
|
|
self._vs_enums[enum[0]] = enum
|
|
@@ -65,10 +67,10 @@ def getVStructNamespaceNames(self):
|
|
return self._vs_namespaces.keys()
|
|
|
|
def hasVStructNamespace(self, namespace):
|
|
- return self._vs_namespaces.get(namespace, None) != None
|
|
+ return self._vs_namespaces.get(namespace, None) is not None
|
|
|
|
def getVStructNames(self, namespace=None):
|
|
- if namespace == None:
|
|
+ if namespace is None:
|
|
return self._vs_defs.keys()
|
|
nsmod = self._vs_namespaces.get(namespace)
|
|
ret = []
|
|
@@ -89,20 +91,20 @@ def buildVStruct(self, vsname):
|
|
parts = vsname.split('.', 1)
|
|
if len(parts) == 2:
|
|
ns = self._vs_namespaces.get(parts[0])
|
|
- if ns == None:
|
|
+ if ns is None:
|
|
raise Exception('Namespace %s is not present! (need symbols?)' % parts[0])
|
|
|
|
# If a module gets added as a namespace, assume it has a class def...
|
|
if isinstance(ns, types.ModuleType):
|
|
cls = getattr(ns, parts[1])
|
|
- if cls == None:
|
|
+ if cls is None:
|
|
raise Exception('Unknown VStruct Definition: %s' % vsname)
|
|
return cls()
|
|
|
|
return ns.buildVStruct(parts[1])
|
|
|
|
vsdef = self._vs_defs.get(vsname)
|
|
- if vsdef == None:
|
|
+ if vsdef is None:
|
|
raise Exception('Unknown VStruct Definition: %s' % vsname)
|
|
|
|
vsname, vssize, vskids = vsdef
|
|
@@ -124,19 +126,19 @@ def buildVStruct(self, vsname):
|
|
raise Exception('Invalid Pointer Width: %d' % fsize)
|
|
|
|
elif fflags & VSFF_ARRAY:
|
|
- if ftypename != None:
|
|
+ if ftypename is not None:
|
|
fieldval = vstruct.VArray()
|
|
while len(fieldval) < fsize:
|
|
- fieldval.vsAddElement( self.buildVStruct(ftypename) )
|
|
+ fieldval.vsAddElement(self.buildVStruct(ftypename))
|
|
else:
|
|
- # FIXME actually handle arrays!
|
|
+ # FIXME actually handle arrays!
|
|
fieldval = vs_prim.v_bytes(size=fsize)
|
|
|
|
- elif ftypename == None:
|
|
+ elif ftypename is None:
|
|
|
|
- if fsize not in [1,2,4,8]:
|
|
- #print 'Primitive Field Size: %d' % fsize
|
|
- fieldval = v_bytes(size=fsize)
|
|
+ if fsize not in [1, 2, 4, 8]:
|
|
+ # print 'Primitive Field Size: %d' % fsize
|
|
+ fieldval = vs_prim.v_bytes(size=fsize)
|
|
|
|
else:
|
|
fieldval = prim_types[fsize]()
|
|
@@ -146,7 +148,7 @@ def buildVStruct(self, vsname):
|
|
|
|
cursize = len(vs)
|
|
if foffset < cursize:
|
|
- #print 'FIXME handle unions, overlaps, etc...'
|
|
+ # print 'FIXME handle unions, overlaps, etc...'
|
|
continue
|
|
|
|
if foffset > cursize:
|
|
@@ -164,10 +166,9 @@ def genVStructPyCode(self):
|
|
for ename, esize, ekids in self._vs_enums.values():
|
|
ret += '%s = v_enum()\n' % ename
|
|
for kname, kval in ekids:
|
|
- ret += '%s.%s = %d\n' % (ename,kname,kval)
|
|
+ ret += '%s.%s = %d\n' % (ename, kname, kval)
|
|
ret += '\n\n'
|
|
|
|
-
|
|
for vsname, vsize, vskids in self._vs_defs.values():
|
|
ret += 'class %s(vstruct.VStruct):\n' % vsname
|
|
ret += ' def __init__(self):\n'
|
|
@@ -191,12 +192,12 @@ def genVStructPyCode(self):
|
|
fconst = 'v_bytes(size=%d) # FIXME should be pointer!' % fsize
|
|
|
|
elif fflags & VSFF_ARRAY:
|
|
- if ftypename != None:
|
|
- '[ %s() for i in xrange( %d / len(%s())) ]' % (ftypename, fsize, ftypename)
|
|
+ if ftypename is not None:
|
|
+ '[ %s() for i in xrange( %d / len(%s())) ]' % (ftypename, fsize, ftypename) # FIXME noop?
|
|
else:
|
|
fconst = 'v_bytes(size=%d) # FIXME Unknown Array Type' % fsize
|
|
|
|
- elif ftypename == None:
|
|
+ elif ftypename is None:
|
|
if fsize == 1:
|
|
fconst = 'v_uint8()'
|
|
elif fsize == 2:
|
|
@@ -210,25 +211,25 @@ def genVStructPyCode(self):
|
|
else:
|
|
fconst = '%s()' % ftypename
|
|
|
|
-
|
|
ret += ' self.%s = %s\n' % (fname, fconst)
|
|
offset += fsize
|
|
ret += '\n\n'
|
|
|
|
return ret
|
|
|
|
+
|
|
if __name__ == '__main__':
|
|
# Parse windows structures from dll symbols...
|
|
- import os
|
|
+ import os # FIXME unused
|
|
import sys
|
|
- import platform
|
|
+ import platform # FIXME unused
|
|
|
|
- from pprint import pprint
|
|
+ from pprint import pprint # FIXME unused
|
|
|
|
import PE
|
|
import vtrace.platforms.win32 as vt_win32
|
|
|
|
- p = PE.PE(file(sys.argv[1], 'rb'))
|
|
+ p = PE.PE(open(sys.argv[1], 'rb'))
|
|
baseaddr = p.IMAGE_NT_HEADERS.OptionalHeader.ImageBase
|
|
osmajor = p.IMAGE_NT_HEADERS.OptionalHeader.MajorOperatingSystemVersion
|
|
osminor = p.IMAGE_NT_HEADERS.OptionalHeader.MinorOperatingSystemVersion
|
|
@@ -243,7 +244,7 @@ def genVStructPyCode(self):
|
|
e = parser._sym_enums.values()
|
|
builder = VStructBuilder(defs=t, enums=e)
|
|
|
|
- print '# Version: %d.%d' % (osmajor, osminor)
|
|
- print '# Architecture: %s' % archname
|
|
- print builder.genVStructPyCode()
|
|
+ print('# Version: {:d}.(:d}'.format(osmajor, osminor))
|
|
+ print('# Architecture: {}'.format(archname))
|
|
+ print(builder.genVStructPyCode())
|
|
|
|
diff --git a/vstruct/defs/__init__.py b/vstruct/defs/__init__.py
|
|
index 3aa5963..df96038 100644
|
|
--- a/vstruct/defs/__init__.py
|
|
+++ b/vstruct/defs/__init__.py
|
|
@@ -1,6 +1,6 @@
|
|
|
|
# Import all local structure modules
|
|
-import elf
|
|
-import pe
|
|
-import win32
|
|
+from . import elf
|
|
+from . import pe
|
|
+from . import win32
|
|
|
|
diff --git a/vstruct/defs/elf.py b/vstruct/defs/elf.py
|
|
index a7b69ed..789c1e9 100644
|
|
--- a/vstruct/defs/elf.py
|
|
+++ b/vstruct/defs/elf.py
|
|
@@ -4,6 +4,7 @@
|
|
EI_NIDENT = 4
|
|
EI_PADLEN = 7
|
|
|
|
+
|
|
class Elf32(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
diff --git a/vstruct/defs/kdcom.py b/vstruct/defs/kdcom.py
|
|
index 099848c..d816202 100644
|
|
--- a/vstruct/defs/kdcom.py
|
|
+++ b/vstruct/defs/kdcom.py
|
|
@@ -16,9 +16,9 @@
|
|
PACKET_TRAILING_BYTE = 0xAA
|
|
|
|
pkt_magic_names = {
|
|
- BREAKIN_PACKET:"Break Packet",
|
|
- PACKET_LEADER:"Packet",
|
|
- CONTROL_PACKET_LEADER:"Control Packet",
|
|
+ BREAKIN_PACKET: "Break Packet",
|
|
+ PACKET_LEADER: "Packet",
|
|
+ CONTROL_PACKET_LEADER: "Control Packet",
|
|
}
|
|
|
|
# Primary "packet types"
|
|
@@ -184,6 +184,7 @@
|
|
ULONG64 = v_uint64
|
|
BOOLEAN = v_uint32
|
|
|
|
+
|
|
class DBGKD_LOAD_SYMBOLS64(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -193,9 +194,10 @@ def __init__(self):
|
|
self.ProcessId = v_uint64()
|
|
self.CheckSum = v_uint32()
|
|
self.SizeOfImage = v_uint32()
|
|
- #self.UnloadSymbols = v_uint8()
|
|
+ # self.UnloadSymbols = v_uint8()
|
|
self.UnloadSymbols = v_uint32() # HACK must be 32 bit aligned
|
|
|
|
+
|
|
class DBGKD_WAIT_STATE_CHANGE64(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
diff --git a/vstruct/defs/macho/fat.py b/vstruct/defs/macho/fat.py
|
|
index 5b5d03b..664a1da 100644
|
|
--- a/vstruct/defs/macho/fat.py
|
|
+++ b/vstruct/defs/macho/fat.py
|
|
@@ -2,12 +2,14 @@
|
|
import vstruct
|
|
import vstruct.primitives as vs_prim
|
|
|
|
+
|
|
class fat_header(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self, bigend=True)
|
|
self.magic = vs_prim.v_uint32()
|
|
self.nfat_arch = vs_prim.v_uint32()
|
|
|
|
+
|
|
class fat_arch(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self, bigend=True)
|
|
diff --git a/vstruct/defs/macho/loader.py b/vstruct/defs/macho/loader.py
|
|
index 9b3b641..82716eb 100644
|
|
--- a/vstruct/defs/macho/loader.py
|
|
+++ b/vstruct/defs/macho/loader.py
|
|
@@ -40,6 +40,7 @@ def __init__(self):
|
|
self.cmd = vs_prim.v_uint32() # type of load command
|
|
self.cmdsize = vs_prim.v_uint32() # total size of command in bytes
|
|
|
|
+
|
|
class segment_command(vstruct.VStruct):
|
|
|
|
def __init__(self):
|
|
diff --git a/vstruct/defs/pe.py b/vstruct/defs/pe.py
|
|
index b599ae2..f085949 100644
|
|
--- a/vstruct/defs/pe.py
|
|
+++ b/vstruct/defs/pe.py
|
|
@@ -2,18 +2,21 @@
|
|
import vstruct
|
|
from vstruct.primitives import *
|
|
|
|
+
|
|
class IMAGE_BASE_RELOCATION(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.VirtualAddress = v_uint32()
|
|
self.SizeOfBlock = v_uint32()
|
|
|
|
+
|
|
class IMAGE_DATA_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.VirtualAddress = v_uint32()
|
|
self.Size = v_uint32()
|
|
|
|
+
|
|
class IMAGE_DOS_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -37,6 +40,7 @@ def __init__(self):
|
|
self.e_res2 = vstruct.VArray([v_uint16() for i in range(10)])
|
|
self.e_lfanew = v_uint32()
|
|
|
|
+
|
|
class IMAGE_EXPORT_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -52,6 +56,7 @@ def __init__(self):
|
|
self.AddressOfNames = v_uint32()
|
|
self.AddressOfOrdinals = v_uint32()
|
|
|
|
+
|
|
class IMAGE_FILE_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -63,6 +68,7 @@ def __init__(self):
|
|
self.SizeOfOptionalHeader = v_uint16()
|
|
self.Ccharacteristics = v_uint16()
|
|
|
|
+
|
|
class IMAGE_IMPORT_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -72,6 +78,7 @@ def __init__(self):
|
|
self.Name = v_uint32()
|
|
self.FirstThunk = v_uint32()
|
|
|
|
+
|
|
class IMAGE_LOAD_CONFIG_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -96,6 +103,7 @@ def __init__(self):
|
|
self.SEHandlerTable = v_uint32()
|
|
self.SEHandlerCount = v_uint32()
|
|
|
|
+
|
|
class IMAGE_NT_HEADERS(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -103,6 +111,7 @@ def __init__(self):
|
|
self.FileHeader = IMAGE_FILE_HEADER()
|
|
self.OptionalHeader = IMAGE_OPTIONAL_HEADER()
|
|
|
|
+
|
|
class IMAGE_NT_HEADERS64(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -110,6 +119,7 @@ def __init__(self):
|
|
self.FileHeader = IMAGE_FILE_HEADER()
|
|
self.OptionalHeader = IMAGE_OPTIONAL_HEADER64()
|
|
|
|
+
|
|
class IMAGE_OPTIONAL_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -145,6 +155,7 @@ def __init__(self):
|
|
self.NumberOfRvaAndSizes = v_uint32()
|
|
self.DataDirectory = vstruct.VArray([IMAGE_DATA_DIRECTORY() for i in range(16)])
|
|
|
|
+
|
|
class IMAGE_OPTIONAL_HEADER64(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -179,6 +190,7 @@ def __init__(self):
|
|
self.NumberOfRvaAndSizes = v_uint32()
|
|
self.DataDirectory = vstruct.VArray([IMAGE_DATA_DIRECTORY() for i in range(16)])
|
|
|
|
+
|
|
class IMAGE_RESOURCE_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -189,6 +201,7 @@ def __init__(self):
|
|
self.NumberOfNamedEntries = v_uint16()
|
|
self.NumberOfIdEntries = v_uint16()
|
|
|
|
+
|
|
class IMAGE_SECTION_HEADER(vstruct.VStruct):
|
|
|
|
def __init__(self):
|
|
diff --git a/vstruct/defs/win32.py b/vstruct/defs/win32.py
|
|
index 64e5190..d1ad0ea 100644
|
|
--- a/vstruct/defs/win32.py
|
|
+++ b/vstruct/defs/win32.py
|
|
@@ -4,12 +4,14 @@
|
|
import vstruct
|
|
from vstruct.primitives import *
|
|
|
|
+
|
|
class CLIENT_ID(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.UniqueProcess = v_ptr()
|
|
self.UniqueThread = v_ptr()
|
|
|
|
+
|
|
class EXCEPTION_RECORD(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
diff --git a/vstruct/primitives.py b/vstruct/primitives.py
|
|
index 8eceeb6..09718de 100644
|
|
--- a/vstruct/primitives.py
|
|
+++ b/vstruct/primitives.py
|
|
@@ -1,6 +1,13 @@
|
|
|
|
import struct
|
|
|
|
+try:
|
|
+ blah = long(42)
|
|
+except NameError:
|
|
+ long = int
|
|
+ pass
|
|
+
|
|
+
|
|
class v_enum: pass
|
|
|
|
class v_base(object):
|
|
@@ -177,7 +184,7 @@ def __index__(self): return long(self)
|
|
def __coerce__(self, other):
|
|
try:
|
|
return long(self),long(other)
|
|
- except Exception, e:
|
|
+ except Exception as e:
|
|
return NotImplemented
|
|
|
|
# Print helpers
|
|
@@ -330,14 +337,14 @@ def __init__(self, guidstr=None):
|
|
self._vs_length = 16
|
|
self._vs_value = "\x00" * 16
|
|
self._vs_fmt = "16s"
|
|
- self._guid_fields = (0,0,0,0,0,0,0,0,0,0,0)
|
|
- if guidstr != None:
|
|
+ self._guid_fields = (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
|
|
+ if guidstr is not None:
|
|
self._parseGuidStr(guidstr)
|
|
|
|
def _parseGuidStr(self, gstr):
|
|
- gstr = gstr.replace("{","")
|
|
- gstr = gstr.replace("}","")
|
|
- gstr = gstr.replace("-","")
|
|
+ gstr = gstr.replace("{", "")
|
|
+ gstr = gstr.replace("}", "")
|
|
+ gstr = gstr.replace("-", "")
|
|
bytes = gstr.decode("hex")
|
|
# Totally cheating... ;)
|
|
self._guid_fields = struct.unpack(">LHH8B", bytes)
|
|
@@ -346,9 +353,9 @@ def vsSetValue(self, bytes):
|
|
self._guid_fields = struct.unpack("<LHH8B", bytes)
|
|
|
|
def vsGetValue(self):
|
|
- return struck.pack("<LHH8B", *self._guid_fields)
|
|
+ return struct.pack("<LHH8B", *self._guid_fields)
|
|
|
|
def __repr__(self):
|
|
base = "{%.8x-%.4x-%.4x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x}"
|
|
- return base % self._guid_fields
|
|
+ return base % (self._guid_fields)
|
|
|
|
|
|
From 489d40b006bf3df351ade813b3fce3c3a62d5a81 Mon Sep 17 00:00:00 2001
|
|
From: PlantDaddy <CqP5TZ77NYBf5uQt@protonmail.com>
|
|
Date: Mon, 13 Apr 2020 21:10:46 -0500
|
|
Subject: [PATCH 3/4] Fixed and possibly found a few mor bugs, fixed the
|
|
exception being thrown in travis due to older style except
|
|
|
|
---
|
|
setup.py | 6 +-
|
|
vstruct/__init__.py | 4 +-
|
|
vstruct/defs/elf.py | 11 +
|
|
vstruct/defs/macho/loader.py | 2 +
|
|
vstruct/defs/win32.py | 12 +
|
|
vstruct/defs/windows/__init__.py | 9 +-
|
|
vstruct/defs/windows/win_5_1_i386/ntdll.py | 157 +++++----
|
|
vstruct/defs/windows/win_5_1_i386/ntoskrnl.py | 298 +++++++++---------
|
|
vstruct/defs/windows/win_5_1_i386/win32k.py | 3 +-
|
|
vstruct/defs/windows/win_6_1_amd64/ntdll.py | 202 ++++++------
|
|
vstruct/defs/windows/win_6_1_wow64/ntdll.py | 222 ++++++-------
|
|
vstruct/primitives.py | 22 +-
|
|
12 files changed, 496 insertions(+), 452 deletions(-)
|
|
|
|
diff --git a/setup.py b/setup.py
|
|
index 0b9cc08..ea3b99d 100644
|
|
--- a/setup.py
|
|
+++ b/setup.py
|
|
@@ -59,9 +59,9 @@ def readme():
|
|
# that you indicate whether you support Python 2, Python 3 or both.
|
|
'Programming Language :: Python :: 2',
|
|
'Programming Language :: Python :: 2.7',
|
|
- # 'Programming Language :: Python :: 3',
|
|
- # 'Programming Language :: Python :: 3.2',
|
|
- # 'Programming Language :: Python :: 3.3',
|
|
+ 'Programming Language :: Python :: 3',
|
|
+ 'Programming Language :: Python :: 3.5',
|
|
+ 'Programming Language :: Python :: 3.8',
|
|
# 'Programming Language :: Python :: 3.4',
|
|
],
|
|
install_requires = [
|
|
diff --git a/vstruct/__init__.py b/vstruct/__init__.py
|
|
index 22f0321..1f48ccb 100644
|
|
--- a/vstruct/__init__.py
|
|
+++ b/vstruct/__init__.py
|
|
@@ -27,9 +27,9 @@ def __init__(self, bigend=False):
|
|
self._vs_fmtbase = '>'
|
|
|
|
def vsGetClassPath(self):
|
|
- '''
|
|
+ """
|
|
Return the entire class name (including module path).
|
|
- '''
|
|
+ """
|
|
return '%s.%s' % (self.__module__, self._vs_name)
|
|
|
|
def vsParse(self, bytes_parse, offset=0):
|
|
diff --git a/vstruct/defs/elf.py b/vstruct/defs/elf.py
|
|
index 789c1e9..6c7f44b 100644
|
|
--- a/vstruct/defs/elf.py
|
|
+++ b/vstruct/defs/elf.py
|
|
@@ -29,6 +29,7 @@ def __init__(self):
|
|
self.e_shnum = v_uint16()
|
|
self.e_shstrndx = v_uint16()
|
|
|
|
+
|
|
class Elf32Section(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -43,6 +44,7 @@ def __init__(self):
|
|
self.sh_addralign = v_uint32()
|
|
self.sh_entsize = v_uint32()
|
|
|
|
+
|
|
class Elf32Pheader(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -55,17 +57,20 @@ def __init__(self):
|
|
self.p_flags = v_uint32()
|
|
self.p_align = v_uint32()
|
|
|
|
+
|
|
class Elf32Reloc(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.r_offset = v_ptr32()
|
|
self.r_info = v_uint32()
|
|
|
|
+
|
|
class Elf32Reloca(Elf32Reloc):
|
|
def __init__(self):
|
|
Elf32Reloc.__init__(self)
|
|
self.r_addend = v_uint32()
|
|
|
|
+
|
|
class Elf32Symbol(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -76,6 +81,7 @@ def __init__(self):
|
|
self.st_other = v_uint8()
|
|
self.st_shndx = v_uint16()
|
|
|
|
+
|
|
class Elf32Dynamic(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -107,6 +113,7 @@ def __init__(self):
|
|
self.e_shnum = v_uint16()
|
|
self.e_shstrndx = v_uint16()
|
|
|
|
+
|
|
class Elf64Section(Elf32Section):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -121,6 +128,7 @@ def __init__(self):
|
|
self.sh_addralign = v_uint64()
|
|
self.sh_entsize = v_uint64()
|
|
|
|
+
|
|
class Elf64Pheader(Elf32Pheader):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -140,6 +148,7 @@ def __init__(self):
|
|
self.r_offset = v_ptr64()
|
|
self.r_info = v_uint64()
|
|
|
|
+
|
|
class Elf64Reloca(Elf64Reloc):
|
|
def __init__(self):
|
|
#Elf64Reloc.__init__(self)
|
|
@@ -148,6 +157,7 @@ def __init__(self):
|
|
self.r_info = v_uint64()
|
|
self.r_addend = v_uint64()
|
|
|
|
+
|
|
class Elf64Symbol(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -158,6 +168,7 @@ def __init__(self):
|
|
self.st_value = v_uint64()
|
|
self.st_size = v_uint64()
|
|
|
|
+
|
|
class Elf64Dynamic(Elf32Dynamic):
|
|
pass
|
|
|
|
diff --git a/vstruct/defs/macho/loader.py b/vstruct/defs/macho/loader.py
|
|
index 82716eb..62cbf7e 100644
|
|
--- a/vstruct/defs/macho/loader.py
|
|
+++ b/vstruct/defs/macho/loader.py
|
|
@@ -6,6 +6,7 @@
|
|
cpu_subtype_t = vs_prim.v_uint32
|
|
lc_str = vs_prim.v_uint32
|
|
|
|
+
|
|
class mach_header(vstruct.VStruct):
|
|
|
|
def __init__(self):
|
|
@@ -350,6 +351,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.itoc = vs_prim.v_uint32() # index into the table of contents
|
|
|
|
+
|
|
class prebind_cksum_command(vstruct.VStruct):
|
|
|
|
def __init__(self):
|
|
diff --git a/vstruct/defs/win32.py b/vstruct/defs/win32.py
|
|
index d1ad0ea..60a0c9b 100644
|
|
--- a/vstruct/defs/win32.py
|
|
+++ b/vstruct/defs/win32.py
|
|
@@ -21,12 +21,14 @@ def __init__(self):
|
|
self.ExceptionAddress = v_ptr()
|
|
self.NumberParameters = v_uint32()
|
|
|
|
+
|
|
class EXCEPTION_REGISTRATION(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.prev = v_ptr()
|
|
self.handler = v_ptr()
|
|
|
|
+
|
|
class HEAP(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -67,6 +69,7 @@ def __init__(self):
|
|
self.FrontEndHeapType = v_uint8()
|
|
self.LastSegmentIndex = v_uint8()
|
|
|
|
+
|
|
class HEAP_SEGMENT(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -86,6 +89,7 @@ def __init__(self):
|
|
self.Reserved = v_uint16()
|
|
self.LastEntryInSegment = v_ptr()
|
|
|
|
+
|
|
class HEAP_ENTRY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -96,12 +100,14 @@ def __init__(self):
|
|
self.Unused = v_uint8()
|
|
self.TagIndex = v_uint8()
|
|
|
|
+
|
|
class ListEntry(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Flink = v_ptr()
|
|
self.Blink = v_ptr()
|
|
|
|
+
|
|
class NT_TIB(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -114,6 +120,7 @@ def __init__(self):
|
|
self.ArbitraryUserPtr = v_ptr()
|
|
self.Self = v_ptr()
|
|
|
|
+
|
|
class PEB(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -184,6 +191,7 @@ def __init__(self):
|
|
self.SystemAssemblyStorageMap = v_ptr()
|
|
self.MinimumStackCommit = v_uint32()
|
|
|
|
+
|
|
class SEH3_SCOPETABLE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -191,6 +199,7 @@ def __init__(self):
|
|
self.FilterFunction = v_ptr()
|
|
self.HandlerFunction = v_ptr()
|
|
|
|
+
|
|
class SEH4_SCOPETABLE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -202,6 +211,7 @@ def __init__(self):
|
|
self.FilterFunction = v_ptr()
|
|
self.HandlerFunction = v_ptr()
|
|
|
|
+
|
|
class TEB(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
@@ -221,11 +231,13 @@ def __init__(self):
|
|
self.CurrentLocale = v_uint32()
|
|
self.FpSoftwareStatusRegister = v_uint32()
|
|
|
|
+
|
|
class CLSID(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.uuid = GUID()
|
|
|
|
+
|
|
class IID(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
diff --git a/vstruct/defs/windows/__init__.py b/vstruct/defs/windows/__init__.py
|
|
index 172f9a3..a231feb 100644
|
|
--- a/vstruct/defs/windows/__init__.py
|
|
+++ b/vstruct/defs/windows/__init__.py
|
|
@@ -6,6 +6,7 @@
|
|
import ctypes
|
|
import platform
|
|
|
|
+
|
|
def isSysWow64():
|
|
k32 = ctypes.windll.kernel32
|
|
if not hasattr(k32, 'IsWow64Process'):
|
|
@@ -16,6 +17,7 @@ def isSysWow64():
|
|
return False
|
|
return bool(ret.value)
|
|
|
|
+
|
|
def getCurrentDef(normname):
|
|
bname, wver, stuff, whichkern = platform.win32_ver()
|
|
wvertup = wver.split('.')
|
|
@@ -23,14 +25,15 @@ def getCurrentDef(normname):
|
|
if isSysWow64():
|
|
arch = 'wow64'
|
|
|
|
- modname = 'vstruct.defs.windows.win_%s_%s_%s.%s' % (wvertup[0], wvertup[1], arch, normname)
|
|
+ modname = 'vstruct.defs.windows.win_{!s}_{!s}_{!s}.{!s}'.format(wvertup[0], wvertup[1], arch, normname)
|
|
|
|
try:
|
|
mod = __import__(modname, {}, {}, 1)
|
|
- except ImportError, e:
|
|
+ except ImportError as e:
|
|
mod = None
|
|
return mod
|
|
|
|
+
|
|
if __name__ == '__main__':
|
|
- print getCurrentDef('ntdll')
|
|
+ print(getCurrentDef('ntdll'))
|
|
|
|
diff --git a/vstruct/defs/windows/win_5_1_i386/ntdll.py b/vstruct/defs/windows/win_5_1_i386/ntdll.py
|
|
index 0a0c027..48c42bb 100644
|
|
--- a/vstruct/defs/windows/win_5_1_i386/ntdll.py
|
|
+++ b/vstruct/defs/windows/win_5_1_i386/ntdll.py
|
|
@@ -360,11 +360,11 @@ def __init__(self):
|
|
self.CpuID = v_uint8()
|
|
self.CpuStep = v_uint16()
|
|
self.ProcessorState = KPROCESSOR_STATE()
|
|
- self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type
|
|
- self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type
|
|
- self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type
|
|
+ self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type
|
|
+ self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.NpxThread = v_ptr32()
|
|
self.InterruptCount = v_uint32()
|
|
self.KernelTime = v_uint32()
|
|
@@ -376,11 +376,11 @@ def __init__(self):
|
|
self.PageColor = v_uint32()
|
|
self.SkipTick = v_uint32()
|
|
self.MultiThreadSetBusy = v_uint8()
|
|
- self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.ParentNode = v_ptr32()
|
|
self.MultiThreadProcessorSet = v_uint32()
|
|
self.MultiThreadSetMaster = v_ptr32()
|
|
- self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.CcFastReadNoWait = v_uint32()
|
|
self.CcFastReadWait = v_uint32()
|
|
self.CcFastReadNotPossible = v_uint32()
|
|
@@ -396,22 +396,22 @@ def __init__(self):
|
|
self.KeIcacheFlushCount = v_uint32()
|
|
self.KeSecondLevelTbFills = v_uint32()
|
|
self.KeSystemCalls = v_uint32()
|
|
- self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.PacketBarrier = v_uint32()
|
|
self.ReverseStall = v_uint32()
|
|
self.IpiFrame = v_ptr32()
|
|
- self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
- self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
+ self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.TargetSet = v_uint32()
|
|
self.WorkerRoutine = v_ptr32()
|
|
self.IpiFrozen = v_uint32()
|
|
- self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
self.RequestSummary = v_uint32()
|
|
self.SignalDone = v_ptr32()
|
|
- self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.DpcListHead = LIST_ENTRY()
|
|
self.DpcStack = v_ptr32()
|
|
self.DpcCount = v_uint32()
|
|
@@ -423,14 +423,14 @@ def __init__(self):
|
|
self.MaximumDpcQueueDepth = v_uint32()
|
|
self.MinimumDpcRate = v_uint32()
|
|
self.QuantumEnd = v_uint32()
|
|
- self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.DpcLock = v_uint32()
|
|
- self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.CallDpc = KDPC()
|
|
self.ChainedInterruptList = v_ptr32()
|
|
self.LookasideIrpFloat = v_uint32()
|
|
- self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
- self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
+ self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
self.InitialApicId = v_uint8()
|
|
self.LogicalProcessorsPerPhysicalProcessor = v_uint8()
|
|
self._pad0910 = v_bytes(size=1)
|
|
@@ -487,7 +487,7 @@ def __init__(self):
|
|
self.ExceptionRecord = v_ptr32()
|
|
self.ExceptionAddress = v_ptr32()
|
|
self.NumberParameters = v_uint32()
|
|
- self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
|
|
|
|
class SID(vstruct.VStruct):
|
|
@@ -496,7 +496,7 @@ def __init__(self):
|
|
self.Revision = v_uint8()
|
|
self.SubAuthorityCount = v_uint8()
|
|
self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY()
|
|
- self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class PS_JOB_TOKEN_FILTER(vstruct.VStruct):
|
|
@@ -599,7 +599,7 @@ def __init__(self):
|
|
class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Locks = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Locks = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMWSL(vstruct.VStruct):
|
|
@@ -807,7 +807,7 @@ def __init__(self):
|
|
self.ErrorSelector = v_uint32()
|
|
self.DataOffset = v_uint32()
|
|
self.DataSelector = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
self.Cr0NpxState = v_uint32()
|
|
|
|
|
|
@@ -937,7 +937,7 @@ def __init__(self):
|
|
self.KernelStack = v_ptr32()
|
|
self.DebugActive = v_uint8()
|
|
self.State = v_uint8()
|
|
- self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.Iopl = v_uint8()
|
|
self.NpxState = v_uint8()
|
|
self.Saturation = v_uint8()
|
|
@@ -945,7 +945,7 @@ def __init__(self):
|
|
self.ApcState = KAPC_STATE()
|
|
self.ContextSwitches = v_uint32()
|
|
self.IdleSwapBlock = v_uint8()
|
|
- self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.WaitStatus = v_uint32()
|
|
self.WaitIrql = v_uint8()
|
|
self.WaitMode = v_uint8()
|
|
@@ -981,7 +981,7 @@ def __init__(self):
|
|
self.CallbackStack = v_ptr32()
|
|
self.Win32Thread = v_ptr32()
|
|
self.TrapFrame = v_ptr32()
|
|
- self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.PreviousMode = v_uint8()
|
|
self.EnableStackSwap = v_uint8()
|
|
self.LargeStack = v_uint8()
|
|
@@ -1041,7 +1041,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.StartTime = v_uint64()
|
|
self.EndTime = v_uint64()
|
|
- self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
|
|
|
|
class KWAIT_BLOCK(vstruct.VStruct):
|
|
@@ -1060,7 +1060,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Header = DISPATCHER_HEADER()
|
|
self.ProfileListHead = LIST_ENTRY()
|
|
- self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.LdtDescriptor = KGDTENTRY()
|
|
self.Int21Descriptor = KIDTENTRY()
|
|
self.IopmOffset = v_uint16()
|
|
@@ -1120,7 +1120,7 @@ def __init__(self):
|
|
self.EFlags = v_uint32()
|
|
self.Esp = v_uint32()
|
|
self.SegSs = v_uint32()
|
|
- self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
|
|
|
|
class EX_FAST_REF(vstruct.VStruct):
|
|
@@ -1137,7 +1137,7 @@ def __init__(self):
|
|
self.Size = v_uint32()
|
|
self.TagIndex = v_uint16()
|
|
self.CreatorBackTraceIndex = v_uint16()
|
|
- self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
+ self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
|
|
|
|
class PAGEFAULT_HISTORY(vstruct.VStruct):
|
|
@@ -1259,7 +1259,7 @@ def __init__(self):
|
|
self.HashFunction = v_ptr32()
|
|
self.NoOfTraces = v_uint32()
|
|
self.NoOfHits = v_uint32()
|
|
- self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class GENERAL_LOOKASIDE(vstruct.VStruct):
|
|
@@ -1280,7 +1280,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class EX_PUSH_LOCK(vstruct.VStruct):
|
|
@@ -1328,10 +1328,10 @@ def __init__(self):
|
|
self.DataSelector = v_uint32()
|
|
self.MXCsr = v_uint32()
|
|
self.MXCsrMask = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type
|
|
- self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type
|
|
+ self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class unnamed(vstruct.VStruct):
|
|
@@ -1496,7 +1496,7 @@ def __init__(self):
|
|
self.DriverInit = v_ptr32()
|
|
self.DriverStartIo = v_ptr32()
|
|
self.DriverUnload = v_ptr32()
|
|
- self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
+ self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
|
|
|
|
class ACCESS_STATE(vstruct.VStruct):
|
|
@@ -1586,7 +1586,7 @@ def __init__(self):
|
|
class IMAGE_SECTION_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Name = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.Misc = unnamed()
|
|
self.VirtualAddress = v_uint32()
|
|
self.SizeOfRawData = v_uint32()
|
|
@@ -1619,7 +1619,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Offset = v_uint32()
|
|
self.HDC = v_uint32()
|
|
- self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
+ self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
|
|
|
|
class KPROCESSOR_STATE(vstruct.VStruct):
|
|
@@ -1666,12 +1666,12 @@ def __init__(self):
|
|
self.FastPebUnlockRoutine = v_ptr32()
|
|
self.EnvironmentUpdateCount = v_uint32()
|
|
self.KernelCallbackTable = v_ptr32()
|
|
- self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.AtlThunkSListPtr32 = v_uint32()
|
|
self.FreeList = v_ptr32()
|
|
self.TlsExpansionCounter = v_uint32()
|
|
self.TlsBitmap = v_ptr32()
|
|
- self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ReadOnlySharedMemoryBase = v_ptr32()
|
|
self.ReadOnlySharedMemoryHeap = v_ptr32()
|
|
self.ReadOnlyStaticServerData = v_ptr32()
|
|
@@ -1702,10 +1702,10 @@ def __init__(self):
|
|
self.ImageSubsystemMajorVersion = v_uint32()
|
|
self.ImageSubsystemMinorVersion = v_uint32()
|
|
self.ImageProcessAffinityMask = v_uint32()
|
|
- self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
+ self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
self.PostProcessInitRoutine = v_ptr32()
|
|
self.TlsExpansionBitmap = v_ptr32()
|
|
- self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.SessionId = v_uint32()
|
|
self.AppCompatFlags = ULARGE_INTEGER()
|
|
self.AppCompatFlagsUser = ULARGE_INTEGER()
|
|
@@ -1744,7 +1744,7 @@ def __init__(self):
|
|
class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class SECTION_OBJECT_POINTERS(vstruct.VStruct):
|
|
@@ -1799,24 +1799,24 @@ def __init__(self):
|
|
self.CountOfOwnedCriticalSections = v_uint32()
|
|
self.CsrClientThread = v_ptr32()
|
|
self.Win32ThreadInfo = v_ptr32()
|
|
- self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
- self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
+ self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.WOW32Reserved = v_ptr32()
|
|
self.CurrentLocale = v_uint32()
|
|
self.FpSoftwareStatusRegister = v_uint32()
|
|
- self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
+ self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
self.ExceptionCode = v_uint32()
|
|
self.ActivationContextStack = ACTIVATION_CONTEXT_STACK()
|
|
- self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.GdiTebBatch = GDI_TEB_BATCH()
|
|
self.RealClientId = CLIENT_ID()
|
|
self.GdiCachedProcessHandle = v_ptr32()
|
|
self.GdiClientPID = v_uint32()
|
|
self.GdiClientTID = v_uint32()
|
|
self.GdiThreadLocalInfo = v_ptr32()
|
|
- self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
- self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
- self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
+ self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
+ self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
+ self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
self.glReserved2 = v_ptr32()
|
|
self.glSectionInfo = v_ptr32()
|
|
self.glSection = v_ptr32()
|
|
@@ -1825,16 +1825,16 @@ def __init__(self):
|
|
self.glContext = v_ptr32()
|
|
self.LastStatusValue = v_uint32()
|
|
self.StaticUnicodeString = UNICODE_STRING()
|
|
- self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
+ self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
self._pad0e0c = v_bytes(size=2)
|
|
self.DeallocationStack = v_ptr32()
|
|
- self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
self.TlsLinks = LIST_ENTRY()
|
|
self.Vdm = v_ptr32()
|
|
self.ReservedForNtRpc = v_ptr32()
|
|
- self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.HardErrorsAreDisabled = v_uint32()
|
|
- self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.WinSockData = v_ptr32()
|
|
self.GdiBatchCount = v_uint32()
|
|
self.InDbgPrint = v_uint8()
|
|
@@ -1855,7 +1855,7 @@ def __init__(self):
|
|
self.CurrentTransactionHandle = v_ptr32()
|
|
self.ActiveFrame = v_ptr32()
|
|
self.SafeThunkCall = v_uint8()
|
|
- self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
|
|
|
|
class KTRAP_FRAME(vstruct.VStruct):
|
|
@@ -2014,7 +2014,7 @@ def __init__(self):
|
|
self.ProcessLocksList = LIST_ENTRY()
|
|
self.EntryCount = v_uint32()
|
|
self.ContentionCount = v_uint32()
|
|
- self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class OBJECT_TYPE(vstruct.VStruct):
|
|
@@ -2106,8 +2106,8 @@ def __init__(self):
|
|
self.PackageIdleTime = v_uint32()
|
|
self.DebugCount = v_uint32()
|
|
self.LastSysTime = v_uint32()
|
|
- self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type
|
|
- self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self._pad0090 = v_bytes(size=4)
|
|
self.PreviousC3StateTime = v_uint64()
|
|
self.KneeThrottleIndex = v_uint8()
|
|
@@ -2271,7 +2271,7 @@ def __init__(self):
|
|
self.ClusterShift = v_uint8()
|
|
self.Reserved = v_uint8()
|
|
self.NumberOfChunks = v_uint16()
|
|
- self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class PEB_FREE_BLOCK(vstruct.VStruct):
|
|
@@ -2342,7 +2342,7 @@ def __init__(self):
|
|
self.TraceCount = v_uint32()
|
|
self.Index = v_uint16()
|
|
self.Depth = v_uint16()
|
|
- self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class OBJECT_DUMP_CONTROL(vstruct.VStruct):
|
|
@@ -2358,7 +2358,7 @@ def __init__(self):
|
|
self.Data1 = v_uint32()
|
|
self.Data2 = v_uint16()
|
|
self.Data3 = v_uint16()
|
|
- self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class HANDLE_TRACE_DB_ENTRY(vstruct.VStruct):
|
|
@@ -2367,13 +2367,13 @@ def __init__(self):
|
|
self.ClientId = CLIENT_ID()
|
|
self.Handle = v_ptr32()
|
|
self.Type = v_uint32()
|
|
- self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class KAPC_STATE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.ApcListHead = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.ApcListHead = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Process = v_ptr32()
|
|
self.KernelApcInProgress = v_uint8()
|
|
self.KernelApcPending = v_uint8()
|
|
@@ -2420,7 +2420,7 @@ def __init__(self):
|
|
self.RealDevice = v_ptr32()
|
|
self.SerialNumber = v_uint32()
|
|
self.ReferenceCount = v_uint32()
|
|
- self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class IO_STACK_LOCATION(vstruct.VStruct):
|
|
@@ -2468,7 +2468,7 @@ def __init__(self):
|
|
self.ProcessorMask = v_uint32()
|
|
self.Color = v_uint32()
|
|
self.MmShiftedColor = v_uint32()
|
|
- self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self._pad0018 = v_bytes(size=4)
|
|
self.DeadStackList = SLIST_HEADER()
|
|
self.PfnDereferenceSListHead = SLIST_HEADER()
|
|
@@ -2537,17 +2537,17 @@ def __init__(self):
|
|
self.TimeZoneBias = KSYSTEM_TIME()
|
|
self.ImageNumberLow = v_uint16()
|
|
self.ImageNumberHigh = v_uint16()
|
|
- self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
+ self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
self.MaxStackTraceDepth = v_uint32()
|
|
self.CryptoExponent = v_uint32()
|
|
self.TimeZoneId = v_uint32()
|
|
- self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
self.NtProductType = v_uint32()
|
|
self.ProductTypeIsValid = v_uint8()
|
|
self._pad026c = v_bytes(size=3)
|
|
self.NtMajorVersion = v_uint32()
|
|
self.NtMinorVersion = v_uint32()
|
|
- self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Reserved1 = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
self.TimeSlip = v_uint32()
|
|
@@ -2570,7 +2570,7 @@ def __init__(self):
|
|
self.TestRetInstruction = v_uint64()
|
|
self.SystemCall = v_uint32()
|
|
self.SystemCallReturn = v_uint32()
|
|
- self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.TickCount = KSYSTEM_TIME()
|
|
self._pad0330 = v_bytes(size=4)
|
|
self.Cookie = v_uint32()
|
|
@@ -2586,7 +2586,7 @@ def __init__(self):
|
|
self.ErrorSelector = v_uint32()
|
|
self.DataOffset = v_uint32()
|
|
self.DataSelector = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
|
|
|
|
class KSPECIAL_REGISTERS(vstruct.VStruct):
|
|
@@ -2606,7 +2606,7 @@ def __init__(self):
|
|
self.Idtr = DESCRIPTOR()
|
|
self.Tr = v_uint16()
|
|
self.Ldtr = v_uint16()
|
|
- self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
|
|
|
|
class FS_FILTER_PARAMETERS(vstruct.VStruct):
|
|
@@ -2640,7 +2640,7 @@ def __init__(self):
|
|
self.AlignRound = v_uint32()
|
|
self.AlignMask = v_uint32()
|
|
self.VirtualAllocdBlocks = LIST_ENTRY()
|
|
- self.Segments = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.Segments = v_bytes(size=256) # FIXME Unknown Array Type
|
|
self.u = unnamed()
|
|
self.u2 = unnamed()
|
|
self.AllocatorBackTraceIndex = v_uint16()
|
|
@@ -2697,8 +2697,8 @@ def __init__(self):
|
|
self.RundownProtect = EX_RUNDOWN_REF()
|
|
self.UniqueProcessId = v_ptr32()
|
|
self.ActiveProcessLinks = LIST_ENTRY()
|
|
- self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type
|
|
- self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.CommitCharge = v_uint32()
|
|
self.PeakVirtualSize = v_uint32()
|
|
self.VirtualSize = v_uint32()
|
|
@@ -2734,7 +2734,7 @@ def __init__(self):
|
|
self.PageDirectoryPte = HARDWARE_PTE_X86()
|
|
self._pad0170 = v_bytes(size=4)
|
|
self.Session = v_ptr32()
|
|
- self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.JobLinks = LIST_ENTRY()
|
|
self.LockedPagesList = v_ptr32()
|
|
self.ThreadListHead = LIST_ENTRY()
|
|
@@ -2860,7 +2860,7 @@ def __init__(self):
|
|
self.InterfaceType = v_uint32()
|
|
self.BusNumber = v_uint32()
|
|
self.SlotNumber = v_uint32()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.AlternativeLists = v_uint32()
|
|
self.List = v_uint32()
|
|
|
|
@@ -2872,6 +2872,3 @@ def __init__(self):
|
|
self.ShareDisposition = v_uint8()
|
|
self.Flags = v_uint16()
|
|
self.u = unnamed()
|
|
-
|
|
-
|
|
-
|
|
diff --git a/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py b/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py
|
|
index d0d3618..c22bc3f 100644
|
|
--- a/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py
|
|
+++ b/vstruct/defs/windows/win_5_1_i386/ntoskrnl.py
|
|
@@ -598,7 +598,7 @@ def __init__(self):
|
|
self.Revision = v_uint8()
|
|
self.SubAuthorityCount = v_uint8()
|
|
self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY()
|
|
- self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMPTE_HARDWARE(vstruct.VStruct):
|
|
@@ -628,7 +628,7 @@ def __init__(self):
|
|
self.Esp0 = v_uint32()
|
|
self.Ss0 = v_uint16()
|
|
self.Reserved1 = v_uint16()
|
|
- self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.CR3 = v_uint32()
|
|
self.Eip = v_uint32()
|
|
self.EFlags = v_uint32()
|
|
@@ -657,7 +657,7 @@ def __init__(self):
|
|
self.Flags = v_uint16()
|
|
self.IoMapBase = v_uint16()
|
|
self.IoMaps = v_uint16()
|
|
- self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class CURDIR(vstruct.VStruct):
|
|
@@ -694,7 +694,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Revision = v_uint32()
|
|
self.DynamicThrottle = v_uint8()
|
|
- self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.DisableCStates = v_uint32()
|
|
self.PolicyCount = v_uint32()
|
|
self.Policy = v_uint32()
|
|
@@ -818,7 +818,7 @@ def __init__(self):
|
|
self.ExceptionAddress = v_uint64()
|
|
self.NumberParameters = v_uint32()
|
|
self.unusedAlignment = v_uint32()
|
|
- self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type
|
|
|
|
|
|
class KPROCESS(vstruct.VStruct):
|
|
@@ -826,7 +826,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Header = DISPATCHER_HEADER()
|
|
self.ProfileListHead = LIST_ENTRY()
|
|
- self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.DirectoryTableBase = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.LdtDescriptor = KGDTENTRY()
|
|
self.Int21Descriptor = KIDTENTRY()
|
|
self.IopmOffset = v_uint16()
|
|
@@ -905,7 +905,7 @@ def __init__(self):
|
|
self.FreeMisses = v_uint32()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Counters = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Counters = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMPTE_TRANSITION(vstruct.VStruct):
|
|
@@ -944,7 +944,7 @@ def __init__(self):
|
|
self.Mode = v_uint32()
|
|
self.ServiceCount = v_uint32()
|
|
self.DispatchCount = v_uint32()
|
|
- self.DispatchCode = v_bytes(size=424) # FIXME Unknown Array Type
|
|
+ self.DispatchCode = v_bytes(size=424) # FIXME Unknown Array Type
|
|
|
|
|
|
class OWNER_ENTRY(vstruct.VStruct):
|
|
@@ -1024,7 +1024,7 @@ def __init__(self):
|
|
self.PeakNonPagedBytes = v_uint32()
|
|
self.BurstAllocationsFailedDeliberately = v_uint32()
|
|
self.SessionTrims = v_uint32()
|
|
- self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class MAILSLOT_CREATE_PARAMETERS(vstruct.VStruct):
|
|
@@ -1106,7 +1106,7 @@ class SYSTEM_POWER_LEVEL(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Enable = v_uint8()
|
|
- self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.BatteryLevel = v_uint32()
|
|
self.PowerPolicy = POWER_ACTION_POLICY()
|
|
self.MinSystemState = v_uint32()
|
|
@@ -1225,7 +1225,7 @@ class CM_INDEX_HINT_BLOCK(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Count = v_uint32()
|
|
- self.HashKey = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.HashKey = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class SEP_AUDIT_POLICY(vstruct.VStruct):
|
|
@@ -1380,9 +1380,9 @@ def __init__(self):
|
|
self.ThreadOwner = v_ptr32()
|
|
self.ResourceList = LIST_ENTRY()
|
|
self.HashChainList = LIST_ENTRY()
|
|
- self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.LastAcquireTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.LastReleaseTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.LastAcquireTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.LastReleaseTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class HEAP_PSEUDO_TAG_ENTRY(vstruct.VStruct):
|
|
@@ -1426,7 +1426,7 @@ def __init__(self):
|
|
self.PromoteLimit = v_uint32()
|
|
self.DemotePercent = v_uint8()
|
|
self.PromotePercent = v_uint8()
|
|
- self.Spare = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.AllowDemotion = v_uint32()
|
|
|
|
|
|
@@ -1551,7 +1551,7 @@ def __init__(self):
|
|
self.RealDevice = v_ptr32()
|
|
self.SerialNumber = v_uint32()
|
|
self.ReferenceCount = v_uint32()
|
|
- self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class SEGMENT(vstruct.VStruct):
|
|
@@ -1605,17 +1605,17 @@ def __init__(self):
|
|
self.TimeZoneBias = KSYSTEM_TIME()
|
|
self.ImageNumberLow = v_uint16()
|
|
self.ImageNumberHigh = v_uint16()
|
|
- self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
+ self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
self.MaxStackTraceDepth = v_uint32()
|
|
self.CryptoExponent = v_uint32()
|
|
self.TimeZoneId = v_uint32()
|
|
- self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
self.NtProductType = v_uint32()
|
|
self.ProductTypeIsValid = v_uint8()
|
|
self._pad026c = v_bytes(size=3)
|
|
self.NtMajorVersion = v_uint32()
|
|
self.NtMinorVersion = v_uint32()
|
|
- self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Reserved1 = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
self.TimeSlip = v_uint32()
|
|
@@ -1638,7 +1638,7 @@ def __init__(self):
|
|
self.TestRetInstruction = v_uint64()
|
|
self.SystemCall = v_uint32()
|
|
self.SystemCallReturn = v_uint32()
|
|
- self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.TickCount = KSYSTEM_TIME()
|
|
self._pad0330 = v_bytes(size=4)
|
|
self.Cookie = v_uint32()
|
|
@@ -1690,7 +1690,7 @@ def __init__(self):
|
|
self.AlignRound = v_uint32()
|
|
self.AlignMask = v_uint32()
|
|
self.VirtualAllocdBlocks = LIST_ENTRY()
|
|
- self.Segments = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.Segments = v_bytes(size=256) # FIXME Unknown Array Type
|
|
self.u = unnamed()
|
|
self.u2 = unnamed()
|
|
self.AllocatorBackTraceIndex = v_uint16()
|
|
@@ -1738,8 +1738,8 @@ def __init__(self):
|
|
self.RundownProtect = EX_RUNDOWN_REF()
|
|
self.UniqueProcessId = v_ptr32()
|
|
self.ActiveProcessLinks = LIST_ENTRY()
|
|
- self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type
|
|
- self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.QuotaUsage = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.QuotaPeak = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.CommitCharge = v_uint32()
|
|
self.PeakVirtualSize = v_uint32()
|
|
self.VirtualSize = v_uint32()
|
|
@@ -1775,7 +1775,7 @@ def __init__(self):
|
|
self.PageDirectoryPte = HARDWARE_PTE()
|
|
self._pad0170 = v_bytes(size=4)
|
|
self.Session = v_ptr32()
|
|
- self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.ImageFileName = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.JobLinks = LIST_ENTRY()
|
|
self.LockedPagesList = v_ptr32()
|
|
self.ThreadListHead = LIST_ENTRY()
|
|
@@ -1828,7 +1828,7 @@ def __init__(self):
|
|
self.NotifyBlock = v_ptr32()
|
|
self.ProcessID = v_ptr32()
|
|
self.Callers = v_uint32()
|
|
- self.CallerAddress = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.CallerAddress = v_bytes(size=40) # FIXME Unknown Array Type
|
|
self.KeyBodyList = LIST_ENTRY()
|
|
|
|
|
|
@@ -1965,7 +1965,7 @@ def __init__(self):
|
|
self.MaxStateChange = v_uint8()
|
|
self.MaxManipulate = v_uint8()
|
|
self.Simulation = v_uint8()
|
|
- self.Unused = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Unused = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.KernBase = v_uint64()
|
|
self.PsLoadedModuleList = v_uint64()
|
|
self.DebuggerDataList = v_uint64()
|
|
@@ -2054,8 +2054,8 @@ def __init__(self):
|
|
self.HighestPermittedHashAddress = v_ptr32()
|
|
self.NumberOfImageWaiters = v_uint32()
|
|
self.VadBitMapHint = v_uint32()
|
|
- self.UsedPageTableEntries = v_bytes(size=1536) # FIXME Unknown Array Type
|
|
- self.CommittedPageTables = v_bytes(size=96) # FIXME Unknown Array Type
|
|
+ self.UsedPageTableEntries = v_bytes(size=1536) # FIXME Unknown Array Type
|
|
+ self.CommittedPageTables = v_bytes(size=96) # FIXME Unknown Array Type
|
|
|
|
|
|
class POP_THERMAL_ZONE(vstruct.VStruct):
|
|
@@ -2143,7 +2143,7 @@ def __init__(self):
|
|
self.Idtr = DESCRIPTOR()
|
|
self.Tr = v_uint16()
|
|
self.Ldtr = v_uint16()
|
|
- self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
|
|
|
|
class POWER_ACTION_POLICY(vstruct.VStruct):
|
|
@@ -2200,7 +2200,7 @@ def __init__(self):
|
|
self.ErrorSelector = v_uint32()
|
|
self.DataOffset = v_uint32()
|
|
self.DataSelector = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
self.Cr0NpxState = v_uint32()
|
|
|
|
|
|
@@ -2260,7 +2260,7 @@ def __init__(self):
|
|
self.ControlArea = v_ptr32()
|
|
self.FileResource = v_ptr32()
|
|
self.Mdl = MDL()
|
|
- self.Page = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Page = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class CACHED_CHILD_LIST(vstruct.VStruct):
|
|
@@ -2282,7 +2282,7 @@ def __init__(self):
|
|
self.KernelStack = v_ptr32()
|
|
self.DebugActive = v_uint8()
|
|
self.State = v_uint8()
|
|
- self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.Iopl = v_uint8()
|
|
self.NpxState = v_uint8()
|
|
self.Saturation = v_uint8()
|
|
@@ -2290,7 +2290,7 @@ def __init__(self):
|
|
self.ApcState = KAPC_STATE()
|
|
self.ContextSwitches = v_uint32()
|
|
self.IdleSwapBlock = v_uint8()
|
|
- self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare0 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.WaitStatus = v_uint32()
|
|
self.WaitIrql = v_uint8()
|
|
self.WaitMode = v_uint8()
|
|
@@ -2326,7 +2326,7 @@ def __init__(self):
|
|
self.CallbackStack = v_ptr32()
|
|
self.Win32Thread = v_ptr32()
|
|
self.TrapFrame = v_ptr32()
|
|
- self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.PreviousMode = v_uint8()
|
|
self.EnableStackSwap = v_uint8()
|
|
self.LargeStack = v_uint8()
|
|
@@ -2380,7 +2380,7 @@ def __init__(self):
|
|
self.EFlags = v_uint32()
|
|
self.Esp = v_uint32()
|
|
self.SegSs = v_uint32()
|
|
- self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
|
|
|
|
class DBGKD_GET_CONTEXT(vstruct.VStruct):
|
|
@@ -2446,7 +2446,7 @@ def __init__(self):
|
|
self.CriticalSection = RTL_CRITICAL_SECTION()
|
|
self.RtlHandleTable = RTL_HANDLE_TABLE()
|
|
self.NumberOfBuckets = v_uint32()
|
|
- self.Buckets = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Buckets = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class IMAGE_ROM_OPTIONAL_HEADER(vstruct.VStruct):
|
|
@@ -2463,7 +2463,7 @@ def __init__(self):
|
|
self.BaseOfData = v_uint32()
|
|
self.BaseOfBss = v_uint32()
|
|
self.GprMask = v_uint32()
|
|
- self.CprMask = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.CprMask = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.GpValue = v_uint32()
|
|
|
|
|
|
@@ -2532,7 +2532,7 @@ def __init__(self):
|
|
self.InterruptTime = v_uint64()
|
|
self.FeatureFlags = v_uint32()
|
|
self.HiberFlags = v_uint8()
|
|
- self.spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.NoHiberPtes = v_uint32()
|
|
self.HiberVa = v_uint32()
|
|
self.HiberPte = LARGE_INTEGER()
|
|
@@ -2673,8 +2673,8 @@ def __init__(self):
|
|
class KiIoAccessMap(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type
|
|
+ self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type
|
|
|
|
|
|
class KAPC(vstruct.VStruct):
|
|
@@ -2707,7 +2707,7 @@ def __init__(self):
|
|
class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_RANGE_LIST(vstruct.VStruct):
|
|
@@ -2765,7 +2765,7 @@ def __init__(self):
|
|
self.SectionSize = LARGE_INTEGER()
|
|
self.ValidDataLength = LARGE_INTEGER()
|
|
self.ValidDataGoal = LARGE_INTEGER()
|
|
- self.InitialVacbs = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.InitialVacbs = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.Vacbs = v_ptr32()
|
|
self.FileObject = v_ptr32()
|
|
self.ActiveVacb = v_ptr32()
|
|
@@ -2853,7 +2853,7 @@ def __init__(self):
|
|
self.ProcessLocksList = LIST_ENTRY()
|
|
self.EntryCount = v_uint32()
|
|
self.ContentionCount = v_uint32()
|
|
- self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class PNP_DEVICE_EVENT_ENTRY(vstruct.VStruct):
|
|
@@ -2888,9 +2888,9 @@ def __init__(self):
|
|
class VI_DEADLOCK_GLOBALS(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Nodes = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.Resources = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.Threads = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Nodes = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Resources = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Threads = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.TimeAcquire = v_uint64()
|
|
self.TimeRelease = v_uint64()
|
|
self.BytesAllocated = v_uint32()
|
|
@@ -2915,7 +2915,7 @@ def __init__(self):
|
|
self.FreeNodeCount = v_uint32()
|
|
self.Instigator = v_ptr32()
|
|
self.NumberOfParticipants = v_uint32()
|
|
- self.Participant = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Participant = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.CacheReductionInProgress = v_uint32()
|
|
|
|
|
|
@@ -3007,8 +3007,8 @@ def __init__(self):
|
|
self.PackageIdleTime = v_uint32()
|
|
self.DebugCount = v_uint32()
|
|
self.LastSysTime = v_uint32()
|
|
- self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type
|
|
- self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.TotalIdleStateTime = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.TotalIdleTransitions = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self._pad0090 = v_bytes(size=4)
|
|
self.PreviousC3StateTime = v_uint64()
|
|
self.KneeThrottleIndex = v_uint8()
|
|
@@ -3112,7 +3112,7 @@ def __init__(self):
|
|
self.ClusterShift = v_uint8()
|
|
self.Reserved = v_uint8()
|
|
self.NumberOfChunks = v_uint16()
|
|
- self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class PEB_FREE_BLOCK(vstruct.VStruct):
|
|
@@ -3126,7 +3126,7 @@ class CMHIVE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Hive = HHIVE()
|
|
- self.FileHandles = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.FileHandles = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.NotifyList = LIST_ENTRY()
|
|
self.HiveList = LIST_ENTRY()
|
|
self.HiveLock = v_ptr32()
|
|
@@ -3227,7 +3227,7 @@ def __init__(self):
|
|
class PCI_HEADER_TYPE_1(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.BaseAddresses = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.BaseAddresses = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.PrimaryBus = v_uint8()
|
|
self.SecondaryBus = v_uint8()
|
|
self.SubordinateBus = v_uint8()
|
|
@@ -3244,7 +3244,7 @@ def __init__(self):
|
|
self.IOBaseUpper16 = v_uint16()
|
|
self.IOLimitUpper16 = v_uint16()
|
|
self.CapabilitiesPtr = v_uint8()
|
|
- self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.ROMBaseAddress = v_uint32()
|
|
self.InterruptLine = v_uint8()
|
|
self.InterruptPin = v_uint8()
|
|
@@ -3254,13 +3254,13 @@ def __init__(self):
|
|
class PCI_HEADER_TYPE_0(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.BaseAddresses = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.BaseAddresses = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.CIS = v_uint32()
|
|
self.SubVendorID = v_uint16()
|
|
self.SubSystemID = v_uint16()
|
|
self.ROMBaseAddress = v_uint32()
|
|
self.CapabilitiesPtr = v_uint8()
|
|
- self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved1 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.Reserved2 = v_uint32()
|
|
self.InterruptLine = v_uint8()
|
|
self.InterruptPin = v_uint8()
|
|
@@ -3297,7 +3297,7 @@ def __init__(self):
|
|
self.ClientId = CLIENT_ID()
|
|
self.Handle = v_ptr32()
|
|
self.Type = v_uint32()
|
|
- self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class LPCP_NONPAGED_PORT_QUEUE(vstruct.VStruct):
|
|
@@ -3311,7 +3311,7 @@ class DEVICE_RELATIONS(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Count = v_uint32()
|
|
- self.Objects = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Objects = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class HEAP_TAG_ENTRY(vstruct.VStruct):
|
|
@@ -3322,7 +3322,7 @@ def __init__(self):
|
|
self.Size = v_uint32()
|
|
self.TagIndex = v_uint16()
|
|
self.CreatorBackTraceIndex = v_uint16()
|
|
- self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
+ self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMPAGING_FILE(vstruct.VStruct):
|
|
@@ -3336,7 +3336,7 @@ def __init__(self):
|
|
self.PeakUsage = v_uint32()
|
|
self.Hint = v_uint32()
|
|
self.HighestPage = v_uint32()
|
|
- self.Entry = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Entry = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.Bitmap = v_ptr32()
|
|
self.File = v_ptr32()
|
|
self.PageFileName = UNICODE_STRING()
|
|
@@ -3366,7 +3366,7 @@ def __init__(self):
|
|
self.ErrorSelector = v_uint32()
|
|
self.DataOffset = v_uint32()
|
|
self.DataSelector = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
|
|
|
|
class CMP_OFFSET_ARRAY(vstruct.VStruct):
|
|
@@ -3387,7 +3387,7 @@ def __init__(self):
|
|
self.Type = v_uint32()
|
|
self.Flags = v_uint16()
|
|
self.Spare = v_uint16()
|
|
- self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMVAD_FLAGS2(vstruct.VStruct):
|
|
@@ -3484,7 +3484,7 @@ def __init__(self):
|
|
class HMAP_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Directory = v_bytes(size=4096) # FIXME Unknown Array Type
|
|
+ self.Directory = v_bytes(size=4096) # FIXME Unknown Array Type
|
|
|
|
|
|
class DBGKD_LOAD_SYMBOLS64(vstruct.VStruct):
|
|
@@ -3535,7 +3535,7 @@ def __init__(self):
|
|
self.Priority = v_uint32()
|
|
self.Flags = v_uint32()
|
|
self.Descriptor = v_ptr32()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
|
|
|
|
class EX_FAST_REF(vstruct.VStruct):
|
|
@@ -3606,7 +3606,7 @@ def __init__(self):
|
|
class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Locks = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Locks = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class THERMAL_INFORMATION(vstruct.VStruct):
|
|
@@ -3622,7 +3622,7 @@ def __init__(self):
|
|
self.CriticalTripPoint = v_uint32()
|
|
self.ActiveTripPointCount = v_uint8()
|
|
self._pad0024 = v_bytes(size=3)
|
|
- self.ActiveTripPoint = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.ActiveTripPoint = v_bytes(size=40) # FIXME Unknown Array Type
|
|
|
|
|
|
class CLIENT_ID(vstruct.VStruct):
|
|
@@ -3769,7 +3769,7 @@ def __init__(self):
|
|
self.ImageList = LIST_ENTRY()
|
|
self.GlobalPteEntry = v_ptr32()
|
|
self.CopyOnWriteCount = v_uint32()
|
|
- self.SessionPoolAllocationFailures = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.SessionPoolAllocationFailures = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.AttachCount = v_uint32()
|
|
self.AttachEvent = KEVENT()
|
|
self.LastProcess = v_ptr32()
|
|
@@ -3856,7 +3856,7 @@ def __init__(self):
|
|
self.HeaderType = v_uint8()
|
|
self.BIST = v_uint8()
|
|
self.u = unnamed()
|
|
- self.DeviceSpecific = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.DeviceSpecific = v_bytes(size=192) # FIXME Unknown Array Type
|
|
|
|
|
|
class IO_SECURITY_CONTEXT(vstruct.VStruct):
|
|
@@ -3888,7 +3888,7 @@ def __init__(self):
|
|
self.IdleTimeout = v_uint32()
|
|
self.IdleSensitivity = v_uint8()
|
|
self.DynamicThrottle = v_uint8()
|
|
- self.Spare2 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Spare2 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.MinSleep = v_uint32()
|
|
self.MaxSleep = v_uint32()
|
|
self.ReducedLatencySleep = v_uint32()
|
|
@@ -3900,7 +3900,7 @@ def __init__(self):
|
|
self.VideoTimeout = v_uint32()
|
|
self.VideoDimDisplay = v_uint8()
|
|
self._pad00c8 = v_bytes(size=3)
|
|
- self.VideoReserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.VideoReserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.SpindownTimeout = v_uint32()
|
|
self.OptimizeForPower = v_uint8()
|
|
self.FanThrottleTolerance = v_uint8()
|
|
@@ -3992,7 +3992,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.StartTime = v_uint64()
|
|
self.EndTime = v_uint64()
|
|
- self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.IdleHandlerReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
|
|
|
|
class KWAIT_BLOCK(vstruct.VStruct):
|
|
@@ -4066,7 +4066,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.MaximumNumberOfHandles = v_uint32()
|
|
self.SizeOfHandleTableEntry = v_uint32()
|
|
- self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.FreeHandles = v_ptr32()
|
|
self.CommittedHandles = v_ptr32()
|
|
self.UnCommittedHandles = v_ptr32()
|
|
@@ -4174,7 +4174,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class ARBITER_ORDERING_LIST(vstruct.VStruct):
|
|
@@ -4205,10 +4205,10 @@ def __init__(self):
|
|
self.DataSelector = v_uint32()
|
|
self.MXCsr = v_uint32()
|
|
self.MXCsrMask = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type
|
|
- self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Reserved3 = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Reserved4 = v_bytes(size=224) # FIXME Unknown Array Type
|
|
+ self.Align16Byte = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class ARBITER_LIST_ENTRY(vstruct.VStruct):
|
|
@@ -4337,7 +4337,7 @@ def __init__(self):
|
|
self.BusData = v_ptr32()
|
|
self.DeviceControlExtensionSize = v_uint32()
|
|
self.BusAddresses = v_ptr32()
|
|
- self.Reserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.GetBusData = v_ptr32()
|
|
self.SetBusData = v_ptr32()
|
|
self.AdjustResourceList = v_ptr32()
|
|
@@ -4380,12 +4380,12 @@ def __init__(self):
|
|
self.FastPebUnlockRoutine = v_ptr32()
|
|
self.EnvironmentUpdateCount = v_uint32()
|
|
self.KernelCallbackTable = v_ptr32()
|
|
- self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.AtlThunkSListPtr32 = v_uint32()
|
|
self.FreeList = v_ptr32()
|
|
self.TlsExpansionCounter = v_uint32()
|
|
self.TlsBitmap = v_ptr32()
|
|
- self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ReadOnlySharedMemoryBase = v_ptr32()
|
|
self.ReadOnlySharedMemoryHeap = v_ptr32()
|
|
self.ReadOnlyStaticServerData = v_ptr32()
|
|
@@ -4416,10 +4416,10 @@ def __init__(self):
|
|
self.ImageSubsystemMajorVersion = v_uint32()
|
|
self.ImageSubsystemMinorVersion = v_uint32()
|
|
self.ImageProcessAffinityMask = v_uint32()
|
|
- self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
+ self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
self.PostProcessInitRoutine = v_ptr32()
|
|
self.TlsExpansionBitmap = v_ptr32()
|
|
- self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.SessionId = v_uint32()
|
|
self.AppCompatFlags = ULARGE_INTEGER()
|
|
self.AppCompatFlagsUser = ULARGE_INTEGER()
|
|
@@ -4472,10 +4472,10 @@ def __init__(self):
|
|
self.RootCell = v_uint32()
|
|
self.Length = v_uint32()
|
|
self.Cluster = v_uint32()
|
|
- self.FileName = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.Reserved1 = v_bytes(size=396) # FIXME Unknown Array Type
|
|
+ self.FileName = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.Reserved1 = v_bytes(size=396) # FIXME Unknown Array Type
|
|
self.CheckSum = v_uint32()
|
|
- self.Reserved2 = v_bytes(size=3576) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=3576) # FIXME Unknown Array Type
|
|
self.BootType = v_uint32()
|
|
self.BootRecover = v_uint32()
|
|
|
|
@@ -4530,7 +4530,7 @@ def __init__(self):
|
|
self.Header = PCI_SECONDARY_EXTENSION()
|
|
self.Interface = v_ptr32()
|
|
self.BusFdoExtension = v_ptr32()
|
|
- self.InstanceName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
+ self.InstanceName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
self.CommonInstance = ARBITER_INSTANCE()
|
|
|
|
|
|
@@ -4584,7 +4584,7 @@ class POOL_HACKER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Header = POOL_HEADER()
|
|
- self.Contents = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Contents = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class HANDLE_TABLE(vstruct.VStruct):
|
|
@@ -4707,7 +4707,7 @@ def __init__(self):
|
|
self.PromotePercent = v_uint8()
|
|
self.DemotePercent = v_uint8()
|
|
self.State = v_uint8()
|
|
- self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.IdleFunction = v_ptr32()
|
|
|
|
|
|
@@ -4785,7 +4785,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Type = v_uint32()
|
|
self.Flags = v_uint8()
|
|
- self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.Battery = unnamed()
|
|
|
|
|
|
@@ -4803,7 +4803,7 @@ def __init__(self):
|
|
self.GlobalDosDevicesDirectory = v_ptr32()
|
|
self.ReferenceCount = v_uint32()
|
|
self.DriveMap = v_uint32()
|
|
- self.DriveType = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.DriveType = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class CONTROL_AREA(vstruct.VStruct):
|
|
@@ -4830,13 +4830,13 @@ def __init__(self):
|
|
self.Data1 = v_uint32()
|
|
self.Data2 = v_uint16()
|
|
self.Data3 = v_uint16()
|
|
- self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class KAPC_STATE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.ApcListHead = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ApcListHead = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.Process = v_ptr32()
|
|
self.KernelApcInProgress = v_uint8()
|
|
self.KernelApcPending = v_uint8()
|
|
@@ -4954,7 +4954,7 @@ def __init__(self):
|
|
self.DriverInit = v_ptr32()
|
|
self.DriverStartIo = v_ptr32()
|
|
self.DriverUnload = v_ptr32()
|
|
- self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
+ self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
|
|
|
|
class SECURITY_DESCRIPTOR_RELATIVE(vstruct.VStruct):
|
|
@@ -4975,9 +4975,9 @@ def __init__(self):
|
|
self.Length = v_uint32()
|
|
self.Reserved = v_uint32()
|
|
self.MemoryBlock = v_ptr32()
|
|
- self.CommonBuffer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.CommonBuffer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self._pad0018 = v_bytes(size=4)
|
|
- self.PhysicalAddress = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PhysicalAddress = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.StallRoutine = v_ptr32()
|
|
self.OpenRoutine = v_ptr32()
|
|
self.WriteRoutine = v_ptr32()
|
|
@@ -5024,7 +5024,7 @@ def __init__(self):
|
|
class TOKEN_SOURCE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.SourceName = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.SourceName = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.SourceIdentifier = LUID()
|
|
|
|
|
|
@@ -5075,11 +5075,11 @@ def __init__(self):
|
|
self.CpuID = v_uint8()
|
|
self.CpuStep = v_uint16()
|
|
self.ProcessorState = KPROCESSOR_STATE()
|
|
- self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type
|
|
- self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type
|
|
- self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.PrcbPad0 = v_bytes(size=92) # FIXME Unknown Array Type
|
|
+ self.LockQueue = v_bytes(size=92) # FIXME Unknown Array Type
|
|
+ self.PrcbPad1 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.NpxThread = v_ptr32()
|
|
self.InterruptCount = v_uint32()
|
|
self.KernelTime = v_uint32()
|
|
@@ -5091,11 +5091,11 @@ def __init__(self):
|
|
self.PageColor = v_uint32()
|
|
self.SkipTick = v_uint32()
|
|
self.MultiThreadSetBusy = v_uint8()
|
|
- self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Spare2 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.ParentNode = v_ptr32()
|
|
self.MultiThreadProcessorSet = v_uint32()
|
|
self.MultiThreadSetMaster = v_ptr32()
|
|
- self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ThreadStartCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.CcFastReadNoWait = v_uint32()
|
|
self.CcFastReadWait = v_uint32()
|
|
self.CcFastReadNotPossible = v_uint32()
|
|
@@ -5111,22 +5111,22 @@ def __init__(self):
|
|
self.KeIcacheFlushCount = v_uint32()
|
|
self.KeSecondLevelTbFills = v_uint32()
|
|
self.KeSystemCalls = v_uint32()
|
|
- self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SpareCounter0 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPNPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PPPagedLookasideList = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.PacketBarrier = v_uint32()
|
|
self.ReverseStall = v_uint32()
|
|
self.IpiFrame = v_ptr32()
|
|
- self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
- self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.PrcbPad2 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
+ self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.TargetSet = v_uint32()
|
|
self.WorkerRoutine = v_ptr32()
|
|
self.IpiFrozen = v_uint32()
|
|
- self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.PrcbPad3 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
self.RequestSummary = v_uint32()
|
|
self.SignalDone = v_ptr32()
|
|
- self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.PrcbPad4 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.DpcListHead = LIST_ENTRY()
|
|
self.DpcStack = v_ptr32()
|
|
self.DpcCount = v_uint32()
|
|
@@ -5138,14 +5138,14 @@ def __init__(self):
|
|
self.MaximumDpcQueueDepth = v_uint32()
|
|
self.MinimumDpcRate = v_uint32()
|
|
self.QuantumEnd = v_uint32()
|
|
- self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.PrcbPad5 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.DpcLock = v_uint32()
|
|
- self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.PrcbPad6 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.CallDpc = KDPC()
|
|
self.ChainedInterruptList = v_ptr32()
|
|
self.LookasideIrpFloat = v_uint32()
|
|
- self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
- self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
+ self.SpareFields0 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
self.InitialApicId = v_uint8()
|
|
self.LogicalProcessorsPerPhysicalProcessor = v_uint8()
|
|
self._pad0910 = v_bytes(size=1)
|
|
@@ -5201,7 +5201,7 @@ def __init__(self):
|
|
self.ExceptionRecord = v_ptr32()
|
|
self.ExceptionAddress = v_ptr32()
|
|
self.NumberParameters = v_uint32()
|
|
- self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
|
|
|
|
class MMPTE(vstruct.VStruct):
|
|
@@ -5220,8 +5220,8 @@ def __init__(self):
|
|
self.Root = v_ptr32()
|
|
self.ThreadEntry = v_ptr32()
|
|
self.Active = v_uint32()
|
|
- self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.ParentStackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.ParentStackTrace = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class KPCR(vstruct.VStruct):
|
|
@@ -5248,13 +5248,13 @@ def __init__(self):
|
|
self.Spare0 = v_uint8()
|
|
self.SecondLevelCacheAssociativity = v_uint8()
|
|
self.VdmAlert = v_uint32()
|
|
- self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.SecondLevelCacheSize = v_uint32()
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.InterruptMode = v_uint32()
|
|
self.Spare1 = v_uint8()
|
|
self._pad00dc = v_bytes(size=3)
|
|
- self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type
|
|
+ self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type
|
|
self.PrcbData = KPRCB()
|
|
|
|
|
|
@@ -5275,7 +5275,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Signature = v_uint16()
|
|
self.Count = v_uint16()
|
|
- self.List = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.List = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class IMAGE_DEBUG_DIRECTORY(vstruct.VStruct):
|
|
@@ -5405,7 +5405,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Offset = v_uint32()
|
|
self.HDC = v_uint32()
|
|
- self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
+ self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
|
|
|
|
class WMI_CLIENT_CONTEXT(vstruct.VStruct):
|
|
@@ -5442,7 +5442,7 @@ def __init__(self):
|
|
class OBJECT_DIRECTORY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.HashBuckets = v_bytes(size=148) # FIXME Unknown Array Type
|
|
+ self.HashBuckets = v_bytes(size=148) # FIXME Unknown Array Type
|
|
self.Lock = EX_PUSH_LOCK()
|
|
self.DeviceMap = v_ptr32()
|
|
self.SessionId = v_uint32()
|
|
@@ -5594,7 +5594,7 @@ def __init__(self):
|
|
self.Spare1 = v_uint8()
|
|
self.LoaderFlags = v_uint32()
|
|
self.ImageFileSize = v_uint32()
|
|
- self.Reserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class HEAP_SUBSEGMENT(vstruct.VStruct):
|
|
@@ -5653,7 +5653,7 @@ def __init__(self):
|
|
self.ReferenceCount = v_uint16()
|
|
self.Flags = v_uint8()
|
|
self.NameLength = v_uint8()
|
|
- self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
|
|
|
|
class CHILD_LIST(vstruct.VStruct):
|
|
@@ -5749,7 +5749,7 @@ def __init__(self):
|
|
self.FileOffset2 = LARGE_INTEGER()
|
|
self.BeyondLastByte2 = LARGE_INTEGER()
|
|
self.ReadAheadOffset = LARGE_INTEGER()
|
|
- self.ReadAheadLength = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ReadAheadLength = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ReadAheadSpinLock = v_uint32()
|
|
self.PrivateLinks = LIST_ENTRY()
|
|
|
|
@@ -5764,7 +5764,7 @@ def __init__(self):
|
|
class IMAGE_SECTION_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Name = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.Misc = unnamed()
|
|
self.VirtualAddress = v_uint32()
|
|
self.SizeOfRawData = v_uint32()
|
|
@@ -5828,8 +5828,8 @@ def __init__(self):
|
|
self.LastWriteTime = LARGE_INTEGER()
|
|
self.Spare = v_uint32()
|
|
self.Parent = v_uint32()
|
|
- self.SubKeyCounts = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.SubKeyLists = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.SubKeyCounts = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.SubKeyLists = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ValueList = CHILD_LIST()
|
|
self.Security = v_uint32()
|
|
self.Class = v_uint32()
|
|
@@ -5840,7 +5840,7 @@ def __init__(self):
|
|
self.WorkVar = v_uint32()
|
|
self.NameLength = v_uint16()
|
|
self.ClassLength = v_uint16()
|
|
- self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
|
|
|
|
class SE_AUDIT_PROCESS_CREATION_INFO(vstruct.VStruct):
|
|
@@ -5890,24 +5890,24 @@ def __init__(self):
|
|
self.CountOfOwnedCriticalSections = v_uint32()
|
|
self.CsrClientThread = v_ptr32()
|
|
self.Win32ThreadInfo = v_ptr32()
|
|
- self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
- self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
+ self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.WOW32Reserved = v_ptr32()
|
|
self.CurrentLocale = v_uint32()
|
|
self.FpSoftwareStatusRegister = v_uint32()
|
|
- self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
+ self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
self.ExceptionCode = v_uint32()
|
|
self.ActivationContextStack = ACTIVATION_CONTEXT_STACK()
|
|
- self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SpareBytes1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.GdiTebBatch = GDI_TEB_BATCH()
|
|
self.RealClientId = CLIENT_ID()
|
|
self.GdiCachedProcessHandle = v_ptr32()
|
|
self.GdiClientPID = v_uint32()
|
|
self.GdiClientTID = v_uint32()
|
|
self.GdiThreadLocalInfo = v_ptr32()
|
|
- self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
- self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
- self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
+ self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
+ self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
+ self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
self.glReserved2 = v_ptr32()
|
|
self.glSectionInfo = v_ptr32()
|
|
self.glSection = v_ptr32()
|
|
@@ -5919,13 +5919,13 @@ def __init__(self):
|
|
self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
self._pad0e0c = v_bytes(size=2)
|
|
self.DeallocationStack = v_ptr32()
|
|
- self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
self.TlsLinks = LIST_ENTRY()
|
|
self.Vdm = v_ptr32()
|
|
self.ReservedForNtRpc = v_ptr32()
|
|
- self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.HardErrorsAreDisabled = v_uint32()
|
|
- self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.Instrumentation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.WinSockData = v_ptr32()
|
|
self.GdiBatchCount = v_uint32()
|
|
self.InDbgPrint = v_uint8()
|
|
@@ -5946,7 +5946,7 @@ def __init__(self):
|
|
self.CurrentTransactionHandle = v_ptr32()
|
|
self.ActiveFrame = v_ptr32()
|
|
self.SafeThunkCall = v_uint8()
|
|
- self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.BooleanSpare = v_bytes(size=3) # FIXME Unknown Array Type
|
|
|
|
|
|
class EX_RUNDOWN_REF(vstruct.VStruct):
|
|
@@ -6003,10 +6003,10 @@ def __init__(self):
|
|
self.e_cs = v_uint16()
|
|
self.e_lfarlc = v_uint16()
|
|
self.e_ovno = v_uint16()
|
|
- self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.e_oemid = v_uint16()
|
|
self.e_oeminfo = v_uint16()
|
|
- self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.e_lfanew = v_uint32()
|
|
|
|
|
|
@@ -6048,7 +6048,7 @@ def __init__(self):
|
|
self.ExceptionRecord = v_uint32()
|
|
self.ExceptionAddress = v_uint32()
|
|
self.NumberParameters = v_uint32()
|
|
- self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
|
|
|
|
class DBGKD_READ_MEMORY32(vstruct.VStruct):
|
|
@@ -6172,7 +6172,7 @@ def __init__(self):
|
|
self.ConvKey = v_uint32()
|
|
self.NextHash = v_ptr32()
|
|
self.NameLength = v_uint16()
|
|
- self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Name = v_bytes(size=2) # FIXME Unknown Array Type
|
|
|
|
|
|
class EX_PUSH_LOCK_WAIT_BLOCK(vstruct.VStruct):
|
|
@@ -6353,7 +6353,7 @@ def __init__(self):
|
|
self.ProcessorMask = v_uint32()
|
|
self.Color = v_uint32()
|
|
self.MmShiftedColor = v_uint32()
|
|
- self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self._pad0018 = v_bytes(size=4)
|
|
self.DeadStackList = SLIST_HEADER()
|
|
self.PfnDereferenceSListHead = SLIST_HEADER()
|
|
@@ -6382,9 +6382,9 @@ def __init__(self):
|
|
self.ProcessorThrottle = v_uint8()
|
|
self.ProcessorMinThrottle = v_uint8()
|
|
self.ProcessorMaxThrottle = v_uint8()
|
|
- self.spare2 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.spare2 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.DiskSpinDown = v_uint8()
|
|
- self.spare3 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.spare3 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.SystemBatteriesPresent = v_uint8()
|
|
self.BatteriesAreShortTerm = v_uint8()
|
|
self.BatteryScale = v_uint8()
|
|
@@ -6454,7 +6454,7 @@ def __init__(self):
|
|
self.InterfaceType = v_uint32()
|
|
self.BusNumber = v_uint32()
|
|
self.SlotNumber = v_uint32()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.AlternativeLists = v_uint32()
|
|
self.List = v_uint32()
|
|
|
|
diff --git a/vstruct/defs/windows/win_5_1_i386/win32k.py b/vstruct/defs/windows/win_5_1_i386/win32k.py
|
|
index ced38bc..30213dc 100644
|
|
--- a/vstruct/defs/windows/win_5_1_i386/win32k.py
|
|
+++ b/vstruct/defs/windows/win_5_1_i386/win32k.py
|
|
@@ -355,7 +355,8 @@ def __init__(self):
|
|
self.ReleaseForCcFlush = v_ptr32()
|
|
|
|
|
|
-class ACCESS_STATE::__unnamed(vstruct.VStruct):
|
|
+class ACCESS_STATE::__unnamed(vstruct.VStruct): # FIXME and others? Type annotation syntax may be wrong?
|
|
+ # FIXME see https://dev.to/dstarner/using-pythons-type-annotations-4cfe
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.InitialPrivilegeSet = INITIAL_PRIVILEGE_SET()
|
|
diff --git a/vstruct/defs/windows/win_6_1_amd64/ntdll.py b/vstruct/defs/windows/win_6_1_amd64/ntdll.py
|
|
index a352a81..57945ef 100644
|
|
--- a/vstruct/defs/windows/win_6_1_amd64/ntdll.py
|
|
+++ b/vstruct/defs/windows/win_6_1_amd64/ntdll.py
|
|
@@ -646,7 +646,7 @@ def __init__(self):
|
|
self.Revision = v_uint8()
|
|
self.SubAuthorityCount = v_uint8()
|
|
self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY()
|
|
- self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class WHEA_ERROR_PACKET_V2(vstruct.VStruct):
|
|
@@ -675,7 +675,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Mask = v_uint64()
|
|
self.Group = v_uint16()
|
|
- self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class UMS_CONTROL_BLOCK(vstruct.VStruct):
|
|
@@ -699,14 +699,14 @@ def __init__(self):
|
|
class KREQUEST_PACKET(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.CurrentPacket = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.CurrentPacket = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.WorkerRoutine = v_ptr64()
|
|
|
|
|
|
class PERFINFO_GROUPMASK(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Masks = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Masks = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class HARDWARE_PTE(vstruct.VStruct):
|
|
@@ -827,7 +827,7 @@ def __init__(self):
|
|
self.NextBlock = v_ptr64()
|
|
self.ExpectedEncodedEntry = HEAP_ENTRY()
|
|
self.ExpectedDecodedEntry = HEAP_ENTRY()
|
|
- self.StackTrace = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=256) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_BALANCED_LINKS(vstruct.VStruct):
|
|
@@ -837,7 +837,7 @@ def __init__(self):
|
|
self.LeftChild = v_ptr64()
|
|
self.RightChild = v_ptr64()
|
|
self.Balance = v_uint8()
|
|
- self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9396(vstruct.VStruct):
|
|
@@ -863,8 +863,8 @@ def __init__(self):
|
|
self.QuantumReset = v_uint8()
|
|
self.Visited = v_uint8()
|
|
self.Unused3 = v_uint8()
|
|
- self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type
|
|
- self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.IdealGlobalNode = v_uint16()
|
|
self.Flags = KEXECUTE_OPTIONS()
|
|
self.Unused1 = v_uint8()
|
|
@@ -896,7 +896,7 @@ def __init__(self):
|
|
self.Size = v_uint64()
|
|
self.TagIndex = v_uint16()
|
|
self.CreatorBackTraceIndex = v_uint16()
|
|
- self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
+ self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
|
|
|
|
class WHEA_ERROR_RECORD_SECTION_DESCRIPTOR_FLAGS(vstruct.VStruct):
|
|
@@ -1047,7 +1047,7 @@ def __init__(self):
|
|
self.HashFunction = v_ptr64()
|
|
self.NoOfTraces = v_uint64()
|
|
self.NoOfHits = v_uint64()
|
|
- self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class OWNER_ENTRY(vstruct.VStruct):
|
|
@@ -1085,7 +1085,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Hint = v_ptr64()
|
|
self.ActiveSubsegment = v_ptr64()
|
|
- self.CachedItems = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.CachedItems = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.SListHeader = SLIST_HEADER()
|
|
self.Counters = HEAP_BUCKET_COUNTERS()
|
|
self.LocalData = v_ptr64()
|
|
@@ -1223,8 +1223,8 @@ def __init__(self):
|
|
self.ResetCount = v_uint32()
|
|
self._pad0010 = v_bytes(size=4)
|
|
self.StartTime = v_uint64()
|
|
- self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.State = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.State = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9636(vstruct.VStruct):
|
|
@@ -1242,7 +1242,7 @@ def __init__(self):
|
|
self.Offset = v_uint32()
|
|
self._pad0008 = v_bytes(size=4)
|
|
self.HDC = v_uint64()
|
|
- self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
+ self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
|
|
|
|
class THREAD_PERFORMANCE_DATA(vstruct.VStruct):
|
|
@@ -1345,7 +1345,7 @@ def __init__(self):
|
|
self.SegCs = v_uint16()
|
|
self.Fill0 = v_uint8()
|
|
self.Logging = v_uint8()
|
|
- self.Fill1 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Fill1 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.EFlags = v_uint32()
|
|
self.Fill2 = v_uint32()
|
|
self.Rsp = v_uint64()
|
|
@@ -1429,7 +1429,7 @@ def __init__(self):
|
|
self.SectionType = GUID()
|
|
self.FRUId = GUID()
|
|
self.SectionSeverity = v_uint32()
|
|
- self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type
|
|
|
|
|
|
class OBJECT_TYPE_INITIALIZER(vstruct.VStruct):
|
|
@@ -1558,7 +1558,7 @@ def __init__(self):
|
|
self.RealDevice = v_ptr64()
|
|
self.SerialNumber = v_uint32()
|
|
self.ReferenceCount = v_uint32()
|
|
- self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class PP_LOOKASIDE_LIST(vstruct.VStruct):
|
|
@@ -1593,23 +1593,23 @@ def __init__(self):
|
|
self.TimeZoneBias = KSYSTEM_TIME()
|
|
self.ImageNumberLow = v_uint16()
|
|
self.ImageNumberHigh = v_uint16()
|
|
- self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
+ self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
self.MaxStackTraceDepth = v_uint32()
|
|
self.CryptoExponent = v_uint32()
|
|
self.TimeZoneId = v_uint32()
|
|
self.LargePageMinimum = v_uint32()
|
|
- self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.NtProductType = v_uint32()
|
|
self.ProductTypeIsValid = v_uint8()
|
|
self._pad026c = v_bytes(size=3)
|
|
self.NtMajorVersion = v_uint32()
|
|
self.NtMinorVersion = v_uint32()
|
|
- self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Reserved1 = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
self.TimeSlip = v_uint32()
|
|
self.AlternativeArchitecture = v_uint32()
|
|
- self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.SystemExpirationDate = LARGE_INTEGER()
|
|
self.SuiteMask = v_uint32()
|
|
self.KdDebuggerEnabled = v_uint8()
|
|
@@ -1622,20 +1622,20 @@ def __init__(self):
|
|
self.NumberOfPhysicalPages = v_uint32()
|
|
self.SafeBootMode = v_uint8()
|
|
self.TscQpcData = v_uint8()
|
|
- self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.SharedDataFlags = v_uint32()
|
|
- self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.TestRetInstruction = v_uint64()
|
|
self.SystemCall = v_uint32()
|
|
self.SystemCallReturn = v_uint32()
|
|
- self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SystemCallPad = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.TickCount = KSYSTEM_TIME()
|
|
- self.TickCountPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.TickCountPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.Cookie = v_uint32()
|
|
- self.CookiePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.CookiePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.ConsoleSessionForegroundProcessId = v_uint64()
|
|
- self.Wow64SharedInformation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.UserModeGlobalLogger = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Wow64SharedInformation = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.UserModeGlobalLogger = v_bytes(size=32) # FIXME Unknown Array Type
|
|
self.ImageFileExecutionOptions = v_uint32()
|
|
self.LangGenerationCount = v_uint32()
|
|
self.Reserved5 = v_uint64()
|
|
@@ -1648,7 +1648,7 @@ def __init__(self):
|
|
self.AppCompatFlag = v_uint32()
|
|
self.SystemDllNativeRelocation = v_uint64()
|
|
self.SystemDllWowRelocation = v_uint32()
|
|
- self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.XState = XSTATE_CONFIGURATION()
|
|
|
|
|
|
@@ -1773,8 +1773,8 @@ def __init__(self):
|
|
self.RundownProtect = EX_RUNDOWN_REF()
|
|
self.UniqueProcessId = v_ptr64()
|
|
self.ActiveProcessLinks = LIST_ENTRY()
|
|
- self.ProcessQuotaUsage = v_bytes(size=16) # FIXME Unknown Array Type
|
|
- self.ProcessQuotaPeak = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.ProcessQuotaUsage = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.ProcessQuotaPeak = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.CommitCharge = v_uint64()
|
|
self.QuotaBlock = v_ptr64()
|
|
self.CpuQuotaBlock = v_ptr64()
|
|
@@ -1811,7 +1811,7 @@ def __init__(self):
|
|
self.FreeTebHint = v_ptr64()
|
|
self.PageDirectoryPte = HARDWARE_PTE()
|
|
self.Session = v_ptr64()
|
|
- self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type
|
|
+ self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type
|
|
self.PriorityClass = v_uint8()
|
|
self.JobLinks = LIST_ENTRY()
|
|
self.LockedPagesList = v_ptr64()
|
|
@@ -1920,8 +1920,8 @@ def __init__(self):
|
|
class KTIMER_TABLE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.TimerExpiry = v_bytes(size=512) # FIXME Unknown Array Type
|
|
- self.TimerEntries = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.TimerExpiry = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.TimerEntries = v_bytes(size=512) # FIXME Unknown Array Type
|
|
|
|
|
|
class FAST_IO_DISPATCH(vstruct.VStruct):
|
|
@@ -2119,7 +2119,7 @@ class _unnamed_8013(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.InPath = v_uint8()
|
|
- self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self._pad0008 = v_bytes(size=4)
|
|
self.Type = v_uint32()
|
|
|
|
@@ -2152,7 +2152,7 @@ def __init__(self):
|
|
self.ThreadLock = v_uint64()
|
|
self.WaitRegister = KWAIT_STATUS_REGISTER()
|
|
self.Running = v_uint8()
|
|
- self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.KernelStackResident = v_uint32()
|
|
self.ApcState = KAPC_STATE()
|
|
self.DeferredProcessor = v_uint32()
|
|
@@ -2186,7 +2186,7 @@ def __init__(self):
|
|
self.Affinity = GROUP_AFFINITY()
|
|
self.IdealProcessor = v_uint32()
|
|
self.UserIdealProcessor = v_uint32()
|
|
- self.ApcStatePointer = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.ApcStatePointer = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.SavedApcState = KAPC_STATE()
|
|
self.Win32Thread = v_ptr64()
|
|
self.StackBase = v_ptr64()
|
|
@@ -2209,7 +2209,7 @@ class _unnamed_8934(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.BankNumber = v_uint8()
|
|
- self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
self.Status = MCI_STATS()
|
|
self.Address = MCI_ADDR()
|
|
self.Misc = v_uint64()
|
|
@@ -2506,7 +2506,7 @@ def __init__(self):
|
|
class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9235(vstruct.VStruct):
|
|
@@ -2686,7 +2686,7 @@ def __init__(self):
|
|
self.ClusterShift = v_uint8()
|
|
self.Reserved = v_uint8()
|
|
self.NumberOfChunks = v_uint16()
|
|
- self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class KSTACK_AREA(vstruct.VStruct):
|
|
@@ -2784,7 +2784,7 @@ def __init__(self):
|
|
self.IndexHigh = v_uint16()
|
|
self.Index = v_uint16()
|
|
self.Depth = v_uint16()
|
|
- self.BackTrace = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.BackTrace = v_bytes(size=256) # FIXME Unknown Array Type
|
|
|
|
|
|
class OBJECT_DUMP_CONTROL(vstruct.VStruct):
|
|
@@ -2801,7 +2801,7 @@ def __init__(self):
|
|
self.Handle = v_ptr64()
|
|
self.Type = v_uint32()
|
|
self._pad0020 = v_bytes(size=4)
|
|
- self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class GENERAL_LOOKASIDE_POOL(vstruct.VStruct):
|
|
@@ -2822,7 +2822,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_SRWLOCK(vstruct.VStruct):
|
|
@@ -2861,7 +2861,7 @@ def __init__(self):
|
|
class KDESCRIPTOR(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Pad = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Pad = v_bytes(size=6) # FIXME Unknown Array Type
|
|
self.Limit = v_uint16()
|
|
self.Base = v_ptr64()
|
|
|
|
@@ -2999,7 +2999,7 @@ def __init__(self):
|
|
class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Locks = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.Locks = v_bytes(size=256) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_TRACE_BLOCK(vstruct.VStruct):
|
|
@@ -3168,7 +3168,7 @@ def __init__(self):
|
|
class _unnamed_9653(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Data = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Data = v_bytes(size=12) # FIXME Unknown Array Type
|
|
|
|
|
|
class KWAIT_BLOCK(vstruct.VStruct):
|
|
@@ -3320,7 +3320,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_8929(vstruct.VStruct):
|
|
@@ -3458,13 +3458,13 @@ def __init__(self):
|
|
self.CrossProcessFlags = v_uint32()
|
|
self._pad0058 = v_bytes(size=4)
|
|
self.KernelCallbackTable = v_ptr64()
|
|
- self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.AtlThunkSListPtr32 = v_uint32()
|
|
self.ApiSetMap = v_ptr64()
|
|
self.TlsExpansionCounter = v_uint32()
|
|
self._pad0078 = v_bytes(size=4)
|
|
self.TlsBitmap = v_ptr64()
|
|
- self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ReadOnlySharedMemoryBase = v_ptr64()
|
|
self.HotpatchInformation = v_ptr64()
|
|
self.ReadOnlyStaticServerData = v_ptr64()
|
|
@@ -3496,10 +3496,10 @@ def __init__(self):
|
|
self.ImageSubsystemMinorVersion = v_uint32()
|
|
self._pad0138 = v_bytes(size=4)
|
|
self.ActiveProcessAffinityMask = v_uint64()
|
|
- self.GdiHandleBuffer = v_bytes(size=240) # FIXME Unknown Array Type
|
|
+ self.GdiHandleBuffer = v_bytes(size=240) # FIXME Unknown Array Type
|
|
self.PostProcessInitRoutine = v_ptr64()
|
|
self.TlsExpansionBitmap = v_ptr64()
|
|
- self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.SessionId = v_uint32()
|
|
self._pad02c8 = v_bytes(size=4)
|
|
self.AppCompatFlags = ULARGE_INTEGER()
|
|
@@ -3515,7 +3515,7 @@ def __init__(self):
|
|
self.FlsCallback = v_ptr64()
|
|
self.FlsListHead = LIST_ENTRY()
|
|
self.FlsBitmap = v_ptr64()
|
|
- self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.FlsHighIndex = v_uint32()
|
|
self._pad0358 = v_bytes(size=4)
|
|
self.WerRegistrationData = v_ptr64()
|
|
@@ -3539,7 +3539,7 @@ def __init__(self):
|
|
class STACK_TRACE_DATABASE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
self.Reserved2 = v_ptr64()
|
|
self.PeakHashCollisionListLength = v_uint64()
|
|
self.LowerMemoryStart = v_ptr64()
|
|
@@ -3733,7 +3733,7 @@ def __init__(self):
|
|
self.Data1 = v_uint32()
|
|
self.Data2 = v_uint16()
|
|
self.Data3 = v_uint16()
|
|
- self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class HEAP_UCR_DESCRIPTOR(vstruct.VStruct):
|
|
@@ -3756,7 +3756,7 @@ def __init__(self):
|
|
self.u = _unnamed_8922()
|
|
self.ExtCnt = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
- self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type
|
|
|
|
|
|
class PSP_CPU_QUOTA_APC(vstruct.VStruct):
|
|
@@ -3767,7 +3767,7 @@ def __init__(self):
|
|
class KAPC_STATE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type
|
|
self.Process = v_ptr64()
|
|
self.KernelApcInProgress = v_uint8()
|
|
self.KernelApcPending = v_uint8()
|
|
@@ -3906,7 +3906,7 @@ def __init__(self):
|
|
self.DriverInit = v_ptr64()
|
|
self.DriverStartIo = v_ptr64()
|
|
self.DriverUnload = v_ptr64()
|
|
- self.MajorFunction = v_bytes(size=224) # FIXME Unknown Array Type
|
|
+ self.MajorFunction = v_bytes(size=224) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_6629(vstruct.VStruct):
|
|
@@ -3974,7 +3974,7 @@ class TP_NBQ_GUARD(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.GuardLinks = LIST_ENTRY()
|
|
- self.Guards = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.Guards = v_bytes(size=16) # FIXME Unknown Array Type
|
|
|
|
|
|
class flags(vstruct.VStruct):
|
|
@@ -4022,7 +4022,7 @@ def __init__(self):
|
|
self.ExceptionAddress = v_ptr64()
|
|
self.NumberParameters = v_uint32()
|
|
self._pad0020 = v_bytes(size=4)
|
|
- self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=120) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_10210(vstruct.VStruct):
|
|
@@ -4053,24 +4053,24 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.NtTib = NT_TIB()
|
|
self.IdtBase = v_ptr64()
|
|
- self.Unused = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.Unused = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.Irql = v_uint8()
|
|
self.SecondLevelCacheAssociativity = v_uint8()
|
|
self.ObsoleteNumber = v_uint8()
|
|
self.Fill0 = v_uint8()
|
|
- self.Unused0 = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Unused0 = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.MajorVersion = v_uint16()
|
|
self.MinorVersion = v_uint16()
|
|
self.StallScaleFactor = v_uint32()
|
|
- self.Unused1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.Unused1 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.KernelReserved = v_bytes(size=60) # FIXME Unknown Array Type
|
|
self.SecondLevelCacheSize = v_uint32()
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Unused2 = v_uint32()
|
|
self._pad0108 = v_bytes(size=4)
|
|
self.KdVersionBlock = v_ptr64()
|
|
self.Unused3 = v_ptr64()
|
|
- self.PcrAlign1 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
+ self.PcrAlign1 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
self._pad0180 = v_bytes(size=8)
|
|
self.Prcb = KPRCB()
|
|
|
|
@@ -4342,7 +4342,7 @@ def __init__(self):
|
|
class ACCESS_REASONS(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Data = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Data = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class TP_TASK_CALLBACKS(vstruct.VStruct):
|
|
@@ -4493,7 +4493,7 @@ def __init__(self):
|
|
self.RecordId = v_uint64()
|
|
self.Flags = WHEA_ERROR_RECORD_HEADER_FLAGS()
|
|
self.PersistenceInfo = WHEA_PERSISTENCE_INFO()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
|
|
|
|
class EVENT_DESCRIPTOR(vstruct.VStruct):
|
|
@@ -4521,7 +4521,7 @@ def __init__(self):
|
|
self.ExitGate = v_ptr64()
|
|
self.AccessLog = v_ptr64()
|
|
self.WorkingSetExpansionLinks = LIST_ENTRY()
|
|
- self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.MinimumWorkingSetSize = v_uint32()
|
|
self.WorkingSetSize = v_uint32()
|
|
self.WorkingSetPrivateSize = v_uint32()
|
|
@@ -4536,7 +4536,7 @@ def __init__(self):
|
|
self.LastTrimStamp = v_uint16()
|
|
self.PageFaultCount = v_uint32()
|
|
self.RepurposeCount = v_uint32()
|
|
- self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.Flags = MMSUPPORT_FLAGS()
|
|
|
|
|
|
@@ -4657,17 +4657,17 @@ def __init__(self):
|
|
self.CountOfOwnedCriticalSections = v_uint32()
|
|
self.CsrClientThread = v_ptr64()
|
|
self.Win32ThreadInfo = v_ptr64()
|
|
- self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
- self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
+ self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self._pad0100 = v_bytes(size=4)
|
|
self.WOW32Reserved = v_ptr64()
|
|
self.CurrentLocale = v_uint32()
|
|
self.FpSoftwareStatusRegister = v_uint32()
|
|
- self.SystemReserved1 = v_bytes(size=432) # FIXME Unknown Array Type
|
|
+ self.SystemReserved1 = v_bytes(size=432) # FIXME Unknown Array Type
|
|
self.ExceptionCode = v_uint32()
|
|
self._pad02c8 = v_bytes(size=4)
|
|
self.ActivationContextStackPointer = v_ptr64()
|
|
- self.SpareBytes = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.SpareBytes = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.TxFsContext = v_uint32()
|
|
self._pad02f0 = v_bytes(size=4)
|
|
self.GdiTebBatch = GDI_TEB_BATCH()
|
|
@@ -4676,9 +4676,9 @@ def __init__(self):
|
|
self.GdiClientPID = v_uint32()
|
|
self.GdiClientTID = v_uint32()
|
|
self.GdiThreadLocalInfo = v_ptr64()
|
|
- self.Win32ClientInfo = v_bytes(size=496) # FIXME Unknown Array Type
|
|
- self.glDispatchTable = v_bytes(size=1864) # FIXME Unknown Array Type
|
|
- self.glReserved1 = v_bytes(size=232) # FIXME Unknown Array Type
|
|
+ self.Win32ClientInfo = v_bytes(size=496) # FIXME Unknown Array Type
|
|
+ self.glDispatchTable = v_bytes(size=1864) # FIXME Unknown Array Type
|
|
+ self.glReserved1 = v_bytes(size=232) # FIXME Unknown Array Type
|
|
self.glReserved2 = v_ptr64()
|
|
self.glSectionInfo = v_ptr64()
|
|
self.glSection = v_ptr64()
|
|
@@ -4688,17 +4688,17 @@ def __init__(self):
|
|
self.LastStatusValue = v_uint32()
|
|
self._pad1258 = v_bytes(size=4)
|
|
self.StaticUnicodeString = UNICODE_STRING()
|
|
- self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
+ self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
self._pad1478 = v_bytes(size=6)
|
|
self.DeallocationStack = v_ptr64()
|
|
- self.TlsSlots = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.TlsSlots = v_bytes(size=512) # FIXME Unknown Array Type
|
|
self.TlsLinks = LIST_ENTRY()
|
|
self.Vdm = v_ptr64()
|
|
self.ReservedForNtRpc = v_ptr64()
|
|
- self.DbgSsReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.DbgSsReserved = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.HardErrorMode = v_uint32()
|
|
self._pad16b8 = v_bytes(size=4)
|
|
- self.Instrumentation = v_bytes(size=88) # FIXME Unknown Array Type
|
|
+ self.Instrumentation = v_bytes(size=88) # FIXME Unknown Array Type
|
|
self.ActivityId = GUID()
|
|
self.SubProcessTag = v_ptr64()
|
|
self.EtwLocalData = v_ptr64()
|
|
@@ -4765,7 +4765,7 @@ def __init__(self):
|
|
self.MxCsr_Mask = v_uint32()
|
|
self.FloatRegisters = v_uint32()
|
|
self.XmmRegisters = v_uint32()
|
|
- self.Reserved4 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
+ self.Reserved4 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
|
|
|
|
class PO_DIAG_STACK_RECORD(vstruct.VStruct):
|
|
@@ -4773,7 +4773,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.StackDepth = v_uint32()
|
|
self._pad0008 = v_bytes(size=4)
|
|
- self.Stack = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Stack = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class IMAGE_DOS_HEADER(vstruct.VStruct):
|
|
@@ -4793,10 +4793,10 @@ def __init__(self):
|
|
self.e_cs = v_uint16()
|
|
self.e_lfarlc = v_uint16()
|
|
self.e_ovno = v_uint16()
|
|
- self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.e_oemid = v_uint16()
|
|
self.e_oeminfo = v_uint16()
|
|
- self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.e_lfanew = v_uint32()
|
|
|
|
|
|
@@ -4878,7 +4878,7 @@ def __init__(self):
|
|
self.NextThread = v_ptr64()
|
|
self.IdleThread = v_ptr64()
|
|
self.NestingLevel = v_uint8()
|
|
- self.PrcbPad00 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.PrcbPad00 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.Number = v_uint32()
|
|
self.RspBase = v_uint64()
|
|
self.PrcbLock = v_uint64()
|
|
@@ -4888,7 +4888,7 @@ def __init__(self):
|
|
self.CpuID = v_uint8()
|
|
self.CpuStep = v_uint16()
|
|
self.MHz = v_uint32()
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.MinorVersion = v_uint16()
|
|
self.MajorVersion = v_uint16()
|
|
self.BuildType = v_uint8()
|
|
@@ -4955,7 +4955,7 @@ def __init__(self):
|
|
self.MasterOffset = v_uint32()
|
|
self.LastTick = v_uint32()
|
|
self.UnusedPad = v_uint32()
|
|
- self.PrcbPad50 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.PrcbPad50 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.TimerTable = KTIMER_TABLE()
|
|
self.DpcGate = KGATE()
|
|
self.PrcbPad52 = v_ptr64()
|
|
@@ -4974,8 +4974,8 @@ def __init__(self):
|
|
self.ReadySummary = v_uint32()
|
|
self.QueueIndex = v_uint32()
|
|
self.TimerExpirationDpc = KDPC()
|
|
- self.PrcbPad72 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.DispatcherReadyListHead = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.PrcbPad72 = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.DispatcherReadyListHead = v_bytes(size=32) # FIXME Unknown Array Type
|
|
self.InterruptCount = v_uint32()
|
|
self.KernelTime = v_uint32()
|
|
self.UserTime = v_uint32()
|
|
@@ -4983,7 +4983,7 @@ def __init__(self):
|
|
self.InterruptTime = v_uint32()
|
|
self.AdjustDpcThreshold = v_uint32()
|
|
self.DebuggerSavedIRQL = v_uint8()
|
|
- self.PrcbPad80 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
+ self.PrcbPad80 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
self.DpcTimeCount = v_uint32()
|
|
self.DpcTimeLimit = v_uint32()
|
|
self.PeriodicCount = v_uint32()
|
|
@@ -4992,7 +4992,7 @@ def __init__(self):
|
|
self.KeExceptionDispatchCount = v_uint32()
|
|
self.ParentNode = v_ptr64()
|
|
self.StartCycles = v_uint64()
|
|
- self.PrcbPad82 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.PrcbPad82 = v_bytes(size=24) # FIXME Unknown Array Type
|
|
self.MmSpinLockOrdering = v_uint32()
|
|
self.PageColor = v_uint32()
|
|
self.NodeColor = v_uint32()
|
|
@@ -5029,10 +5029,10 @@ def __init__(self):
|
|
self.MmCacheTransitionCount = v_uint32()
|
|
self.MmCacheReadCount = v_uint32()
|
|
self.MmCacheIoCount = v_uint32()
|
|
- self.PrcbPad91 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PrcbPad91 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.RuntimeAccumulation = v_uint64()
|
|
self.PowerState = PROCESSOR_POWER_STATE()
|
|
- self.PrcbPad92 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.PrcbPad92 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.KeAlignmentFixupCount = v_uint32()
|
|
self._pad4918 = v_bytes(size=4)
|
|
self.DpcWatchdogDpc = KDPC()
|
|
@@ -5051,11 +5051,11 @@ def __init__(self):
|
|
self.VirtualApicAssist = v_ptr64()
|
|
self.StatisticsPage = v_ptr64()
|
|
self.RateControl = v_ptr64()
|
|
- self.CacheProcessorMask = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.CacheProcessorMask = v_bytes(size=40) # FIXME Unknown Array Type
|
|
self.PackageProcessorSet = KAFFINITY_EX()
|
|
self.CoreProcessorSet = v_uint64()
|
|
self.PebsIndexAddress = v_ptr64()
|
|
- self.PrcbPad93 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
+ self.PrcbPad93 = v_bytes(size=96) # FIXME Unknown Array Type
|
|
self.SpinLockAcquireCount = v_uint32()
|
|
self.SpinLockContentionCount = v_uint32()
|
|
self.SpinLockSpinCount = v_uint32()
|
|
@@ -5102,8 +5102,8 @@ def __init__(self):
|
|
self.ExBoostSharedOwners = v_uint32()
|
|
self.ExEtwSynchTrackingNotificationsCount = v_uint32()
|
|
self.ExEtwSynchTrackingNotificationsAccountedCount = v_uint32()
|
|
- self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
- self.PrcbPad10 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
+ self.PrcbPad10 = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.FeatureBits = v_uint32()
|
|
self._pad4bd0 = v_bytes(size=4)
|
|
self.UpdateSignature = LARGE_INTEGER()
|
|
@@ -5143,7 +5143,7 @@ def __init__(self):
|
|
self.Count = v_uint16()
|
|
self.Size = v_uint16()
|
|
self.Reserved = v_uint32()
|
|
- self.Bitmap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Bitmap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class DEVICE_OBJECT(vstruct.VStruct):
|
|
@@ -5200,7 +5200,7 @@ def __init__(self):
|
|
self.Rsp0 = v_uint64()
|
|
self.Rsp1 = v_uint64()
|
|
self.Rsp2 = v_uint64()
|
|
- self.Ist = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.Ist = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Reserved1 = v_uint64()
|
|
self.Reserved2 = v_uint16()
|
|
self.IoMapBase = v_uint16()
|
|
@@ -5267,7 +5267,7 @@ def __init__(self):
|
|
self.Seed = v_uint32()
|
|
self.MmShiftedColor = v_uint32()
|
|
self._pad0068 = v_bytes(size=4)
|
|
- self.FreeCount = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.FreeCount = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.Right = v_uint32()
|
|
self.Left = v_uint32()
|
|
self.CachedKernelStacks = CACHED_KSTACK_LIST()
|
|
@@ -5288,7 +5288,7 @@ class XSAVE_AREA_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Mask = v_uint64()
|
|
- self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
|
|
|
|
class MM_DRIVER_VERIFIER_DATA(vstruct.VStruct):
|
|
@@ -5382,7 +5382,7 @@ def __init__(self):
|
|
self.InterfaceType = v_uint32()
|
|
self.BusNumber = v_uint32()
|
|
self.SlotNumber = v_uint32()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.AlternativeLists = v_uint32()
|
|
self.List = v_uint32()
|
|
|
|
diff --git a/vstruct/defs/windows/win_6_1_wow64/ntdll.py b/vstruct/defs/windows/win_6_1_wow64/ntdll.py
|
|
index 33ce552..cf5d354 100644
|
|
--- a/vstruct/defs/windows/win_6_1_wow64/ntdll.py
|
|
+++ b/vstruct/defs/windows/win_6_1_wow64/ntdll.py
|
|
@@ -624,7 +624,7 @@ class _unnamed_9079(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.BankNumber = v_uint8()
|
|
- self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=7) # FIXME Unknown Array Type
|
|
self.Status = MCI_STATS()
|
|
self.Address = MCI_ADDR()
|
|
self.Misc = v_uint64()
|
|
@@ -651,7 +651,7 @@ def __init__(self):
|
|
self.Revision = v_uint8()
|
|
self.SubAuthorityCount = v_uint8()
|
|
self.IdentifierAuthority = SID_IDENTIFIER_AUTHORITY()
|
|
- self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SubAuthority = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class WHEA_ERROR_PACKET_V2(vstruct.VStruct):
|
|
@@ -687,7 +687,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Mask = v_uint32()
|
|
self.Group = v_uint16()
|
|
- self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class KTSS(vstruct.VStruct):
|
|
@@ -698,7 +698,7 @@ def __init__(self):
|
|
self.Esp0 = v_uint32()
|
|
self.Ss0 = v_uint16()
|
|
self.Reserved1 = v_uint16()
|
|
- self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.NotUsed1 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.CR3 = v_uint32()
|
|
self.Eip = v_uint32()
|
|
self.EFlags = v_uint32()
|
|
@@ -727,7 +727,7 @@ def __init__(self):
|
|
self.Flags = v_uint16()
|
|
self.IoMapBase = v_uint16()
|
|
self.IoMaps = v_uint16()
|
|
- self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.IntDirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class CURDIR(vstruct.VStruct):
|
|
@@ -740,7 +740,7 @@ def __init__(self):
|
|
class PERFINFO_GROUPMASK(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Masks = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.Masks = v_bytes(size=32) # FIXME Unknown Array Type
|
|
|
|
|
|
class HANDLE_TABLE_ENTRY_INFO(vstruct.VStruct):
|
|
@@ -775,7 +775,7 @@ def __init__(self):
|
|
self.SectionType = GUID()
|
|
self.FRUId = GUID()
|
|
self.SectionSeverity = v_uint32()
|
|
- self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.FRUText = v_bytes(size=20) # FIXME Unknown Array Type
|
|
|
|
|
|
class PS_CPU_QUOTA_BLOCK(vstruct.VStruct):
|
|
@@ -818,7 +818,7 @@ def __init__(self):
|
|
class _unnamed_9787(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Data = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Data = v_bytes(size=12) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9789(vstruct.VStruct):
|
|
@@ -879,8 +879,8 @@ def __init__(self):
|
|
self.QuantumReset = v_uint8()
|
|
self.Visited = v_uint8()
|
|
self.Unused3 = v_uint8()
|
|
- self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type
|
|
- self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ThreadSeed = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.IdealNode = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.IdealGlobalNode = v_uint16()
|
|
self.Flags = KEXECUTE_OPTIONS()
|
|
self.Unused1 = v_uint8()
|
|
@@ -1052,7 +1052,7 @@ def __init__(self):
|
|
self.HashFunction = v_ptr32()
|
|
self.NoOfTraces = v_uint32()
|
|
self.NoOfHits = v_uint32()
|
|
- self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HashCounter = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class OWNER_ENTRY(vstruct.VStruct):
|
|
@@ -1086,7 +1086,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Hint = v_ptr32()
|
|
self.ActiveSubsegment = v_ptr32()
|
|
- self.CachedItems = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.CachedItems = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.SListHeader = SLIST_HEADER()
|
|
self.Counters = HEAP_BUCKET_COUNTERS()
|
|
self.LocalData = v_ptr32()
|
|
@@ -1202,8 +1202,8 @@ def __init__(self):
|
|
self.ResetCount = v_uint32()
|
|
self._pad0010 = v_bytes(size=4)
|
|
self.StartTime = v_uint64()
|
|
- self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
- self.State = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.BucketLimits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.State = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class GDI_TEB_BATCH(vstruct.VStruct):
|
|
@@ -1211,7 +1211,7 @@ def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Offset = v_uint32()
|
|
self.HDC = v_uint32()
|
|
- self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
+ self.Buffer = v_bytes(size=1240) # FIXME Unknown Array Type
|
|
|
|
|
|
class THREAD_PERFORMANCE_DATA(vstruct.VStruct):
|
|
@@ -1468,7 +1468,7 @@ def __init__(self):
|
|
self.RealDevice = v_ptr32()
|
|
self.SerialNumber = v_uint32()
|
|
self.ReferenceCount = v_uint32()
|
|
- self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.VolumeLabel = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class PP_LOOKASIDE_LIST(vstruct.VStruct):
|
|
@@ -1503,23 +1503,23 @@ def __init__(self):
|
|
self.TimeZoneBias = KSYSTEM_TIME()
|
|
self.ImageNumberLow = v_uint16()
|
|
self.ImageNumberHigh = v_uint16()
|
|
- self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
+ self.NtSystemRoot = v_bytes(size=520) # FIXME Unknown Array Type
|
|
self.MaxStackTraceDepth = v_uint32()
|
|
self.CryptoExponent = v_uint32()
|
|
self.TimeZoneId = v_uint32()
|
|
self.LargePageMinimum = v_uint32()
|
|
- self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.Reserved2 = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.NtProductType = v_uint32()
|
|
self.ProductTypeIsValid = v_uint8()
|
|
self._pad026c = v_bytes(size=3)
|
|
self.NtMajorVersion = v_uint32()
|
|
self.NtMinorVersion = v_uint32()
|
|
- self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.ProcessorFeatures = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.Reserved1 = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
self.TimeSlip = v_uint32()
|
|
self.AlternativeArchitecture = v_uint32()
|
|
- self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.AltArchitecturePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.SystemExpirationDate = LARGE_INTEGER()
|
|
self.SuiteMask = v_uint32()
|
|
self.KdDebuggerEnabled = v_uint8()
|
|
@@ -1532,9 +1532,9 @@ def __init__(self):
|
|
self.NumberOfPhysicalPages = v_uint32()
|
|
self.SafeBootMode = v_uint8()
|
|
self.TscQpcData = v_uint8()
|
|
- self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.TscQpcPad = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.SharedDataFlags = v_uint32()
|
|
- self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.DataFlagsPad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.TestRetInstruction = v_uint64()
|
|
self.SystemCall = v_uint32()
|
|
self.SystemCallReturn = v_uint32()
|
|
@@ -1558,7 +1558,7 @@ def __init__(self):
|
|
self.AppCompatFlag = v_uint32()
|
|
self.SystemDllNativeRelocation = v_uint64()
|
|
self.SystemDllWowRelocation = v_uint32()
|
|
- self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.XStatePad = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.XState = XSTATE_CONFIGURATION()
|
|
|
|
|
|
@@ -1667,8 +1667,8 @@ def __init__(self):
|
|
self.RundownProtect = EX_RUNDOWN_REF()
|
|
self.UniqueProcessId = v_ptr32()
|
|
self.ActiveProcessLinks = LIST_ENTRY()
|
|
- self.ProcessQuotaUsage = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.ProcessQuotaPeak = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ProcessQuotaUsage = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ProcessQuotaPeak = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.CommitCharge = v_uint32()
|
|
self.QuotaBlock = v_ptr32()
|
|
self.CpuQuotaBlock = v_ptr32()
|
|
@@ -1707,7 +1707,7 @@ def __init__(self):
|
|
self.PageDirectoryPte = HARDWARE_PTE_X86()
|
|
self._pad0198 = v_bytes(size=4)
|
|
self.Session = v_ptr32()
|
|
- self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type
|
|
+ self.ImageFileName = v_bytes(size=15) # FIXME Unknown Array Type
|
|
self.PriorityClass = v_uint8()
|
|
self.JobLinks = LIST_ENTRY()
|
|
self.LockedPagesList = v_ptr32()
|
|
@@ -1815,8 +1815,8 @@ def __init__(self):
|
|
class KTIMER_TABLE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.TimerExpiry = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.TimerEntries = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.TimerExpiry = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.TimerEntries = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class FAST_IO_DISPATCH(vstruct.VStruct):
|
|
@@ -1856,7 +1856,7 @@ class _unnamed_8164(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.InPath = v_uint8()
|
|
- self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
self.Type = v_uint32()
|
|
|
|
|
|
@@ -1916,7 +1916,7 @@ def __init__(self):
|
|
self.Idtr = DESCRIPTOR()
|
|
self.Tr = v_uint16()
|
|
self.Ldtr = v_uint16()
|
|
- self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=24) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_CRITICAL_SECTION(vstruct.VStruct):
|
|
@@ -1964,7 +1964,7 @@ def __init__(self):
|
|
self.ErrorSelector = v_uint32()
|
|
self.DataOffset = v_uint32()
|
|
self.DataSelector = v_uint32()
|
|
- self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
+ self.RegisterArea = v_bytes(size=80) # FIXME Unknown Array Type
|
|
self.Cr0NpxState = v_uint32()
|
|
|
|
|
|
@@ -2051,7 +2051,7 @@ def __init__(self):
|
|
self.ThreadLock = v_uint32()
|
|
self.WaitRegister = KWAIT_STATUS_REGISTER()
|
|
self.Running = v_uint8()
|
|
- self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.Alerted = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.KernelStackResident = v_uint32()
|
|
self.ApcState = KAPC_STATE()
|
|
self.NextProcessor = v_uint32()
|
|
@@ -2094,7 +2094,7 @@ def __init__(self):
|
|
self.Affinity = GROUP_AFFINITY()
|
|
self.IdealProcessor = v_uint32()
|
|
self.UserIdealProcessor = v_uint32()
|
|
- self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.ApcStatePointer = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.SavedApcState = KAPC_STATE()
|
|
self.SuspendCount = v_uint8()
|
|
self.Spare1 = v_uint8()
|
|
@@ -2140,7 +2140,7 @@ def __init__(self):
|
|
self.EFlags = v_uint32()
|
|
self.Esp = v_uint32()
|
|
self.SegSs = v_uint32()
|
|
- self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
+ self.ExtendedRegisters = v_bytes(size=512) # FIXME Unknown Array Type
|
|
|
|
|
|
class MCI_STATS(vstruct.VStruct):
|
|
@@ -2354,8 +2354,8 @@ def __init__(self):
|
|
class KiIoAccessMap(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
- self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type
|
|
+ self.DirectionMap = v_bytes(size=32) # FIXME Unknown Array Type
|
|
+ self.IoMap = v_bytes(size=8196) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_8209(vstruct.VStruct):
|
|
@@ -2403,7 +2403,7 @@ def __init__(self):
|
|
class SID_IDENTIFIER_AUTHORITY(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
+ self.Value = v_bytes(size=6) # FIXME Unknown Array Type
|
|
|
|
|
|
class XSTATE_FEATURE(vstruct.VStruct):
|
|
@@ -2576,7 +2576,7 @@ def __init__(self):
|
|
self.ClusterShift = v_uint8()
|
|
self.Reserved = v_uint8()
|
|
self.NumberOfChunks = v_uint16()
|
|
- self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.CompressedChunkSizes = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class WHEA_ERROR_RECORD(vstruct.VStruct):
|
|
@@ -2632,7 +2632,7 @@ def __init__(self):
|
|
self.IndexHigh = v_uint16()
|
|
self.Index = v_uint16()
|
|
self.Depth = v_uint16()
|
|
- self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.BackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class OBJECT_DUMP_CONTROL(vstruct.VStruct):
|
|
@@ -2648,7 +2648,7 @@ def __init__(self):
|
|
self.ClientId = CLIENT_ID()
|
|
self.Handle = v_ptr32()
|
|
self.Type = v_uint32()
|
|
- self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=64) # FIXME Unknown Array Type
|
|
|
|
|
|
class GENERAL_LOOKASIDE_POOL(vstruct.VStruct):
|
|
@@ -2669,7 +2669,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class HARDWARE_PTE_X86(vstruct.VStruct):
|
|
@@ -2692,7 +2692,7 @@ def __init__(self):
|
|
self.Size = v_uint32()
|
|
self.TagIndex = v_uint16()
|
|
self.CreatorBackTraceIndex = v_uint16()
|
|
- self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
+ self.TagName = v_bytes(size=48) # FIXME Unknown Array Type
|
|
|
|
|
|
class STRING(vstruct.VStruct):
|
|
@@ -2779,7 +2779,7 @@ def __init__(self):
|
|
self.NextBlock = v_ptr32()
|
|
self.ExpectedEncodedEntry = HEAP_ENTRY()
|
|
self.ExpectedDecodedEntry = HEAP_ENTRY()
|
|
- self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.StackTrace = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9370(vstruct.VStruct):
|
|
@@ -2895,7 +2895,7 @@ def __init__(self):
|
|
class EX_PUSH_LOCK_CACHE_AWARE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Locks = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Locks = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class RTL_TRACE_BLOCK(vstruct.VStruct):
|
|
@@ -3194,7 +3194,7 @@ def __init__(self):
|
|
self.ListEntry = LIST_ENTRY()
|
|
self.LastTotalAllocates = v_uint32()
|
|
self.LastAllocateMisses = v_uint32()
|
|
- self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Future = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_7775(vstruct.VStruct):
|
|
@@ -3320,13 +3320,13 @@ def __init__(self):
|
|
class ACCESS_REASONS(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Data = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.Data = v_bytes(size=128) # FIXME Unknown Array Type
|
|
|
|
|
|
class STACK_TRACE_DATABASE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.Reserved2 = v_ptr32()
|
|
self.PeakHashCollisionListLength = v_uint32()
|
|
self.LowerMemoryStart = v_ptr32()
|
|
@@ -3508,7 +3508,7 @@ def __init__(self):
|
|
self.Data1 = v_uint32()
|
|
self.Data2 = v_uint16()
|
|
self.Data3 = v_uint16()
|
|
- self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Data4 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class HEAP_UCR_DESCRIPTOR(vstruct.VStruct):
|
|
@@ -3531,7 +3531,7 @@ def __init__(self):
|
|
self.u = _unnamed_9067()
|
|
self.ExtCnt = v_uint32()
|
|
self.Reserved3 = v_uint32()
|
|
- self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.ExtReg = v_bytes(size=192) # FIXME Unknown Array Type
|
|
|
|
|
|
class PSP_CPU_QUOTA_APC(vstruct.VStruct):
|
|
@@ -3542,7 +3542,7 @@ def __init__(self):
|
|
class KAPC_STATE(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
- self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.ApcListHead = v_bytes(size=192) # FIXME Unknown Array Type
|
|
self.Process = v_ptr32()
|
|
self.KernelApcInProgress = v_uint8()
|
|
self.KernelApcPending = v_uint8()
|
|
@@ -3655,7 +3655,7 @@ def __init__(self):
|
|
self.DriverInit = v_ptr32()
|
|
self.DriverStartIo = v_ptr32()
|
|
self.DriverUnload = v_ptr32()
|
|
- self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
+ self.MajorFunction = v_bytes(size=112) # FIXME Unknown Array Type
|
|
|
|
|
|
class FILE_GET_QUOTA_INFORMATION(vstruct.VStruct):
|
|
@@ -3694,7 +3694,7 @@ class TP_NBQ_GUARD(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.GuardLinks = LIST_ENTRY()
|
|
- self.Guards = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.Guards = v_bytes(size=8) # FIXME Unknown Array Type
|
|
|
|
|
|
class flags(vstruct.VStruct):
|
|
@@ -3738,7 +3738,7 @@ def __init__(self):
|
|
self.ExceptionRecord = v_ptr32()
|
|
self.ExceptionAddress = v_ptr32()
|
|
self.NumberParameters = v_uint32()
|
|
- self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
+ self.ExceptionInformation = v_bytes(size=60) # FIXME Unknown Array Type
|
|
|
|
|
|
class PROCESSOR_NUMBER(vstruct.VStruct):
|
|
@@ -3786,13 +3786,13 @@ def __init__(self):
|
|
self.Spare0 = v_uint8()
|
|
self.SecondLevelCacheAssociativity = v_uint8()
|
|
self.VdmAlert = v_uint32()
|
|
- self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.KernelReserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.SecondLevelCacheSize = v_uint32()
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.InterruptMode = v_uint32()
|
|
self.Spare1 = v_uint8()
|
|
self._pad00dc = v_bytes(size=3)
|
|
- self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type
|
|
+ self.KernelReserved2 = v_bytes(size=68) # FIXME Unknown Array Type
|
|
self.PrcbData = KPRCB()
|
|
|
|
|
|
@@ -4129,12 +4129,12 @@ def __init__(self):
|
|
self.IFEOKey = v_ptr32()
|
|
self.CrossProcessFlags = v_uint32()
|
|
self.KernelCallbackTable = v_ptr32()
|
|
- self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.SystemReserved = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.AtlThunkSListPtr32 = v_uint32()
|
|
self.ApiSetMap = v_ptr32()
|
|
self.TlsExpansionCounter = v_uint32()
|
|
self.TlsBitmap = v_ptr32()
|
|
- self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.TlsBitmapBits = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.ReadOnlySharedMemoryBase = v_ptr32()
|
|
self.HotpatchInformation = v_ptr32()
|
|
self.ReadOnlyStaticServerData = v_ptr32()
|
|
@@ -4165,10 +4165,10 @@ def __init__(self):
|
|
self.ImageSubsystemMajorVersion = v_uint32()
|
|
self.ImageSubsystemMinorVersion = v_uint32()
|
|
self.ActiveProcessAffinityMask = v_uint32()
|
|
- self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
+ self.GdiHandleBuffer = v_bytes(size=136) # FIXME Unknown Array Type
|
|
self.PostProcessInitRoutine = v_ptr32()
|
|
self.TlsExpansionBitmap = v_ptr32()
|
|
- self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
+ self.TlsExpansionBitmapBits = v_bytes(size=128) # FIXME Unknown Array Type
|
|
self.SessionId = v_uint32()
|
|
self.AppCompatFlags = ULARGE_INTEGER()
|
|
self.AppCompatFlagsUser = ULARGE_INTEGER()
|
|
@@ -4183,7 +4183,7 @@ def __init__(self):
|
|
self.FlsCallback = v_ptr32()
|
|
self.FlsListHead = LIST_ENTRY()
|
|
self.FlsBitmap = v_ptr32()
|
|
- self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.FlsBitmapBits = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.FlsHighIndex = v_uint32()
|
|
self.WerRegistrationData = v_ptr32()
|
|
self.WerShipAssertPtr = v_ptr32()
|
|
@@ -4206,7 +4206,7 @@ def __init__(self):
|
|
self.LeftChild = v_ptr32()
|
|
self.RightChild = v_ptr32()
|
|
self.Balance = v_uint8()
|
|
- self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=3) # FIXME Unknown Array Type
|
|
|
|
|
|
class _unnamed_9722(vstruct.VStruct):
|
|
@@ -4323,7 +4323,7 @@ def __init__(self):
|
|
self.RecordId = v_uint64()
|
|
self.Flags = WHEA_ERROR_RECORD_HEADER_FLAGS()
|
|
self.PersistenceInfo = WHEA_PERSISTENCE_INFO()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
|
|
|
|
class EVENT_DESCRIPTOR(vstruct.VStruct):
|
|
@@ -4365,7 +4365,7 @@ def __init__(self):
|
|
self.ExitGate = v_ptr32()
|
|
self.AccessLog = v_ptr32()
|
|
self.WorkingSetExpansionLinks = LIST_ENTRY()
|
|
- self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.AgeDistribution = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.MinimumWorkingSetSize = v_uint32()
|
|
self.WorkingSetSize = v_uint32()
|
|
self.WorkingSetPrivateSize = v_uint32()
|
|
@@ -4380,7 +4380,7 @@ def __init__(self):
|
|
self.LastTrimStamp = v_uint16()
|
|
self.PageFaultCount = v_uint32()
|
|
self.RepurposeCount = v_uint32()
|
|
- self.Spare = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Spare = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.Flags = MMSUPPORT_FLAGS()
|
|
|
|
|
|
@@ -4489,15 +4489,15 @@ def __init__(self):
|
|
self.CountOfOwnedCriticalSections = v_uint32()
|
|
self.CsrClientThread = v_ptr32()
|
|
self.Win32ThreadInfo = v_ptr32()
|
|
- self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
- self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.User32Reserved = v_bytes(size=104) # FIXME Unknown Array Type
|
|
+ self.UserReserved = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.WOW32Reserved = v_ptr32()
|
|
self.CurrentLocale = v_uint32()
|
|
self.FpSoftwareStatusRegister = v_uint32()
|
|
- self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
+ self.SystemReserved1 = v_bytes(size=216) # FIXME Unknown Array Type
|
|
self.ExceptionCode = v_uint32()
|
|
self.ActivationContextStackPointer = v_ptr32()
|
|
- self.SpareBytes = v_bytes(size=36) # FIXME Unknown Array Type
|
|
+ self.SpareBytes = v_bytes(size=36) # FIXME Unknown Array Type
|
|
self.TxFsContext = v_uint32()
|
|
self.GdiTebBatch = GDI_TEB_BATCH()
|
|
self.RealClientId = CLIENT_ID()
|
|
@@ -4505,9 +4505,9 @@ def __init__(self):
|
|
self.GdiClientPID = v_uint32()
|
|
self.GdiClientTID = v_uint32()
|
|
self.GdiThreadLocalInfo = v_ptr32()
|
|
- self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
- self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
- self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
+ self.Win32ClientInfo = v_bytes(size=248) # FIXME Unknown Array Type
|
|
+ self.glDispatchTable = v_bytes(size=932) # FIXME Unknown Array Type
|
|
+ self.glReserved1 = v_bytes(size=116) # FIXME Unknown Array Type
|
|
self.glReserved2 = v_ptr32()
|
|
self.glSectionInfo = v_ptr32()
|
|
self.glSection = v_ptr32()
|
|
@@ -4516,16 +4516,16 @@ def __init__(self):
|
|
self.glContext = v_ptr32()
|
|
self.LastStatusValue = v_uint32()
|
|
self.StaticUnicodeString = UNICODE_STRING()
|
|
- self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
+ self.StaticUnicodeBuffer = v_bytes(size=522) # FIXME Unknown Array Type
|
|
self._pad0e0c = v_bytes(size=2)
|
|
self.DeallocationStack = v_ptr32()
|
|
- self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
+ self.TlsSlots = v_bytes(size=256) # FIXME Unknown Array Type
|
|
self.TlsLinks = LIST_ENTRY()
|
|
self.Vdm = v_ptr32()
|
|
self.ReservedForNtRpc = v_ptr32()
|
|
- self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.DbgSsReserved = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.HardErrorMode = v_uint32()
|
|
- self.Instrumentation = v_bytes(size=36) # FIXME Unknown Array Type
|
|
+ self.Instrumentation = v_bytes(size=36) # FIXME Unknown Array Type
|
|
self.ActivityId = GUID()
|
|
self.SubProcessTag = v_ptr32()
|
|
self.EtwLocalData = v_ptr32()
|
|
@@ -4587,8 +4587,8 @@ def __init__(self):
|
|
self.MxCsr_Mask = v_uint32()
|
|
self.FloatRegisters = v_uint32()
|
|
self.XmmRegisters = v_uint32()
|
|
- self.Reserved4 = v_bytes(size=192) # FIXME Unknown Array Type
|
|
- self.StackControl = v_bytes(size=28) # FIXME Unknown Array Type
|
|
+ self.Reserved4 = v_bytes(size=192) # FIXME Unknown Array Type
|
|
+ self.StackControl = v_bytes(size=28) # FIXME Unknown Array Type
|
|
self.Cr0NpxState = v_uint32()
|
|
|
|
|
|
@@ -4596,7 +4596,7 @@ class PO_DIAG_STACK_RECORD(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.StackDepth = v_uint32()
|
|
- self.Stack = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.Stack = v_bytes(size=4) # FIXME Unknown Array Type
|
|
|
|
|
|
class IMAGE_DOS_HEADER(vstruct.VStruct):
|
|
@@ -4616,10 +4616,10 @@ def __init__(self):
|
|
self.e_cs = v_uint16()
|
|
self.e_lfarlc = v_uint16()
|
|
self.e_ovno = v_uint16()
|
|
- self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.e_res = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.e_oemid = v_uint16()
|
|
self.e_oeminfo = v_uint16()
|
|
- self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.e_res2 = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.e_lfanew = v_uint32()
|
|
|
|
|
|
@@ -4694,20 +4694,20 @@ def __init__(self):
|
|
self.CpuID = v_uint8()
|
|
self.CpuStep = v_uint16()
|
|
self.ProcessorState = KPROCESSOR_STATE()
|
|
- self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
- self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.KernelReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
+ self.HalReserved = v_bytes(size=64) # FIXME Unknown Array Type
|
|
self.CFlushSize = v_uint32()
|
|
self.CoresPerPhysicalProcessor = v_uint8()
|
|
self.LogicalProcessorsPerCore = v_uint8()
|
|
- self.PrcbPad0 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.PrcbPad0 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.MHz = v_uint32()
|
|
self.CpuVendor = v_uint8()
|
|
self.GroupIndex = v_uint8()
|
|
self.Group = v_uint16()
|
|
self.GroupSetMember = v_uint32()
|
|
self.Number = v_uint32()
|
|
- self.PrcbPad1 = v_bytes(size=72) # FIXME Unknown Array Type
|
|
- self.LockQueue = v_bytes(size=72) # FIXME Unknown Array Type
|
|
+ self.PrcbPad1 = v_bytes(size=72) # FIXME Unknown Array Type
|
|
+ self.LockQueue = v_bytes(size=72) # FIXME Unknown Array Type
|
|
self.NpxThread = v_ptr32()
|
|
self.InterruptCount = v_uint32()
|
|
self.KernelTime = v_uint32()
|
|
@@ -4719,12 +4719,12 @@ def __init__(self):
|
|
self.PageColor = v_uint32()
|
|
self.DebuggerSavedIRQL = v_uint8()
|
|
self.NodeColor = v_uint8()
|
|
- self.PrcbPad20 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.PrcbPad20 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.NodeShiftedColor = v_uint32()
|
|
self.ParentNode = v_ptr32()
|
|
self.SecondaryColorMask = v_uint32()
|
|
self.DpcTimeLimit = v_uint32()
|
|
- self.PrcbPad21 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PrcbPad21 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.CcFastReadNoWait = v_uint32()
|
|
self.CcFastReadWait = v_uint32()
|
|
self.CcFastReadNotPossible = v_uint32()
|
|
@@ -4768,23 +4768,23 @@ def __init__(self):
|
|
self.KeExceptionDispatchCount = v_uint32()
|
|
self.KeSystemCalls = v_uint32()
|
|
self.AvailableTime = v_uint32()
|
|
- self.PrcbPad22 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.PPLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.PPNPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
- self.PPPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PrcbPad22 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PPLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PPNPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PPPagedLookasideList = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.PacketBarrier = v_uint32()
|
|
self.ReverseStall = v_uint32()
|
|
self.IpiFrame = v_ptr32()
|
|
- self.PrcbPad3 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
- self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.PrcbPad3 = v_bytes(size=52) # FIXME Unknown Array Type
|
|
+ self.CurrentPacket = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.TargetSet = v_uint32()
|
|
self.WorkerRoutine = v_ptr32()
|
|
self.IpiFrozen = v_uint32()
|
|
- self.PrcbPad4 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
+ self.PrcbPad4 = v_bytes(size=40) # FIXME Unknown Array Type
|
|
self.RequestSummary = v_uint32()
|
|
self.SignalDone = v_ptr32()
|
|
- self.PrcbPad50 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
- self.DpcData = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.PrcbPad50 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.DpcData = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.DpcStack = v_ptr32()
|
|
self.MaximumDpcQueueDepth = v_uint32()
|
|
self.DpcRequestRate = v_uint32()
|
|
@@ -4800,7 +4800,7 @@ def __init__(self):
|
|
self.TimerHand = v_uint32()
|
|
self.LastTick = v_uint32()
|
|
self.MasterOffset = v_uint32()
|
|
- self.PrcbPad41 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.PrcbPad41 = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.PeriodicCount = v_uint32()
|
|
self.PeriodicBias = v_uint32()
|
|
self._pad1958 = v_bytes(size=4)
|
|
@@ -4810,13 +4810,13 @@ def __init__(self):
|
|
self.ClockKeepAlive = v_uint32()
|
|
self.ClockCheckSlot = v_uint8()
|
|
self.ClockPollCycle = v_uint8()
|
|
- self.PrcbPad6 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
+ self.PrcbPad6 = v_bytes(size=2) # FIXME Unknown Array Type
|
|
self.DpcWatchdogPeriod = v_uint32()
|
|
self.DpcWatchdogCount = v_uint32()
|
|
self.ThreadWatchdogPeriod = v_uint32()
|
|
self.ThreadWatchdogCount = v_uint32()
|
|
self.KeSpinLockOrdering = v_uint32()
|
|
- self.PrcbPad70 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.PrcbPad70 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
self.WaitListHead = LIST_ENTRY()
|
|
self.WaitLock = v_uint32()
|
|
self.ReadySummary = v_uint32()
|
|
@@ -4826,8 +4826,8 @@ def __init__(self):
|
|
self.CycleTime = v_uint64()
|
|
self.HighCycleTime = v_uint32()
|
|
self.PrcbPad71 = v_uint32()
|
|
- self.PrcbPad72 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
- self.DispatcherReadyListHead = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.PrcbPad72 = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.DispatcherReadyListHead = v_bytes(size=16) # FIXME Unknown Array Type
|
|
self.ChainedInterruptList = v_ptr32()
|
|
self.LookasideIrpFloat = v_uint32()
|
|
self.MmPageFaultCount = v_uint32()
|
|
@@ -4846,11 +4846,11 @@ def __init__(self):
|
|
self.CachedCommit = v_uint32()
|
|
self.CachedResidentAvailable = v_uint32()
|
|
self.HyperPte = v_ptr32()
|
|
- self.PrcbPad8 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
- self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
+ self.PrcbPad8 = v_bytes(size=4) # FIXME Unknown Array Type
|
|
+ self.VendorString = v_bytes(size=13) # FIXME Unknown Array Type
|
|
self.InitialApicId = v_uint8()
|
|
self.LogicalProcessorsPerPhysicalProcessor = v_uint8()
|
|
- self.PrcbPad9 = v_bytes(size=5) # FIXME Unknown Array Type
|
|
+ self.PrcbPad9 = v_bytes(size=5) # FIXME Unknown Array Type
|
|
self.FeatureBits = v_uint32()
|
|
self._pad3388 = v_bytes(size=4)
|
|
self.UpdateSignature = LARGE_INTEGER()
|
|
@@ -4869,9 +4869,9 @@ def __init__(self):
|
|
self.RateControl = v_ptr32()
|
|
self.Cache = v_ptr32()
|
|
self.CacheCount = v_uint32()
|
|
- self.CacheProcessorMask = v_bytes(size=20) # FIXME Unknown Array Type
|
|
+ self.CacheProcessorMask = v_bytes(size=20) # FIXME Unknown Array Type
|
|
self.PackageProcessorSet = KAFFINITY_EX()
|
|
- self.PrcbPad91 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.PrcbPad91 = v_bytes(size=56) # FIXME Unknown Array Type
|
|
self.CoreProcessorSet = v_uint32()
|
|
self.TimerExpirationDpc = KDPC()
|
|
self.SpinLockAcquireCount = v_uint32()
|
|
@@ -4945,7 +4945,7 @@ def __init__(self):
|
|
self.Count = v_uint16()
|
|
self.Size = v_uint16()
|
|
self.Reserved = v_uint32()
|
|
- self.Bitmap = v_bytes(size=16) # FIXME Unknown Array Type
|
|
+ self.Bitmap = v_bytes(size=16) # FIXME Unknown Array Type
|
|
|
|
|
|
class DEVICE_OBJECT(vstruct.VStruct):
|
|
@@ -5046,7 +5046,7 @@ def __init__(self):
|
|
self.NodePad0 = v_uint8()
|
|
self.Seed = v_uint32()
|
|
self.MmShiftedColor = v_uint32()
|
|
- self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
+ self.FreeCount = v_bytes(size=8) # FIXME Unknown Array Type
|
|
self.CachedKernelStacks = CACHED_KSTACK_LIST()
|
|
self.ParkLock = v_uint32()
|
|
self.NodePad1 = v_uint32()
|
|
@@ -5066,7 +5066,7 @@ class XSAVE_AREA_HEADER(vstruct.VStruct):
|
|
def __init__(self):
|
|
vstruct.VStruct.__init__(self)
|
|
self.Mask = v_uint64()
|
|
- self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=56) # FIXME Unknown Array Type
|
|
|
|
|
|
class PSP_CPU_SHARE_CAPTURED_WEIGHT_DATA(vstruct.VStruct):
|
|
@@ -5124,7 +5124,7 @@ def __init__(self):
|
|
self.InterfaceType = v_uint32()
|
|
self.BusNumber = v_uint32()
|
|
self.SlotNumber = v_uint32()
|
|
- self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
+ self.Reserved = v_bytes(size=12) # FIXME Unknown Array Type
|
|
self.AlternativeLists = v_uint32()
|
|
self.List = v_uint32()
|
|
|
|
diff --git a/vstruct/primitives.py b/vstruct/primitives.py
|
|
index 09718de..3751c16 100644
|
|
--- a/vstruct/primitives.py
|
|
+++ b/vstruct/primitives.py
|
|
@@ -10,6 +10,7 @@
|
|
|
|
class v_enum: pass
|
|
|
|
+
|
|
class v_base(object):
|
|
def __init__(self):
|
|
self._vs_meta = {}
|
|
@@ -26,6 +27,7 @@ def vsGetFormat(self): return NotImplemented
|
|
def vsIsPrim(self): return NotImplemented
|
|
def vsGetTypeName(self): return NotImplemented
|
|
|
|
+
|
|
class v_prim(v_base):
|
|
|
|
def __init__(self):
|
|
@@ -191,40 +193,50 @@ def __coerce__(self, other):
|
|
def __hex__(self): return hex(long(self))
|
|
def __oct__(self): return oct(long(self))
|
|
|
|
+
|
|
class v_uint8(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "B"
|
|
|
|
+
|
|
class v_uint16(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "H"
|
|
|
|
+
|
|
class v_uint32(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "L"
|
|
|
|
+
|
|
class v_uint64(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "Q"
|
|
|
|
+
|
|
class v_int8(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "b"
|
|
|
|
+
|
|
class v_int16(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "h"
|
|
|
|
+
|
|
class v_int32(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "l"
|
|
|
|
+
|
|
class v_int64(v_number):
|
|
_vs_builder = True
|
|
_vs_fmt = "q"
|
|
|
|
+
|
|
pointersize = struct.calcsize("P")
|
|
|
|
+
|
|
class v_size_t(v_number):
|
|
_vs_builder = True
|
|
if pointersize == 4:
|
|
@@ -233,19 +245,23 @@ class v_size_t(v_number):
|
|
_vs_fmt = "Q"
|
|
|
|
def __repr__(self):
|
|
- return "0x%.8x" % self._vs_value
|
|
+ return "{:x}".format(self._vs_value[0:7])
|
|
+
|
|
|
|
class v_ptr(v_size_t):
|
|
pass
|
|
|
|
+
|
|
class v_ptr32(v_ptr):
|
|
_vs_builder = True
|
|
_vs_fmt = "L"
|
|
|
|
+
|
|
class v_ptr64(v_ptr):
|
|
_vs_builder = True
|
|
_vs_fmt = "Q"
|
|
|
|
+
|
|
class v_bytes(v_prim):
|
|
|
|
_vs_builder = True
|
|
@@ -263,6 +279,7 @@ def vsGetFormat(self):
|
|
def __repr__(self):
|
|
return self._vs_value.encode('hex')
|
|
|
|
+
|
|
class v_str(v_prim):
|
|
'''
|
|
A string placeholder class which will automagically return
|
|
@@ -291,6 +308,7 @@ def vsGetFormat(self):
|
|
def __len__(self):
|
|
return len(self._vs_value)
|
|
|
|
+
|
|
class v_wstr(v_str):
|
|
'''
|
|
Unicode variant of the above string class
|
|
@@ -357,5 +375,5 @@ def vsGetValue(self):
|
|
|
|
def __repr__(self):
|
|
base = "{%.8x-%.4x-%.4x-%.2x%.2x-%.2x%.2x%.2x%.2x%.2x%.2x}"
|
|
- return base % (self._guid_fields)
|
|
+ return base % (self._guid_fields)
|
|
|
|
|
|
From 24cc0dce41b7518207ff4102cd47d556abd24482 Mon Sep 17 00:00:00 2001
|
|
From: PlantDaddy <CqP5TZ77NYBf5uQt@protonmail.com>
|
|
Date: Mon, 13 Apr 2020 21:28:04 -0500
|
|
Subject: [PATCH 4/4] Switched the windows defs from using envi to platform to
|
|
get platform architecture in a crossplatform way, which will (hopefully) fix
|
|
the travis build failures for python 3.5
|
|
|
|
---
|
|
vstruct/defs/windows/__init__.py | 7 +++----
|
|
1 file changed, 3 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/vstruct/defs/windows/__init__.py b/vstruct/defs/windows/__init__.py
|
|
index a231feb..4eac982 100644
|
|
--- a/vstruct/defs/windows/__init__.py
|
|
+++ b/vstruct/defs/windows/__init__.py
|
|
@@ -1,8 +1,7 @@
|
|
-'''
|
|
+"""
|
|
The pre-made windows structure defs (extracted from pdb syms)
|
|
-'''
|
|
+"""
|
|
|
|
-import envi
|
|
import ctypes
|
|
import platform
|
|
|
|
@@ -21,7 +20,7 @@ def isSysWow64():
|
|
def getCurrentDef(normname):
|
|
bname, wver, stuff, whichkern = platform.win32_ver()
|
|
wvertup = wver.split('.')
|
|
- arch = envi.getCurrentArch()
|
|
+ arch = platform.architecture()[0]
|
|
if isSysWow64():
|
|
arch = 'wow64'
|
|
|