1

I'm trying to build an arcade machine that uses the Beaglebone Black GPIO switches for a Happs controller set. I built a python script that run at startup and assigns all of the GPIOs correctly to the corresponding key in Advmenu and Advmame. The script works great on the command line but I cannot get uinput to work inside Advmenu or Advmame. I've tried several changes to the udev rules without success. Currently it seems SDL1.2 is the installed SDL build but currently I'm in the process of building the latest SDL2.

udev file /etc/udev/rules.d/40-uinput.rules

SUBSYSTEM=="input", KERNEL=="uinput", MODE="0666", GROUP="uinput", ATTRS{name}=="arcade", ENV{ID_INPUT_KEYBOARD}="1"

Here is the program I've created and been working with

import Adafruit_BBIO.GPIO as GPIO
import uinput
import time

GPIO.setup("P9_11", GPIO.IN) #Player 1 Button 1
GPIO.setup("P9_13", GPIO.IN) #Player 1 Button 2
GPIO.setup("P9_15", GPIO.IN) #Player 1 Button 3
GPIO.setup("P9_17", GPIO.IN) #Player 1 Button 4
GPIO.setup("P9_21", GPIO.IN) #Player 1 Button 5
GPIO.setup("P9_23", GPIO.IN) #Player 1 Button 6

GPIO.setup("P9_12", GPIO.IN) #Player 2 Button 1
GPIO.setup("P9_14", GPIO.IN) #Player 2 Button 2
GPIO.setup("P9_16", GPIO.IN) #Player 2 Button 3
GPIO.setup("P9_18", GPIO.IN) #Player 2 Button 4
GPIO.setup("P9_22", GPIO.IN) #Player 2 Button 5
GPIO.setup("P9_24", GPIO.IN) #Player 2 Button 6

GPIO.setup("P9_25", GPIO.IN) #Select 1 Player
GPIO.setup("P9_26", GPIO.IN) #Select 2 Player
GPIO.setup("P9_27", GPIO.IN) # Coin

GPIO.setup("P8_7", GPIO.IN) #Player 1 Button Up
GPIO.setup("P8_9", GPIO.IN) #Player 1 Button Down
GPIO.setup("P8_11", GPIO.IN) #Player 1 Button Left
GPIO.setup("P8_13", GPIO.IN) #Player 1 Button Right

GPIO.setup("P8_8", GPIO.IN) #Player 2 Button Up
GPIO.setup("P8_10", GPIO.IN) #Player 2 Button Down
GPIO.setup("P8_12", GPIO.IN) #Player 2 Button Left
GPIO.setup("P8_14", GPIO.IN) #Player 2 Button Right

device = uinput.Device([
    uinput.KEY_LEFTCTRL, #Player 1 Button 1
    uinput.KEY_LEFTALT, #Player 1 Button 2
    uinput.KEY_SPACE, #Player 1 Button 3
    uinput.KEY_LEFTSHIFT, #Player 1 Button 4
    uinput.KEY_A, #Player 1 Button 5
    uinput.KEY_S, #Player 1 Button 6
    uinput.KEY_Q, #Player 2 Button 1
    uinput.KEY_W, #Player 2 Button 2
    uinput.KEY_I, #Player 2 Button 3
    uinput.KEY_J, #Player 2 Button 4
    uinput.KEY_K, #Player 2 Button 5
    uinput.KEY_L, #Player 2 Button 6
    uinput.KEY_1, #Select Player 1
    uinput.KEY_2, #Select Player 2
    uinput.KEY_5, #Coin
    uinput.KEY_UP, #Player 1 Button Up
    uinput.KEY_DOWN, #Player 1 Button Down
    uinput.KEY_LEFT, #Player 1 Button Left
    uinput.KEY_RIGHT, #Player 1 Button Right
    uinput.KEY_R, #Player 2 Button Up
    uinput.KEY_F, #Player 2 Button Down
    uinput.KEY_D, #Player 2 Button Left
    uinput.KEY_G #Player 2 Button Right
    ])

old_switch_state = 0
loop1 = 0
s = 0.02

while (loop1 == 0):

new_switch_state_P1_1 = GPIO.input("P9_11")
new_switch_state_P1_2 = GPIO.input("P9_13")
new_switch_state_P1_3 = GPIO.input("P9_15")
new_switch_state_P1_4 = GPIO.input("P9_17")
new_switch_state_P1_5 = GPIO.input("P9_21")
new_switch_state_P1_6 = GPIO.input("P9_23")
new_switch_state_P2_1 = GPIO.input("P9_12")
new_switch_state_P2_2 = GPIO.input("P9_14")
new_switch_state_P2_3 = GPIO.input("P9_16")
new_switch_state_P2_4 = GPIO.input("P9_18")
new_switch_state_P2_5 = GPIO.input("P9_22")
new_switch_state_P2_6 = GPIO.input("P9_24")

new_switch_state_S1 = GPIO.input("P9_25")
new_switch_state_S2 = GPIO.input("P9_26")
new_switch_state_C = GPIO.input("P9_27")

new_switch_state_P1_U = GPIO.input("P8_7")
new_switch_state_P1_D = GPIO.input("P8_9")
new_switch_state_P1_L = GPIO.input("P8_11")
new_switch_state_P1_R = GPIO.input("P8_13")
new_switch_state_P2_U = GPIO.input("P8_8")
new_switch_state_P2_D = GPIO.input("P8_10")
new_switch_state_P2_L = GPIO.input("P8_12")
new_switch_state_P2_R = GPIO.input("P8_14")

if new_switch_state_P1_1 == 1 :
    device.emit_click(uinput.KEY_LEFTCTRL)

if new_switch_state_P1_2 == 1 :
    device.emit_click(uinput.KEY_LEFTALT)

if new_switch_state_P1_3 == 1 :
    device.emit_click(uinput.KEY_SPACE)

if new_switch_state_P1_4 == 1 :
    device.emit_click(uinput.KEY_LEFTSHIFT)

if new_switch_state_P1_5 == 1 :
    device.emit_click(uinput.KEY_Z)

if new_switch_state_P1_6 == 1 :
    device.emit_click(uinput.KEY_X)

if new_switch_state_P2_1 == 1 :
    device.emit_click(uinput.KEY_A)

if new_switch_state_P2_2 == 1 :
    device.emit_click(uinput.KEY_S)

if new_switch_state_P2_3 == 1 :
    device.emit_click(uinput.KEY_Q)

if new_switch_state_P2_4 == 1 :
    device.emit_click(uinput.KEY_W)

if new_switch_state_P2_5 == 1 :
    device.emit_click(uinput.KEY_K)

if new_switch_state_P2_6 == 1 :
    device.emit_click(uinput.KEY_L)

if new_switch_state_S1 == 1 :
    device.emit_click(uinput.KEY_M)

if new_switch_state_S2 == 1 :
    device.emit_click(uinput.KEY_N)

if new_switch_state_C == 1 :
    device.emit_click(uinput.KEY_O)

if new_switch_state_P1_U == 1 :
    device.emit_click(uinput.KEY_UP)

if new_switch_state_P1_D == 1 :
    device.emit_click(uinput.KEY_DOWN)

if new_switch_state_P1_L == 1 :
    device.emit_click(uinput.KEY_LEFT)

if new_switch_state_P1_R == 1 :
    device.emit_click(uinput.KEY_RIGHT)

if new_switch_state_P2_U == 1 :
    device.emit_click(uinput.KEY_R)

if new_switch_state_P2_D == 1 :
    device.emit_click(uinput.KEY_F)

if new_switch_state_P2_L == 1 :
    device.emit_click(uinput.KEY_D)

if new_switch_state_P2_R == 1 :
    device.emit_click(uinput.KEY_G)
time.sleep(s)

Any ideas why the virtual keyboard isn't working?

S.I.J
  • 979
  • 1
  • 10
  • 22
metroiss
  • 11
  • 4

0 Answers0