inputor

Evdev remapping utility in lua
git clone https://git.neptards.moe/u3shit/inputor.git
Log | Files | Refs

fwd_nfshp2.lua (1163B)


      1 local fn = ...
      2 
      3 local input = require("lib.input")
      4 local uinput = require("lib.uinput")
      5 local poll = require("lib.helper.posix_io").poll_read
      6 
      7 local inp = input(fn)
      8 local ui = uinput()
      9 
     10 ui:copy_caps(inp)
     11 ui:setup{
     12   -- id=inp.device_id,
     13   -- some apps (like wine) doesn't like if you have multiple devices with the
     14   -- same id, in that case fake something here:
     15   id={bustype="BLUETOOTH", vendor=1, product=2},
     16   name="Virtual gamepad",
     17   ff_effects_max=inp.ff_count
     18 }
     19 
     20 -- Assumes DS4 limits
     21 ui:abs_setup("Z", {minimum=-255,maximum=255})
     22 ui:abs_setup("RZ", {minimum=-255,maximum=255})
     23 
     24 ui:create()
     25 print("created", ui.sysname)
     26 
     27 local kbd = uinput()
     28 kbd:add_keyboard_caps(true)
     29 kbd:setup{id={bustype="USB", vendor=1, product=2}, name="virtual kbd"}
     30 kbd:create()
     31 
     32 inp:grab() -- ! DANGER
     33 
     34 local to_poll = { inp, ui }
     35 local ui_ff = ui:gen_ff_forwarder(inp)
     36 
     37 while true do
     38   local rdy = poll(to_poll)
     39   if rdy[inp] then
     40     local rd = inp:read()
     41     if rd.type == "KEY" and rd.code == "BTN_MODE" then
     42       rd.code = "KEY_ESC"
     43       kbd:write(rd)
     44       kbd:write{type="SYN", code="REPORT"}
     45     else
     46       ui:write(rd)
     47     end
     48   end
     49 
     50   if rdy[ui] then ui_ff() end
     51 end