Skip to content

Commit b09c0e4

Browse files
committed
feat: support set value operations in evdev.device
1 parent 5b145a5 commit b09c0e4

File tree

2 files changed

+118
-19
lines changed

2 files changed

+118
-19
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ local function print_device(dev)
1717
print("= Name: ", name)
1818
print("= Phys: ", dev:phys())
1919
print("= Uniq: ", dev:uniq())
20-
print("= Product: ", dev:id_product())
21-
print("= Vendor: ", dev:id_vendor())
22-
print("= Bustype: ", dev:id_bustype())
23-
print("= Version: ", dev:id_version())
20+
print("= Product: ", dev:product_id())
21+
print("= Vendor: ", dev:vendor_id())
22+
print("= Bustype: ", dev:bustype())
23+
print("= Version: ", dev:version())
2424
print("============", "===")
2525
end
2626

evdev/device.lua

Lines changed: 114 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,38 +82,80 @@ function Device:has_event_pending()
8282
return evdev.libevdev_has_event_pending(self.dev) == 1
8383
end
8484

85+
---@param name? string
8586
---@return string
86-
function Device:name()
87+
function Device:name(name)
88+
if name then
89+
evdev.libevdev_set_name(self.dev, name)
90+
return name
91+
end
92+
8793
return util.to_string(evdev.libevdev_get_name(self.dev))
8894
end
8995

96+
---@param phys? string
9097
---@return string
91-
function Device:phys()
98+
function Device:phys(phys)
99+
if phys then
100+
evdev.libevdev_set_phys(self.dev, phys)
101+
return phys
102+
end
103+
92104
return util.to_string(evdev.libevdev_get_phys(self.dev))
93105
end
94106

107+
---@param uniq? string
95108
---@return string
96-
function Device:uniq()
109+
function Device:uniq(uniq)
110+
if uniq then
111+
evdev.libevdev_set_uniq(self.dev, uniq)
112+
return uniq
113+
end
114+
97115
return util.to_string(evdev.libevdev_get_uniq(self.dev))
98116
end
99117

118+
---@param product_id? number
100119
---@return number
101-
function Device:id_product()
120+
function Device:product_id(product_id)
121+
if product_id then
122+
evdev.libevdev_set_id_product(self.dev, product_id)
123+
return product_id
124+
end
125+
102126
return evdev.libevdev_get_id_product(self.dev)
103127
end
104128

129+
---@param vendor_id? number
105130
---@return number
106-
function Device:id_vendor()
131+
function Device:vendor_id(vendor_id)
132+
if vendor_id then
133+
evdev.libevdev_set_id_vendor(self.dev, vendor_id)
134+
return vendor_id
135+
end
136+
107137
return evdev.libevdev_get_id_vendor(self.dev)
108138
end
109139

140+
---@param bustype? number
110141
---@return number
111-
function Device:id_bustype()
142+
function Device:bustype(bustype)
143+
if bustype then
144+
evdev.libevdev_set_id_bustype(self.dev, bustype)
145+
return bustype
146+
end
147+
112148
return evdev.libevdev_get_id_bustype(self.dev)
113149
end
114150

151+
---@param version? number
115152
---@return number
116-
function Device:id_version()
153+
function Device:version(version)
154+
if version then
155+
evdev.libevdev_set_id_version(self.dev, version)
156+
return version
157+
end
158+
117159
return evdev.libevdev_get_id_version(self.dev)
118160
end
119161

@@ -154,45 +196,92 @@ function Device:has_event_code(ev_type, ev_code)
154196
end
155197

156198
---@param code number
199+
---@param value? number
157200
---@return number
158-
function Device:abs_minimum(code)
201+
function Device:abs_minimum(code, value)
202+
if value then
203+
evdev.libevdev_set_abs_minimum(self.dev, code, value)
204+
return value
205+
end
206+
159207
return evdev.libevdev_get_abs_minimum(self.dev, code)
160208
end
161209

162210
---@param code number
211+
---@param value? number
163212
---@return number
164-
function Device:abs_maximum(code)
213+
function Device:abs_maximum(code, value)
214+
if value then
215+
evdev.libevdev_set_abs_maximum(self.dev, code, value)
216+
return value
217+
end
218+
165219
return evdev.libevdev_get_abs_maximum(self.dev, code)
166220
end
167221

168222
---@param code number
223+
---@param value? number
169224
---@return number
170-
function Device:abs_fuzz(code)
225+
function Device:abs_fuzz(code, value)
226+
if value then
227+
evdev.libevdev_set_abs_fuzz(self.dev, code, value)
228+
return value
229+
end
230+
171231
return evdev.libevdev_get_abs_fuzz(self.dev, code)
172232
end
173233

174234
---@param code number
235+
---@param value? number
175236
---@return number
176-
function Device:abs_flat(code)
237+
function Device:abs_flat(code, value)
238+
if value then
239+
evdev.libevdev_set_abs_flat(self.dev, code, value)
240+
return value
241+
end
242+
177243
return evdev.libevdev_get_abs_flat(self.dev, code)
178244
end
179245

180246
---@param code number
247+
---@param value? number
181248
---@return number
182-
function Device:abs_resolution(code)
249+
function Device:abs_resolution(code, value)
250+
if value then
251+
evdev.libevdev_set_abs_resolution(self.dev, code, value)
252+
return value
253+
end
254+
183255
return evdev.libevdev_get_abs_resolution(self.dev, code)
184256
end
185257

186258
---@param code number
259+
---@param abs_info? evdev_input_absinfo
187260
---@return ffi.cdata*|evdev_input_absinfo
188-
function Device:abs_info(code)
261+
function Device:abs_info(code, abs_info)
262+
if abs_info then
263+
local value = input.ctype.input_absinfo(abs_info)
264+
evdev.libevdev_set_abs_info(self.dev, code, value)
265+
return value
266+
end
267+
189268
return evdev.libevdev_get_abs_info(self.dev, code)
190269
end
191270

192271
---@param ev_type number
193272
---@param code number
273+
---@param value? number
194274
---@return number
195-
function Device:event_value(ev_type, code)
275+
function Device:event_value(ev_type, code, value)
276+
if value then
277+
local rc = evdev.libevdev_set_event_value(self.dev, ev_type, code, value)
278+
if rc == 0 then
279+
return value
280+
end
281+
282+
return nil, string.format("Error: failed to set event(type:%d, code:%d) value(%d)", ev_type, code, value)
283+
end
284+
196285
return evdev.libevdev_get_event_value(self.dev, ev_type, code)
197286
end
198287

@@ -210,8 +299,18 @@ end
210299

211300
---@param slot number
212301
---@param code number
302+
---@param value? number
213303
---@return number
214-
function Device:slot_value(slot, code)
304+
function Device:slot_value(slot, code, value)
305+
if value then
306+
local rc = evdev.libevdev_set_slot_value(self.dev, slot, code, value)
307+
if rc == 0 then
308+
return value
309+
end
310+
311+
return nil, string.format("Error: failed to set slot(%d, code:%d) value(%d)", slot, code, value)
312+
end
313+
215314
return evdev.libevdev_get_slot_value(self.dev, slot, code)
216315
end
217316

0 commit comments

Comments
 (0)