@@ -82,38 +82,80 @@ function Device:has_event_pending()
8282 return evdev .libevdev_has_event_pending (self .dev ) == 1
8383end
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 ))
8894end
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 ))
93105end
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 ))
98116end
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 )
103127end
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 )
108138end
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 )
113149end
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 )
118160end
119161
@@ -154,45 +196,92 @@ function Device:has_event_code(ev_type, ev_code)
154196end
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 )
160208end
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 )
166220end
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 )
172232end
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 )
178244end
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 )
184256end
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 )
190269end
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 )
197286end
198287
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 )
216315end
217316
0 commit comments