#!/usr/bin/python3 ## ## This file is part of the sigrok-util project. ## ## Copyright (C) 2015 Tilman Sauerbeck ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, see . ## import sys def reverse_bits8(x): ''' Reverses the bits in the given byte. ''' x = (x & 0x55) << 1 | (x & 0xaa) >> 1 x = (x & 0x33) << 2 | (x & 0xcc) >> 2 x = (x & 0x0f) << 4 | (x & 0xf0) >> 4 return x def main(): with open(sys.argv[1], 'rb') as f: data = f.read() ident = 'FPGA_BINS' firmware_offset = data.index(ident.encode(encoding = 'UTF-16-LE')) firmware_offset += len(ident) * 2 bitstream_size = 464196 blobs = [ ('lecroy-logicstudio16-16.bitstream', 0), ('lecroy-logicstudio16-8.bitstream', bitstream_size) ] for (blob_name, blob_offset) in blobs: out_bytes = bytearray() for u in range(blob_offset, blob_offset + bitstream_size): inb = data[firmware_offset + u] outb = reverse_bits8(inb) out_bytes.append(outb) with open(blob_name, 'wb') as f: f.write(out_bytes) print('Wrote {}'.format(blob_name)) main()