inputor

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

evinfo.lua (2449B)


      1 local fn = ...
      2 
      3 local input = require("lib.input")
      4 local enums = require("lib.ev_api.decls").enums
      5 require("lib.helper.string")
      6 
      7 local function pprint(key, func)
      8   if type(func) ~= "function" then
      9     local obj = func
     10     func = function() return obj[key] end
     11   end
     12   local succ, res = pcall(func)
     13   print(string.format("%-19s %s", key, res))
     14 end
     15 
     16 local inp = input(fn)
     17 pprint("driver_version", inp)
     18 pprint("device_id", inp)
     19 pprint("repeat", inp)
     20 --inp.rep = inp.rep
     21 pprint("keycode", function()
     22   local res = {}
     23   local kc = inp.keycode
     24   local _ = kc[0] -- fail early if not supported
     25   for i=0,1024 do
     26     if #res >= 16 then
     27       res[#res+1] = "..."
     28       break
     29     end
     30     pcall(function() res[#res+1] = string.format("%#0x => %s", i, kc[i]) end)
     31   end
     32   return "["..table.concat(res, ", ").."]"
     33 end)
     34 --inp.keycode[0] = 0
     35 
     36 -- TODO
     37 -- print("keycode_v2", inp:ioctl_get_keycode_v2())
     38 
     39 pprint("name", function() return inp.name:escape() end)
     40 pprint("phys", function() return inp.phys:escape() end)
     41 pprint("uniq", function() return inp.uniq:escape() end)
     42 pprint("prop", inp)
     43 pprint("mt_slot_count", inp)
     44 pprint("mt_slots", function()
     45   local res = {}
     46   for k,v in pairs(enums.ABS) do
     47     if type(k) == "string" and k:sub(1,3) == "MT_" then
     48       pcall(function()
     49           res[#res+1] = k.." => "..table.concat(inp:get_mt_slots(v), ":")
     50       end)
     51     end
     52   end
     53   return "["..table.concat(res, ", ").."]"
     54 end)
     55 for _,x in ipairs{"key", "led", "snd", "sw"} do
     56   pprint(x.."_state", inp)
     57 end
     58 for _,x in ipairs{"ev", "key", "rel", "abs", "msc", "led", "snd", "ff", "sw"} do
     59   pprint(x.."_bits", inp)
     60 end
     61 local abs_bits = inp.abs_bits
     62 for k,v in pairs(enums.ABS) do
     63   if type(k) == "number" and abs_bits[k] then
     64     pprint("absinfo "..v, function() return inp.absinfo[k] end)
     65   end
     66 end
     67 pprint("ff_count", inp)
     68 
     69 for _,x in ipairs{"ev", "key", "rel", "abs", "msc", "led", "snd", "ff", "sw"} do
     70   pprint(x.."_mask", inp)
     71 end
     72 
     73 -- danger zone
     74 -- inp:grab()
     75 -- inp.clockid = "MONOTONIC"
     76 -- inp:revoke()
     77 -- inp.ev_mask = inp.ev_mask:clear()
     78 
     79 for j=0,10 do
     80   print(inp:read())
     81 end
     82 
     83 -- local id = inp:add_ff{type="RUMBLE", id=-1, direction=49152,
     84 --                       rumble={strong_magnitude=24576, weak_magnitude=8192}}
     85 -- inp.ff_gain = 0x8000
     86 -- inp.ff_autocenter = 0xffff
     87 -- inp:play_ff(id)
     88 
     89 -- -- note: ffs are stopped on close, so wait a bit
     90 -- local ffi = require("ffi")
     91 -- ffi.cdef("unsigned int sleep(unsigned int);")
     92 -- ffi.C.sleep(1)
     93 
     94 inp:close()