11local ffi = require (" ffi" )
22
3+ local input = require (" evdev.linux.input" )
34local Event = require (" evdev.event" )
45local evdev = require (" evdev.libevdev" )
56local util = require (" evdev.util" )
@@ -8,6 +9,8 @@ local libevdev_grab_mode = evdev.enum.libevdev_grab_mode
89local libevdev_read_flag = evdev .enum .libevdev_read_flag
910local open_flag = util .enum .open_flag
1011
12+ local new_libevdev_ptr = ffi .typeof (" struct libevdev *[1]" )
13+
1114--- @class Device
1215--- @field fd number
1316--- @field pathname string
@@ -30,7 +33,7 @@ local function init(class, pathname, flags)
3033
3134 self .fd = fd
3235
33- local dev_ptr = ffi . new ( " struct libevdev *[1] " )
36+ local dev_ptr = new_libevdev_ptr ( )
3437
3538 local rc = evdev .libevdev_new_from_fd (fd , dev_ptr )
3639 if rc < 0 then
@@ -194,10 +197,10 @@ end
194197
195198--- @param ev_type number
196199--- @param code number
197- --- @param value_ptr ? ffi.cdata*
200+ --- @param value_ptr ? ffi.cdata* |{ [0] : number }
198201--- @return number | nil
199202function Device :fetch_event_value (ev_type , code , value_ptr )
200- value_ptr = value_ptr or ffi . new ( " int[1] " )
203+ value_ptr = value_ptr or input . new_int_ptr ( )
201204 local rc = evdev .libevdev_fetch_event_value (self .dev , ev_type , code , value_ptr )
202205 if rc ~= 0 then
203206 return value_ptr [0 ]
@@ -213,10 +216,10 @@ end
213216
214217--- @param slot number
215218--- @param code number
216- --- @param value_ptr ? ffi.cdata*
219+ --- @param value_ptr ? ffi.cdata* |{ [0] : number }
217220--- @return number | nil
218221function Device :fetch_slot_value (slot , code , value_ptr )
219- value_ptr = value_ptr or ffi . new ( " int[1] " )
222+ value_ptr = value_ptr or input . new_int_ptr ( )
220223 local rc = evdev .libevdev_fetch_slot_value (self .dev , slot , code , value_ptr )
221224 if rc ~= 0 then
222225 return value_ptr [0 ]
252255function Device :enable_event_code (ev_type , code , data )
253256 local data_type = type (data )
254257 if data_type == " number" then
255- data = ffi . new ( " int " , data )
258+ data = input . new_int ( data )
256259 elseif data_type == " table" then
257- data = ffi . new ( " struct input_absinfo " , data )
260+ data = input . new_input_absinfo ( data )
258261 end
259262
260263 return evdev .libevdev_enable_event_code (self .dev , ev_type , code , data )
0 commit comments