diff --git a/modules/theseven/ztex/driver.py b/modules/theseven/ztex/driver.py index 10226ef..923e6c6 100644 --- a/modules/theseven/ztex/driver.py +++ b/modules/theseven/ztex/driver.py @@ -45,6 +45,7 @@ def __init__(self, proxy, serial, takeover, firmware): self.takeover = takeover self.firmware = firmware self.handle = None + self.timeout = 1000 # ms, same value as used in ZTEX SDK permissionproblem = False deviceinuse = False for bus in usb.busses(): @@ -76,7 +77,7 @@ def __init__(self, proxy, serial, takeover, firmware): raise Exception("Can not open the specified device, possibly due to insufficient permissions") raise Exception("Can not open the specified device") - descriptor = array("B", self.handle.controlMsg(0xc0, 0x22, 40, 0, 0, 100)) + descriptor = array("B", self.handle.controlMsg(0xc0, 0x22, 40, timeout=self.timeout)) if len(descriptor) != 40: raise Exception("Bad ZTEX descriptor length: %d" % len(descriptor)) size, version, magic = struct.unpack("<2BI", descriptor[:6]) product = struct.unpack("4B", descriptor[6:10]) @@ -88,29 +89,47 @@ def __init__(self, proxy, serial, takeover, firmware): if version != 1: raise Exception("Bad ZTEX descriptor version: %d" % version) if magic != struct.unpack(" 5: raise Exception("Bad BTCMiner descriptor version: %d, firmware too new?" % version) + firmware_start = 11 if version > 4 else 10 + firmware_end = firmware_start + while descriptor[firmware_end] != 0 and firmware_end < len(descriptor): + firmware_end += 1 + firmware = ''.join([ chr(c) for c in descriptor[firmware_start:firmware_end] ]) self.num_nonces = numnonces + 1 self.nonce_offset = offset - 10000 self.base_frequency = basefreq * 10000 self.default_multiplier = min(defaultmultiplier, maxmultiplier) self.maximum_multiplier = maxmultiplier self.hashes_per_clock = hashesperclock / 128. + self.extra_solutions = extra if version > 4 else 0 self.firmware_name = firmware + + self.num_fpgas = 1 + if version > 4 and ifcaps[0] & 128: + try: + num_fpgas, sel_fpga, parallel_config = struct.unpack(" 1: + self.proxy.log("MPBM does not yet fully support multi-FPGA ZTEX boards. Your %s has %d FPGAs, only #%d will be used.\n" % (self.firmware_name, self.num_fpgas, sel_fpga), 400, "B") + defaultspeed = self.base_frequency * self.default_multiplier * self.hashes_per_clock / 1000000 maxspeed = self.base_frequency * self.maximum_multiplier * self.hashes_per_clock / 1000000 self.proxy.log("FPGA firmware: %s, default speed: %f MH/s, maximum speed: %f MH/s\n" % (self.firmware_name, defaultspeed, maxspeed), 400, "B") - unconfigured, checksum, bytestransferred, initb, result, bitswap = struct.unpack("= 0 and sig1 < sig2): raise Exception("Signature not found in bitstream, wrong bit order?") - self.handle.controlMsg(0x40, 0x31, b"", 0, 0, 100) + self.handle.controlMsg(0x40, 0x31, b"", timeout=self.timeout) if self.hs_supported: - ep, interface = struct.unpack("