diff --git a/net-wireless/rfcat/Manifest b/net-wireless/rfcat/Manifest index 1bf83ee28..08ebc9f65 100644 --- a/net-wireless/rfcat/Manifest +++ b/net-wireless/rfcat/Manifest @@ -1,13 +1,12 @@ DIST RfCatChronosCCBootloader-1.9.1.hex 51392 BLAKE2B 97f3769fa4960ddd9433536f699f3910909b859173a43c6354b479cfffeaef4105a0fe75ac5e493e313bbd3bab14b07cd917518e88acf9c253fd2a4f994a701e SHA512 6f909572ef6881bd054b379ca8a684fb77b54eaa7dee1ce7b840beaed81d414cf5bb70491f5c9b21252cf160d65429fb5741e5379e7864d5325e9f0f9b8d9247 DIST RfCatChronosCCBootloader-1.9.2.hex 51392 BLAKE2B 97f3769fa4960ddd9433536f699f3910909b859173a43c6354b479cfffeaef4105a0fe75ac5e493e313bbd3bab14b07cd917518e88acf9c253fd2a4f994a701e SHA512 6f909572ef6881bd054b379ca8a684fb77b54eaa7dee1ce7b840beaed81d414cf5bb70491f5c9b21252cf160d65429fb5741e5379e7864d5325e9f0f9b8d9247 -DIST RfCatChronosCCBootloader-170313.hex 49806 BLAKE2B 5a742393b1236b77c5a5391a1d7d102a649ad7898a4841b8c3e61129d5f27662db5f63468272c66c7eac7a881bff535ba100294a112a0a0c9351be43cd4cfab2 SHA512 3319de119c76d1373251cea98d847d210082edfce6ec116da1e06e4e48ae9a6780bff7bdd2d231667bebc4cfefe770cccb86db14aba45df27e040cc48e23ce35 +DIST RfCatChronosCCBootloader-1.9.3.hex 51392 BLAKE2B 97f3769fa4960ddd9433536f699f3910909b859173a43c6354b479cfffeaef4105a0fe75ac5e493e313bbd3bab14b07cd917518e88acf9c253fd2a4f994a701e SHA512 6f909572ef6881bd054b379ca8a684fb77b54eaa7dee1ce7b840beaed81d414cf5bb70491f5c9b21252cf160d65429fb5741e5379e7864d5325e9f0f9b8d9247 DIST RfCatDonsCCBootloader-1.9.1.hex 51578 BLAKE2B 113af912fc92a1bab9e0f3b7b38b2b27a46b2cfd2b24f086e3d05cac9698451627dedae0368c9c29c86dc347a4db9d4c6f838195b30dcca44ded30c496702e81 SHA512 064f73ff292a8e92c48b21b8ef8adfb046c880eaf690e9dd3500c6a311506a651b5955c0303d774ca48a87c871caab0e928c8aa6d4879ce129870ec51d05b0d1 DIST RfCatDonsCCBootloader-1.9.2.hex 51578 BLAKE2B 113af912fc92a1bab9e0f3b7b38b2b27a46b2cfd2b24f086e3d05cac9698451627dedae0368c9c29c86dc347a4db9d4c6f838195b30dcca44ded30c496702e81 SHA512 064f73ff292a8e92c48b21b8ef8adfb046c880eaf690e9dd3500c6a311506a651b5955c0303d774ca48a87c871caab0e928c8aa6d4879ce129870ec51d05b0d1 -DIST RfCatDonsCCBootloader-170313.hex 49664 BLAKE2B 9936f4a5b1262f4abb5e8d38205af909d2640170b24499f9f3e9f6320501fa4f1e438d859dde59b1b8425dfaad8743fed0a0e1fd2b66fbcff9e22b97362f65b9 SHA512 c3fe9a14135a24a44d8c9d193278850a1ba41085f4225397fe21f47e9a874bf1cdaec080acb57d3b086ce05132711df8e6e4cb63b7eacf7d2c24fcafe4dff1f2 +DIST RfCatDonsCCBootloader-1.9.3.hex 51578 BLAKE2B 113af912fc92a1bab9e0f3b7b38b2b27a46b2cfd2b24f086e3d05cac9698451627dedae0368c9c29c86dc347a4db9d4c6f838195b30dcca44ded30c496702e81 SHA512 064f73ff292a8e92c48b21b8ef8adfb046c880eaf690e9dd3500c6a311506a651b5955c0303d774ca48a87c871caab0e928c8aa6d4879ce129870ec51d05b0d1 DIST RfCatYS1CCBootloader-1.9.1.hex 51796 BLAKE2B 62cc3fd042ce540baf69d1b68b5fec216e0a99da43dabe416bdbb156d7be1311744d84d2b9922b9fab0f92ecd5a8c002d4bea10cc41ea6aca6cf89b46c4bee54 SHA512 b5f9286d66ff52edf27a8319de5e464ec542161ac7a7efe1340c209918489a8b9bc9f4b2041b76e0b66fa39dc98b5447d0488d8163d3f256030ceb536b071f1b DIST RfCatYS1CCBootloader-1.9.2.hex 51796 BLAKE2B 62cc3fd042ce540baf69d1b68b5fec216e0a99da43dabe416bdbb156d7be1311744d84d2b9922b9fab0f92ecd5a8c002d4bea10cc41ea6aca6cf89b46c4bee54 SHA512 b5f9286d66ff52edf27a8319de5e464ec542161ac7a7efe1340c209918489a8b9bc9f4b2041b76e0b66fa39dc98b5447d0488d8163d3f256030ceb536b071f1b -DIST RfCatYS1CCBootloader-170313.hex 50208 BLAKE2B 9df19800d5c0c5a4b8c99f550c758c14d9e3d6dab1f3ed58f65b7577720989eec113f2f243d0d5686a7137398d833374da38faae6ed1ba95836bbebb3448a417 SHA512 6b51aed7ca3ae916137056df711c0f8f76de7f30dec48227da226a7c8814fdded5a1d544f746c74423f69289bae90276b425f7b44a7ad4af5dd96994efc385e2 -DIST immeSniff-170508.hex 38770 BLAKE2B fd34fee85ee6bf893234939cab9794c34f9302e37d86636116e544ca39e368ed8b6015ae2efa80c49ad56722b1fa573897e0b93ca4d5b2e6496c9f92c9c761d6 SHA512 3f06693fc893071adfb75e510da4d5c47752480896e449f893141b4db43dc7fb859dc25ab368d742ae612ebda085f199bcd8e18c9f5fa6f58c6b6204defc7b5f -DIST rfcat-0.0.20200313.tar.gz 336577 BLAKE2B 325f4ee1dfa118674367dca6d4c9dcccdfaeba50138370e5bde4242de7a94d75ecc93cc4707855502002ff896abeb903038ebdfe750155973194d97896c136da SHA512 f461a0bec576ac13f554fd13a558a09ffaf12e045ebef68e57ed4339afd1e13bcd713897a66ef744a7b3df3871ee762b6439fb100a96c04709e69b9ce1ff6676 +DIST RfCatYS1CCBootloader-1.9.3.hex 51796 BLAKE2B 62cc3fd042ce540baf69d1b68b5fec216e0a99da43dabe416bdbb156d7be1311744d84d2b9922b9fab0f92ecd5a8c002d4bea10cc41ea6aca6cf89b46c4bee54 SHA512 b5f9286d66ff52edf27a8319de5e464ec542161ac7a7efe1340c209918489a8b9bc9f4b2041b76e0b66fa39dc98b5447d0488d8163d3f256030ceb536b071f1b DIST rfcat-1.9.1.tar.gz 342750 BLAKE2B f2a77f234eeaf0da661102d261d10230eb8b1e0d33009d2375d2ca532934437b38d89bd3d6d3289a4d6e0d1b3d58de60f6105c91de9a729432395fd2145cc4d3 SHA512 236b59e65fdadace61281655e29053810bc60cba4d21d872615fb5ead0de5e37857645741dd3cd94aac8eb5f145fe7892b81e0de7c2584809c1e7d3df58ed527 DIST rfcat-1.9.2.tar.gz 342805 BLAKE2B 71b9cfe80cbabe3a197ab7807d642eadff281307b5763395f5e3607ed096c227bf2ca0b8c777b7914d84495ce8fe79e00437ee6743607d3ab78b854447c2160d SHA512 d46f74c9f269f28622ba6f875d21e0076b982f74d7ea945221f830d78eaa51a3ce76f396574e75a31b079766efb7ad389cbe4a6d4feeec5a848f98f9ccffe1b0 +DIST rfcat-1.9.3.tar.gz 342969 BLAKE2B 3a02ced4d003f5a0d5ffd8e048345c0bb75f3af2f10205d481b2559bce0cc09dd917df4cbbad66de2eff282ccbe4195b25fc879083079883f9b01aaa985ffe78 SHA512 453637f890ca9700388f6cfd44d7292f28acea1c35b834d3ba204c6d01b0f22e01dbb4c4988178c5a9aa029741f66f5c2b74283424263d5d5bf466f949b7ef20 diff --git a/net-wireless/rfcat/files/71.patch b/net-wireless/rfcat/files/71.patch deleted file mode 100644 index 4614e72f8..000000000 --- a/net-wireless/rfcat/files/71.patch +++ /dev/null @@ -1,9101 +0,0 @@ -From 638d7bac7b608b64d01e3d7879c1125eb60a7d22 Mon Sep 17 00:00:00 2001 -From: PlantDaddy -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 - - 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 , exitting..." -- exit (-2) -- except Exception,e: -+ print("Caught , 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 - 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("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])<> 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-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< 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<>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( "> (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<> 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(">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(" 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("', length) -+ logger.debug('<= fakeDoer.bulkRead(5, {:!r}) == ', length) - raise usb.USBError('Operation timed out (FakeDongle)') - - def log(self, msg, *args): - if len(args): - msg = msg % args - self.bulk5.put(struct.pack(' -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(" -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 -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' - diff --git a/net-wireless/rfcat/rfcat-0.0.20200313.ebuild b/net-wireless/rfcat/rfcat-1.9.3.ebuild similarity index 50% rename from net-wireless/rfcat/rfcat-0.0.20200313.ebuild rename to net-wireless/rfcat/rfcat-1.9.3.ebuild index f0d627131..6c45fdba5 100644 --- a/net-wireless/rfcat/rfcat-0.0.20200313.ebuild +++ b/net-wireless/rfcat/rfcat-1.9.3.ebuild @@ -3,42 +3,37 @@ EAPI=7 -PYTHON_COMPAT=( python3_{6,7} ) +HEX_PV=1.9.2 + +DISTUTILS_USE_SETUPTOOLS=bdepend +PYTHON_COMPAT=( python3_{6,7,8} ) + inherit distutils-r1 DESCRIPTION="The swiss army knife of subGHz" HOMEPAGE="https://github.com/atlas0fd00m/rfcat.git" -if [ "${PV}" = "9999" ]; then - EGIT_REPO_URI="https://github.com/atlas0fd00m/rfcat.git" - inherit git-r3 - KEYWORDS="" -else - DATE="170508" - FIRMWARE_DATE="170313" - COMMIT="a28b4699bfd25f4be849dfe012e0ed9ed11ecb3f" - SRC_URI="https://github.com/atlas0fd00m/rfcat/archive/${COMMIT}.tar.gz -> ${P}.tar.gz \ - https://bitbucket.org/atlas0fd00m/rfcat/downloads/immeSniff-${DATE}.hex \ - https://bitbucket.org/atlas0fd00m/rfcat/downloads/RfCatChronosCCBootloader-${FIRMWARE_DATE}.hex \ - https://bitbucket.org/atlas0fd00m/rfcat/downloads/RfCatDonsCCBootloader-${FIRMWARE_DATE}.hex \ - https://bitbucket.org/atlas0fd00m/rfcat/downloads/RfCatYS1CCBootloader-${FIRMWARE_DATE}.hex" - KEYWORDS="~amd64 ~x86" - S="${WORKDIR}/${PN}-${COMMIT}" -fi +SRC_URI="https://github.com/atlas0fd00m/rfcat/archive/v${PV}.tar.gz -> ${P}.tar.gz \ + https://github.com/atlas0fd00m/rfcat/releases/download/v${HEX_PV}/RfCatChronosCCBootloader.hex -> RfCatChronosCCBootloader-${PV}.hex \ + https://github.com/atlas0fd00m/rfcat/releases/download/v${HEX_PV}/RfCatDonsCCBootloader.hex -> RfCatDonsCCBootloader-${PV}.hex \ + https://github.com/atlas0fd00m/rfcat/releases/download/v${HEX_PV}/RfCatYS1CCBootloader.hex -> RfCatYS1CCBootloader-${PV}.hex" +KEYWORDS="~amd64 ~amd64 ~x86" LICENSE="BSD" SLOT="0" IUSE="gui" -#python3 -PATCHES=( "${FILESDIR}/71.patch" ) - DEPEND=">=dev-python/pyusb-1.0.0[${PYTHON_USEDEP}] virtual/libusb:1 gui? ( >=dev-python/pyside2-5.12.0[${PYTHON_USEDEP}] ) >=dev-python/future-0.17.1[${PYTHON_USEDEP}]" RDEPEND="${DEPEND}" +src_prepare() { + rm -r tests || die + distutils-r1_src_prepare +} + src_install() { distutils-r1_src_install