def mouse(self): while True: self.events = get_gamepad() self.pos = pg.position() self.mouseX = self.pos[0] self.mouseY = self.pos[1] for event in self.events: # print(self.events) # print(event.code) # print(event.state) if event.code == self.b3 and event.state == 1: self.clickmode = self.clickmode + 1 print("Current button:"), if self.clickmode > self.maxclickmode: self.clickmode = 0 self.mousebutton = 'left' print(self.mousebutton) elif self.clickmode == 1: self.mousebutton = 'middle' print(self.mousebutton) elif self.clickmode == 2: self.mousebutton = 'right' print(self.mousebutton) elif self.clickmode == 3: self.mousebutton = 'exit mousemode' print(self.mousebutton) elif event.code == self.b2 and event.state == 1: self.vert = not self.vert if self.vert == True: print('Mousemode: Vertical') elif self.vert == False: print('Mousemode: Horizontal') elif event.code == self.b1 and self.clickmode != 3: if event.state == 1: pg.mouseDown(x = self.mouseX, y = self.mouseY, button = self.mousebutton) elif event.state == 0: pg.mouseUp(x = self.mouseX, y = self.mouseY, button = self.mousebutton) elif event.code == self.b1 and self.clickmode == 3: MouseSim.exitmousemode(self) elif event.code == self.var1name: self.movementactive = True self.direction = event.state print(self.direction) if event.state == 0: self.movementactive = False while self.movementactive == True: self.pos = pg.position() self.mouseX = self.pos[0] self.mouseY = self.pos[1] self.events = get_gamepad() for event in self.events: if event.code == self.var1name and event.state == 0: self.movementactive = False else: pass if self.vert == True: pg.moveTo(self.mouseX, self.mouseY + self.direction*self.mousespeed/30) elif self.vert == False: pg.moveTo(self.mouseX + self.direction*self.mousespeed/30, self.mouseY) sleep(.01)
def test_get_gamepad(self, devices): """Get key reads from the first gamepad.""" gamepad = mock.MagicMock() reader = mock.MagicMock() gamepad.read = reader devices.gamepads = [gamepad] inputs.get_gamepad() reader.assert_called_once()
def main(): direction = 0 old_direction = 0 run = True counter = 0 closing = "Closing" while (run == True): events = get_gamepad() for event in events: if (event.ev_type == "Key"): if (event.code == "BTN_MODE"): if (event.state == 1): run = False if (event.code == "BTN_START"): if (event.state == 1): counter += 1 while (counter % 2 != 0): events = get_gamepad() for event in events: if (event.ev_type == "Key"): if (event.code == "BTN_MODE" and event.state == 1): run = False if (event.code == "BTN_START" and event.state == 1): counter += 1 if (event.code == "BTN_TR"): if (event.state == 1): direction = 2 else: direction = 0 if (event.code == "BTN_TL"): if (event.state == 1): direction = 1 else: direction = 0 elif (event.ev_type == "Absolute"): if (event.code == "ABS_HAT0X"): if (event.state == 1): direction = 3 elif (event.state == -1): direction = 4 else: direction = 0 else: if (event.state == -1): direction = 2 elif (event.state == 1): direction = 1 else: direction = 0 if (old_direction != direction): print("direction is:\t", direction) sending.main(direction) old_direction = direction sending.main(closing)
def resolution(): print('Checking resolution') while True: events = get_gamepad() for event in events: if event.code == "BTN_SOUTH" and event.state == 1: print(pyautogui.position())
def main(): """Just print out some event infomation when the gamepad is used.""" while 1: events = get_gamepad() for event in events: print("env_type: ", event.ev_type, "code: ", event.code, "state: ", event.state)
def control_gamepad(s): while True: events = get_gamepad() for event in events: action = gamepad_to_action(event) if action != None: send_action(s, action)
def main(): # x box one controller uses unsigned 10 bit number for triggers # uses 16 bit signed number for joystick axes # y is inverted, down is positive from input, it gets inverted immediately throttle = 0 x_vel = 0 y_vel = 0 with serial.Serial(SERIAL_PORT, BAUD_RATE) as ser: while (1): event = get_gamepad()[0] # all events that control flight are this type if event.ev_type == "Absolute": # this is left trigger, used for throttle if event.code == "ABS_RZ": throttle = event.state # control direction side to side if event.code == "ABS_X": x_vel = event.state # control direction forward and back if event.code == "ABS_Y": y_vel = -1 * event.state # message = str(event.ev_type) + "," + str(event.code) + \ # "," + str(event.state) + "\n\r" message = str(throttle) + "," + str(x_vel) + "," + str( y_vel) + "\n\r" ser.write(bytearray(message, "utf8"))
def main(controller): global gas_pub, dir_pub, verbose if controller == 'keyboard': os.system('xset r off') kpub = rospy.Publisher('dir_gas', String, queue_size=20) rospy.init_node('keyboard_pub', anonymous=True) if verbose: print('Please control the car with the keyboard arrows') root = Tk() app = Application(kpub, master=root) app.mainloop() root.destroy() elif controller == 'gamepad': gp_gas_pub = rospy.Publisher('gas', Float32, queue_size=20) gp_dir_pub = rospy.Publisher('dir', Float32, queue_size=20) gp_rev_pub = rospy.Publisher('rev', Bool, queue_size=3) rospy.init_node('gp_pub', anonymous=True) if verbose: print('Please control the car with the gamepad') quit = False while not quit: events = get_gamepad() for event in events: if event.ev_type == 'Absolute' and event.code == 'ABS_X': if abs(event.state) > 9000: gp_dir_pub.publish(event.state/32000.) else: gp_dir_pub.publish(0) if event.ev_type == 'Absolute' and event.code == 'ABS_Z': if abs(event.state) > 10: gp_gas_pub.publish(-1) if event.ev_type == 'Absolute' and event.code == 'ABS_RZ': if abs(event.state) > 5: gp_gas_pub.publish(event.state/255.) else: gp_gas_pub.publish(0) if event.code == 'BTN_MODE' and event.state == 1 : if verbose: print('Quitting, bye!') quit = True if event.code == 'BTN_WEST' and event.state == 1: if verbose: print('Switching direction') gp_rev_pub.publish(True) elif controller == 'autopilot': if verbose: print('Autopilot is ready') rospy.init_node('autopilot', anonymous=True) gas_pub = rospy.Publisher('gas', Float32, queue_size=20) dir_pub = rospy.Publisher('dir', Float32, queue_size=20) sub = rospy.Subscriber("/camera", CompressedImage, callback_autopilot, queue_size=1000) log_image = rospy.Subscriber('/camera', CompressedImage, callback_log, queue_size=1000) rospy.spin()
def monitor_gamepad(): while True: # Get the latest gamepad events event_list = get_gamepad() # Process the gamepad events gamepad.update_relevant(event_list)
def getinfo(): #Gets values from the gamepad every change of state events = get_gamepad() #Updates the events data set with the current state for event in events: #Operates on the most recent event, will not skip events stick = event.code #Gets the input type stickval = event.state #Gets the input value if stick == 'ABS_Y': #Y-axis joystick global analogvalueY #Sets appropriate global value from joystick analogvalueY = stickval elif stick == 'ABS_X': #X-axis joystick global analogvalueX #Sets appropriate global value from joystick analogvalueX = stickval elif stick == 'ABS_RZ': #Right Trigger global analogvalueTR analogvalueTR = stickval elif stick == 'BTN_SOUTH': #South Button global digitalvalueDECR #Decrement digitalvalueDECR = stickval elif stick == 'BTN_WEST': #West Button global digitalvalueLINEL #Black line command Left digitalvalueLINEL = stickval elif stick == 'BTN_EAST': #East Button global digitalvalueLINER digitalvalueLINER = stickval #Follow Black Line Right elif stick == 'BTN_NORTH': #North Button global digitalvalueINCR digitalvalueINCR = stickval #Increment
def run(self, running, startButton, leftJoystickX, leftJoystickY, rightJoystickX, rightJoystickY, R1Button, L1Button): running.value = True while (running.value): events = inputs.get_gamepad() for event in events: #print(event.ev_type, event.code, event.state) if event.ev_type == 'Absolute': if event.code == 'ABS_X': leftJoystickX.value = event.state / 32768.0 if event.code == 'ABS_Y': leftJoystickY.value = event.state / 32768.0 if event.code == 'ABS_RX': rightJoystickX.value = event.state / 32768.0 if event.code == 'ABS_RY': rightJoystickY.value = event.state / 32768.0 if (event.ev_type == 'Key'): if event.code == 'BTN_START': startButton.value = event.state print(event.state) elif event.code == 'BTN_TR': R1Button.value = event.state print(event.state) elif event.code == 'BTN_TL': L1Button.value = event.state print(event.state)
def controllerInput(): rotateRight = 0.0 rotateLeft = 0.0 global translate global tilt global rotate global updown while True: events = get_gamepad() for event in events: # print(event.ev_type, event.code, event.state) if event.code == "ABS_X": translate[1] = int(event.state / DPAD_SCALE) if event.code == "ABS_Y": translate[0] = int(event.state / DPAD_SCALE) if event.code == "ABS_RX": tilt[1] = int(event.state / DPAD_SCALE) if event.code == "ABS_RY": tilt[0] = int(event.state / DPAD_SCALE) if event.code == "ABS_Z": rotateLeft = event.state / TRIG_SCALE if event.code == "ABS_RZ": rotateRight = event.state / TRIG_SCALE if event.code == "ABS_HAT0Y": if event.state == -1: updown = 1 elif event.state == 1: updown = -1 else: updown = 0 rotate = int(rotateRight - rotateLeft)
def waitGamepad(keyList=[], maxWait=float('inf'), timeStamped=True, state='down'): """ Equivalent to psychopy.event.waitKeys(timeStamped=True) but for gamepads using the inputs module. maxWait: number of seconds to wait before returning None timeStamped: True, False or a core.Clock state: 'down' or 'release'. The state of the button. """ if timeStamped in (True, False): clock.reset() else: pass # Using the same clock while clock.getTime() < maxWait: presses = inputs.get_gamepad() for press in presses: if press.code in keyList: if (state == 'down' and press.state != 0) or (state == 'release' and press.state == 0): return press.code, clock.getTime() else: return '', ''
def controller_code_and_state(): # Check Inputs while True: events = get_gamepad() for event in events: print("[TibiaController] Code: ", event.code, " State: ", event.state)
def worker(): while 1: global speedY global speedZ events = get_gamepad() for event in events: if event.code == 'BTN_EAST': if event.state == 1: print("say") client.publish("admin/say", "Play;Добро пожаловать в зоопарк") if event.code == 'BTN_WEST': if event.state == 1: print("say") client.publish("admin/say", "Play;Вы можете приобрести билеты у меня") if event.code == 'BTN_SOUTH': if event.state == 1: print("say") client.publish("admin/say", "Play;Привет я ВэйБот.") if event.code == 'BTN_NORTH': if event.state == 1: print("say") client.publish( "admin/say", "Play;Я не кусаюсь. Разработчики не вложили в меня такой функции" ) return
def run(self): while not rospy.is_shutdown(): events = inputs.get_gamepad() for event in events: # print(event.ev_type, event.code, event.state) if event.code == 'ABS_Y': self.curr_y_input = event.state elif event.code == 'ABS_X': self.curr_x_input = event.state elif event.code == 'BTN_SOUTH': self.curr_btn_south = event.state elif event.code == 'BTN_EAST': self.curr_btn_east = event.state # Only detect "new" presses if self.curr_btn_south == 1 and self.prev_curr_btn_south == 0: # a button spawn_cmd = Bool(data = True) self.run_spawn_publisher.publish(spawn_cmd) if self.curr_btn_east == 1 and self.prev_curr_btn_east == 0: # b button save_cmd = Bool(data = True) self.save_publisher.publish(save_cmd) # 2D Drive # new_cmd = self.computeTwistCmd(self.curr_x_input, self.curr_y_input) # 1D Drive new_cmd = self.computeTwistCmd(0, self.curr_y_input) self.twist_pub.publish(new_cmd) # Update button states self.prev_curr_btn_south = self.curr_btn_south self.prev_curr_btn_east = self.curr_btn_east self.update_rate.sleep()
def update(self): try: kb_event = None for d in devices.gamepads: if d._device_path == self.comport: kb_event = d.read() if kb_event is None: kb_event = get_gamepad() for e in kb_event: val = False if e.state > 0: val = True if e.ev_type == 'Key': self.on_key_data({ 'type': 'button', 'name': e.code, 'val': val }) elif e.ev_type == 'Absolute': self.on_key_data({ 'type': 'stick', 'name': e.code, 'val': e.state }) except UnpluggedError as e: self.onerror(e) except UnknownEventCode as e: # print(e) self.buffer = {}
def CheckForChanges(self): # Remove Sync events, these don't seem to be useful, they are just duplicates of the Absolute or Key events prunedEvents = [] while prunedEvents == []: try: events = get_gamepad() except: print("Joystick Lost") break for event in events: if event.ev_type != "Sync": prunedEvents.append(event) # Update variables for event in prunedEvents: if (event.ev_type == "Absolute" or event.ev_type == "Key"): if (event.code == "ABS_X"): self.ABS_X = event.state elif (event.code == "ABS_Y"): self.ABS_Y = event.state elif (event.code == "ABS_RX"): self.ABS_RX = event.state elif (event.code == "ABS_RY"): self.ABS_RY = event.state elif (event.code == "BTN_NORTH"): self.BTN_NORTH = event.state elif (event.code == "BTN_SOUTH"): self.BTN_SOUTH = event.state elif (event.code == "BTN_EAST"): self.BTN_EAST = event.state elif (event.code == "BTN_WEST"): self.BTN_WEST = event.state elif (event.code == "ABS_HAT0X"): self.ABS_HAT0X = event.state elif (event.code == "ABS_HAT0Y"): self.ABS_HAT0Y = event.state elif (event.code == "BTN_SELECT"): self.BTN_SELECT = event.state elif (event.code == "BTN_START"): self.BTN_START = event.state elif (event.code == "ABS_RZ"): self.ABS_RZ = event.state elif (event.code == "ABS_Z"): self.ABS_Z = event.state elif (event.code == "BTN_TL"): self.BTN_TL = event.state elif (event.code == "BTN_TR"): self.BTN_TR = event.state elif (event.code == "BTN_THUMBR"): self.BTN_THUMBR = event.state elif (event.code == "BTN_THUMBL"): self.BTN_THUMBL = event.state return ([ self.ABS_X, self.ABS_Y, self.ABS_RX, self.ABS_RY, self.BTN_NORTH, self.BTN_SOUTH, self.BTN_EAST, self.BTN_WEST, self.ABS_HAT0X, self.ABS_HAT0Y, self.BTN_SELECT, self.BTN_START, self.ABS_RZ, self.ABS_Z, self.BTN_TL, self.BTN_TR, self.BTN_THUMBR, self.BTN_THUMBL ])
def main(): while 1: events = get_gamepad() for event in events: #print ("Code: " + event.code) if event.code == "ABS_X" and event.state > 127: #print ("right") keyboard.press_and_release('right') if event.code == "ABS_X" and event.state < 127: #print ("left") keyboard.press_and_release('left') if event.code == "ABS_Y" and event.state > 127: #print ("down") keyboard.press_and_release('down') if event.code == "ABS_Y" and event.state < 127: keyboard.press_and_release('up') #print ("up") #if event.code == "BTN_THUMB2" and event.state > 0: if "BTN" in event.code and event.state > 0: keyboard.press_and_release('enter') #print ("SNES B") exit()
def main(): c = 0 mute = False while 1: events = get_gamepad() for event in events: #print(event.code) if("ABS_HAT0Y" == event.code): if(-1 == event.state): print("Plus Volume") changeVolume(0.05) if(1 == event.state): print("Minus Volume") changeVolume(-0.05) if("ABS_HAT0X" == event.code): if(-1 == event.state): print("stop") if(1 == event.state): print("play") if("BTN_NORTH" == event.code): #print(c % 2) c += 1 if(c % 2 == 1): break print("mute: " + str(mute)) if(mute == True): changeVolume(-1) if(mute == False): changeVolume(0) print(str(mute is not mute) + "\n") mute = (mute == False)
def _listenController(self): events = get_gamepad() with self._lock: for event in events: for key, value in self._simpleButtons.items(): if (event.code == key): self._virtualController[value] = bool(event.state) for key, value in self._directionalButtons.items(): if (event.code == key): for i in range(len(value)): self._virtualController[value[i]] = ( False, False, True)[i + event.state] for key, value in self._analogValues.items(): if (event.code == key): if (value[1] != 2): self._virtualController[value[0]][value[1]] = map( event.state, self._lastMaximas[value[0]][("L", "D")[value[1]]], self._lastMaximas[value[0]][("R", "U")[value[1]]], self._newMaximas[value[0]][("L", "D")[value[1]]], self._newMaximas[value[0]][("R", "U")[value[1]]]) else: self._virtualController[value[0]] = map( event.state, self._lastMaximas[value[0]]["R"], self._lastMaximas[value[0]]["P"], self._newMaximas[value[0]]["R"], self._newMaximas[value[0]]["P"])
def TeleOp(): while 1: events = get_gamepad() for event in events: if event.code != 'ABS_X': pass #this may not be the 'correct' way to do this, but this makes the steering servo ignore any other inputs else: steeringvalue = event.state / 1.43 #for scaling the 0-255 axis range to a 0-180 degree scale steering.servo[0].angle = steeringvalue print(steeringvalue) if event.code != 'BTN_TRIGGER': pass else: fwdthrottlevalue = event.state * throttle_gain motor.motor3.throttle = fwdthrottlevalue print(fwdthrottlevalue) if event.code != 'BTN_SOUTH': pass else: revthrottlevalue = event.state * throttle_gain motor.motor3.throttle = -revthrottlevalue print(revthrottlevalue)
def main(): while 1: events = get_gamepad() for event in events: print(f"{event.ev_type}={event.code}={event.state}") if event.ev_type == "Absolute": if event.code == "ABS_Y": if event.state > 10000: signal(258) # forward elif event.state < -10000: signal(259) # reverse if event.code == "ABS_X": if event.state > 10000: signal(261) # turn right elif event.state < -10000: signal(260) # turn left if event.code == "ABS_RZ" and event.state == 255: signal(301) # rotate right hand clockwise if event.code == "ABS_Z" and event.state == 255: signal(303) # rotate left hand clockwise if event.ev_type == "Key": if event.code == "BTN_TR" and event.state == 1: signal(302) # rotate right hand anti clockwise if event.code == "BTN_TL" and event.state == 1: signal(304) # rotate left hand anti clockwise if event.code == "BTN_EAST" and event.state == 1: # Button B signal(32) # stop
def recordInputs(config): input_list = [] state_queue = {} toggled = False for e in controller_events: state_queue[e] = time.time() # Record inputs until toggle is pressed while not toggled: events = get_gamepad() for event in events: current_time = time.time() if event.code in controller_events: try: # Record how long an event lasted previous_event = state_queue[event.code] input_list.append({ "Event": event.code, "Start": previous_event[1], "End": current_time, "State": previous_event[0] }) state_queue[event.code] = [event.state, current_time] except Exception as e: # Used to initialize state_queue state_queue[event.code] = [event.state, current_time] elif event.code in config['Record'] and event.state == 0: toggled = True return cleanInputs(input_list)
def run(self): while True: events = get_gamepad() for event in events: # ignore all other events if event.code not in self._buttons: continue # update out internal controller state if event.code == "ABS_X": self.x = event.state / (2**15 - 1) elif event.code == "ABS_Y": self.y = event.state / (2**15 - 1) elif event.code == "BTN_TL": self.tl = event.state elif event.code == "BTN_TR": self.tr = event.state elif event.code == "ABS_Z": self.lz = event.state / (2**10 - 1) elif event.code == "ABS_RZ": self.rz = event.state / (2**10 - 1) elif event.code == "BTN_SOUTH": self.btn_a = event.state elif event.code == "BTN_NORTH": self.btn_x = event.state elif event.code == "BTN_WEST": self.btn_y = event.state elif event.code == "BTN_EAST": self.btn_b = event.state
def events_handling_loop(self): while 1: events = get_gamepad() for event in events: if event.code != INPUT_CODE: continue self.currentValue = position_to_percents(event.state)
def getXYZ(prev_coord, prev_gradient): """ Returns an integer x,y,z vector from the current controller inputs. Allows for continuous controller inputs, or simulates that at least. """ speed = 0.01 # Controls the speed the controller outputs change. null_zone = 0 # Controls the null margin for the controller. events = inputs.get_gamepad() gradient = prev_gradient for event in events: # print(event.ev_type, event.code, event.state) type = str(event.ev_type) code = str(event.code) state = int(event.state) if (type == "Absolute"): state = (state - 127.5) / 127.5 * speed if (abs(state) < null_zone): state = 0 if (code == "ABS_X"): gradient[0] = state elif (code == "ABS_Y"): gradient[1] = -state elif (code == "ABS_RZ"): gradient[2] = -state new_coord = [0, 0, 0] for i in range(3): new_coord[i] = prev_coord[i] + gradient[i] return new_coord, gradient
def gamepad_buttons(csv_writer, directory): done = True counter = 0 row = [['', 0, 0, 0, 0, 0, 0]] while done: events = 12 image = screenshot.grab(bbox=(0, 56, 1172, 898)) while events is not None and done: try: events = get_gamepad(False) except RuntimeError: events = None if events is not None: event = events[0] if event.code == 'BTN_TR': done = False if event.code == 'ABS_HAT0Y' or event.code == 'ABS_HAT0X' or event.code == 'BTN_SOUTH' or \ event.code == 'BTN_WEST' or 'BTN_TR': # UP if event.code == 'ABS_HAT0Y' and event.state == -1: row[0][1] = 1 elif event.code == 'ABS_HAT0Y' and event.state == 0: row[0][1] = 0 # DOWN if event.code == 'ABS_HAT0Y' and event.state == 1: row[0][2] = 1 elif event.code == 'ABS_HAT0Y' and event.state == 0: row[0][2] = 0 # LEFT if event.code == 'ABS_HAT0X' and event.state == -1: row[0][3] = 1 elif event.code == 'ABS_HAT0X' and event.state == 0: row[0][3] = 0 # RIGHT if event.code == 'ABS_HAT0X' and event.state == 1: row[0][4] = 1 elif event.code == 'ABS_HAT0X' and event.state == 0: row[0][4] = 0 # A if event.code == 'BTN_SOUTH' and event.state == 1: row[0][5] = 1 elif event.code == 'BTN_SOUTH' and event.state == 0: row[0][5] = 0 # B if event.code == 'BTN_WEST' and event.state == 1: row[0][6] = 1 elif event.code == 'BTN_WEST' and event.state == 0: row[0][6] = 0 image_directory = str(counter) + ".png" row[0][0] = image_directory image_directory = directory + "\\" + str(counter) + ".png" image.resize((586, 449)) image.save(image_directory) print(row) csv_writer.writerow(row) # print(row) counter += 1
def main(): reverse = False throttle = 0 steering = 0 while True: events = get_gamepad() for event in events: # event.ev_type, event.code, event.state # steering if event.code == 'ABS_Z': steering = clip([event.state], 0, 254)[0] # print(steering) # check reverse if event.code == 'BTN_PINKIE': reverse = event.state # print(reverse) # trottle if event.code == 'ABS_Y': throttle = convert_to_0_255(event.state) throttle = -throttle if reverse else throttle throttle = clip([throttle], 0, 254)[0] # print(throttle) message = Message(throttle=throttle, steering=steering, reverse=reverse) ss.send(msg=message)
def inputs(self): from inputs import get_gamepad, devices if 0 == len(devices.gamepads): logging.error('inputs found no gamepads. no driver available') return self.running = True while self.running: events = get_gamepad() for event in events: # stick actions # ABS_X = left x [0,128,255] left to right # ABS_Y = left y [0,128,255] up to down # ABS_Z = right x [0,128,255] left to right # ABS_RZ = right y [0,128,255] up to down # hat actions # ABS_HAT0X == cross x [-1,1] left, right # ABS_HAT0Y == cross y [-1,1] up, down # button actions # BTN_SOUTH == a # BTN_EAST == b # BTN_NORTH == x # BTN_WEST == y # BTN_TL == l1 [0,1] # BTN_TR == r1 # BTN_TL2 == l2b [0,1] # BTN_TR2 == r2b [0,1] # ABS_BRAKE == l2m [0,255] # ABS_GAS == r2m [0,255] # BTN_THUMBL == l3 [0,1] # BTN_THUMBR == r3 [0,1] # ABS_SELECT == select # ABS_START == start self.running = self.handler(event.code,event.state)
def run(self): while 1: events = get_gamepad() for event in events: self.update_pressed_buttons(event) try: sendthis = badname_thing[''.join(self.buttons_pressed)] self.send_to_mud(sendthis)
def gamepad_event_loop(): while True: events = inputs.get_gamepad() for event in events: if event.ev_type != "Sync": if event.code in event_interpretation: path = event_interpretation[event.code] gamepad_state_lock.acquire() if len(path) == 1: gamepad_state[path[0]] = event.state elif len(path) == 2: gamepad_state[path[0]][path[1]] = event.state else: # Weird HAT0X/Y for pad if event.state > 0: gamepad_state[path[0]][path[2]] = event.state elif event.state < 0: gamepad_state[path[0]][path[1]] = -event.state else: gamepad_state[path[0]][path[2]] = event.state gamepad_state[path[0]][path[1]] = -event.state gamepad_state_lock.release() else: print("Unknown event: ", event.code, event.state) print(gamepad_state)
def get_events(self, old_events): new_events = get_gamepad() absY = old_events[0] absX = old_events[1] absRY = old_events[2] absRX = old_events[3] absZ = old_events[4] absRZ = old_events[5] absHY = 0 absHX = 0 B_E = 0 B_W = 0 B_N = 0 B_S = 0 B_ST = 0 B_SEL = 0 B_TR = 0 B_TL = 0 B_THL = 0 B_THR = 0 B_MODE = 0 events = old_events for event in new_events: if event.ev_type != "Sync" : if event.code == "BTN_MODE" and event.state == 1: B_MODE = event.state elif event.code == "ABS_RY": if abs(event.state - absRY) > 500: absRY = event.state elif event.code == "ABS_Y": if abs(event.state - absY) > 500: absY = event.state elif event.code == "ABS_RX": if abs(event.state - absRX) > 500: absRX = event.state elif event.code == "ABS_X": if abs(event.state - absX) > 500: absX = event.state elif event.code == "ABS_HAT0Y": absHY = event.state elif event.code == "ABS_HAT0X": absHX = event.state elif event.code == "ABS_Z": absZ = float(event.state) elif event.code == "ABS_RZ": absRZ = float(event.state) elif event.code == "BTN_EAST": B_E = event.state elif event.code == "BTN_WEST": B_W = event.state elif event.code == "BTN_NORTH": B_N = event.state elif event.code == "BTN_SOUTH": B_S = event.state elif event.code == "BTN_START": B_ST = event.state elif event.code == "BTN_SELECT": B_SEL = event.state elif event.code == "BTN_TR": B_TR = event.state elif event.code == "BTN_TL": B_TL = event.state elif event.code == "BTN_THUMBL" and event.state == 1: B_THL = event.state self.quit_attempt = event.state elif event.code == "BTN_THUMBR": B_THR = event.state events = (absY, absX, absRY, absRX, absZ, absRZ, absHY, absHX, B_E, B_W, B_N, B_S, B_ST, B_SEL, B_TR, B_TL, B_THL, B_THR, B_MODE) return events
def main(): """Just print out some event infomation when the gamepad is used.""" while 1: events = get_gamepad() for event in events: print(event.ev_type, event.code, event.state)
from inputs import devices from inputs import get_gamepad import i3ipc i3 = i3ipc.Connection() while 1: events = get_gamepad() for event in events: if event.code == "BTN_TR" and event.state ==1: i3.command("workspace next") if event.code == "BTN_Z" and event.state ==1: i3.command("workspace prev") if event.code == "BTN_EAST" and event.state ==1: i3.command("fullscreen toggle") if event.code == "BTN_NORTH" and event.state ==1: i3.command("kill") if event.code == "ABS_HAT0X" and event.state == -1: i3.command("focus left") if event.code == "ABS_HAT0X" and event.state == 1: i3.command("focus right") if event.code == "ABS_HAT0Y" and event.state == -1: i3.command("focus up") if event.code == "ABS_HAT0Y" and event.state == 1: i3.command("focus down") else: print(event.code)