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()