def create_controller_thread(index, controller_options, dynamic=False): controller = DS4Controller(index, controller_options, dynamic=dynamic) thread = Thread(target=controller.run) thread.controller = controller thread.start() return thread
def main(): options = load_options() if options.hidraw: backend = HidrawBackend(Daemon.logger) else: backend = BluetoothBackend(Daemon.logger) try: backend.setup() except BackendError as err: Daemon.exit(err) if options.daemon: Daemon.fork(options.daemon_log, options.daemon_pid) controllers = [] threads = [] for index, options in enumerate(options.controllers): controller = DS4Controller(index + 1, options) controllers.append(controller) for device in backend.devices: for thread in threads: # Reclaim the joystick device if the controller is gone if not thread.is_alive(): if not thread.controller.dynamic: controllers.insert(0, thread.controller) threads.remove(thread) # No pre-configured controller available, # create one with default settings if not controllers: index = len(threads) + 1 options = ControllerAction.default_controller() controller = DS4Controller(index, options, dynamic=True) else: controller = controllers.pop(0) controller.logger.info("Connected to {0}", device.name) thread = Thread(target=controller.read_device, args=(device,)) thread.daemon = True thread.controller = controller thread.start() threads.append(thread)
def main(): options = parser.parse_args(sys.argv[1:] + ["--next-controller"]) bluetooth_check() if options.daemon: Daemon.fork(options.daemon_log, options.daemon_pid) controllers = [] threads = [] for index, options in enumerate(options.controllers): controller = create_controller(index + 1, options) controllers.append(controller) for device in find_devices(): for thread in threads: # Reclaim the joystick device if the controller is gone if not thread.is_alive(): if not thread.controller.dynamic: controllers.insert(0, thread.controller) threads.remove(thread) # No pre-configured controller available, # create one with default settings if not controllers: index = len(threads) + 1 options = ControllerAction.default_controller() controller = create_controller(index, options, dynamic=True) else: controller = controllers.pop(0) Daemon.info("Connected to {0}", device.bdaddr, subprefix=CONTROLLER_LOG.format(controller.id)) thread = Thread(target=read_device, args=(device, controller)) thread.daemon = True thread.controller = controller thread.start() threads.append(thread)
def main(): try: options = load_options() except ValueError as err: Daemon.exit("Failed to parse options: {0}", err) if options.hidraw: backend = HidrawBackend(Daemon.logger) else: backend = BluetoothBackend(Daemon.logger) try: backend.setup() except BackendError as err: Daemon.exit(err) if options.daemon: Daemon.fork(options.daemon_log, options.daemon_pid) controllers = [] devices = {} threads = [] for index, controller_options in enumerate(options.controllers): controller = DS4Controller(index + 1, controller_options) controllers.append(controller) for device in backend.devices: for thread in threads: # Reclaim the joystick device if the controller is gone if not thread.is_alive(): if not thread.controller.dynamic: controllers.insert(0, thread.controller) threads.remove(thread) if thread.controller.device: devices.pop(thread.controller.device.device_addr, None) if device.device_addr in devices: backend.logger.warning("Ignoring already connected device: {0}", device.device_addr) continue # No pre-configured controller available, # create one with default settings if not controllers: index = len(threads) + 1 controller_options = ControllerAction.default_controller() controller_options.parent = options controller = DS4Controller(index, controller_options, dynamic=True) else: controller = controllers.pop(0) controller.logger.info("Connected to {0}", device.name) thread = Thread(target=controller.read_device, args=(device,)) thread.daemon = True thread.controller = controller thread.start() threads.append(thread) devices[device.device_addr] = device