예제 #1
0
파일: _usb.py 프로젝트: djacobow/ircdemo
 def discover(self):
     ret = []
     ctx = USBContext()
     try:
         for device in ctx.getDeviceList():
             vid = device.getVendorID()
             if vid == 1240 or vid == 1155 or vid == 10842:
                 ret.append((str(device), ))
     finally:
         ctx.exit()
     return ret
예제 #2
0
    def __init__(self, name):
        super().__init__(name)

        self.libraries_available = KEEPKEYLIB
        if KEEPKEYLIB:
            try:
                self.usb_context = USBContext()
                self.usb_context.open()
            except Exception:
                self.libraries_available = False

        self.main_thread = threading.current_thread()
예제 #3
0
 def __init__(self, pid):
     # TODO: do it right
     self._context = USBContext()
     self._handle = self._context.openByVendorIDAndProductID(
         Device.USB_VID, pid, skip_on_error=True)
     if self._handle is None:
         raise MemplugException(
             "USB device not found; check lsusb and/or the top board type")
     self._iface = self._handle.claimInterface(0)
     self._handle.setConfiguration(1)
     # 500ms timeouts by default
     self.cmd_timeout = 500
     self.data_timeout = 500
예제 #4
0
파일: _usb.py 프로젝트: djacobow/ircdemo
    def __init__(self, devstr):
        self._dev = None
        self._data_out = None
        self._data_in = None
        self._ctx = USBContext()
        for device in self._ctx.getDeviceList():
            if devstr == str(device):
                self._dev = device
                break

        if self._dev is None:
            raise RuntimeError('Failed to find %s', devstr)

        self._usb_handle = self._dev.open()
        for iface in self._dev.iterSettings():
            iface_num = iface.getNumber()
            if iface_num in (0, 1):
                if self._usb_handle.kernelDriverActive(iface_num):
                    self._usb_handle.detachKernelDriver(iface_num)
                self._usb_handle.claimInterface(iface_num)
                if iface_num == 1:
                    self._data_out = iface[1].getAddress()
                    self._data_in = iface[0].getAddress()

        if self._data_in is None or self._data_out is None:
            raise RuntimeError('Failed to find bulk transfer for %s', devstr)

        # config = self._dev.get_active_configuration()
        # self.control_iface = config[(0, 0)]
        # self.data_iface = config[(1, 0)]
        #
        # self.control_out = \
        #     usb.util.find_descriptor(
        #         self.control_iface, custom_match=lambda e: endpoint_direction(e.bEndpointAddress) == ENDPOINT_OUT)
        # self.control_in = \
        #     usb.util.find_descriptor(
        #         self.control_iface, custom_match=lambda e: endpoint_direction(e.bEndpointAddress) == ENDPOINT_IN)
        #
        # self.data_out = \
        #     usb.util.find_descriptor(
        #         self.data_iface, custom_match=lambda e: endpoint_direction(e.bEndpointAddress) == ENDPOINT_OUT)
        # self.data_in = \
        #     usb.util.find_descriptor(
        #         self.data_iface, custom_match=lambda e: endpoint_direction(e.bEndpointAddress) == ENDPOINT_IN)

        self._init(115200, 8, 0, 0)
예제 #5
0
    def __init__(self, name):
        super().__init__(name)
        try:
            from . import client
            import keepkeylib
            import keepkeylib.ckd_public
            from usb1 import USBContext
            self.client_class = client.KeepKeyClient
            self.ckd_public = keepkeylib.ckd_public
            self.types = keepkeylib.client.types
            self.DEVICE_IDS = (KEEPKEY_PRODUCT_KEY,)
            self.usb_context = USBContext()
            self.usb_context.open()
            self.libraries_available = True
        except ImportError:
            self.libraries_available = False

        self.logger = logs.get_logger("plugin.keepkey")

        self.main_thread = threading.current_thread()
예제 #6
0
    def __init__(self, parent, config, name):
        HW_PluginBase.__init__(self, parent, config, name)

        try:
            from electroncash_plugins.keepkey import client
            import keepkeylib
            import keepkeylib.ckd_public
            import keepkeylib.transport_hid
            import keepkeylib.transport_webusb
            from usb1 import USBContext
            self.client_class = client.KeepKeyClient
            self.ckd_public = keepkeylib.ckd_public
            self.types = keepkeylib.client.types
            self.DEVICE_IDS = (keepkeylib.transport_hid.DEVICE_IDS +
                               keepkeylib.transport_webusb.DEVICE_IDS)
            self.device_manager().register_devices(self.DEVICE_IDS)
            self.device_manager().register_enumerate_func(self.enumerate)
            self.usb_context = USBContext()
            self.usb_context.open()
            self.libraries_available = True
        except ImportError:
            self.libraries_available = False
예제 #7
0
def main(ctx):
    opt = ctx.opt

    with USBContext() as context:
        found = list(find_device(context, opt.vid, opt.pid))

        if len(found) - 1 < opt.nth:
            raise Exception("No USB device found")

        # ux == USB Device/Configuration/Interface/Setting/Endpoint
        ud = found[opt.nth]
        uc = ud[0]
        ui = uc[0]
        us = ui[0]
        ue = us[0]

        with CyUSB(ud, CY_TYPE.MFG, index=opt.scb) as dev:
            #embed()
            ctx.dev = dev
            cmd = opt.args[0]
            if cmd == "save": do_save(ctx, *opt.args[1:])
            if cmd == "load": do_load(ctx, *opt.args[1:])
            if cmd == "mode": do_mode(ctx, *opt.args[1:])