2026-06-20 21:21:20 +03:00
|
|
|
#ifndef VMSIG_INPUT_H
|
|
|
|
|
#define VMSIG_INPUT_H
|
|
|
|
|
|
2026-06-22 17:25:06 +03:00
|
|
|
/* Private config of the input adapter (vmctl, in-tree at src/si/input/). cfg==NULL or
|
|
|
|
|
* stub!=0 => stub mode (ack without actuation). stub==0 opens vmctl_open() and actuates for
|
2026-06-24 16:31:23 +03:00
|
|
|
* real. Injection is ALWAYS uinput; the created evdev nodes are forwarded into the guest by an
|
|
|
|
|
* input-linux QMP object that the vmhost seam adds over its own connection (this adapter only
|
|
|
|
|
* publishes the evdev paths, it never touches QMP). qmp_path is kept for the SERVICE path
|
|
|
|
|
* (power/lifecycle via vmctl QMP), not for injection. */
|
2026-06-20 21:21:20 +03:00
|
|
|
typedef struct {
|
|
|
|
|
int stub;
|
2026-06-21 10:31:36 +03:00
|
|
|
const char* qmp_path; /* for power/lifecycle (vmctl QMP); NOT input injection */
|
2026-06-24 16:31:23 +03:00
|
|
|
/* On a real attach the adapter writes the uinput evdev node paths here (>=64 bytes each)
|
|
|
|
|
* so the vmhost seam can bridge them via input-linux. NULL => not published; B is "" when
|
|
|
|
|
* there is no second device. Buffers belong to the caller and outlive the adapter. */
|
|
|
|
|
char* out_evdev_a;
|
|
|
|
|
char* out_evdev_b;
|
2026-06-20 21:21:20 +03:00
|
|
|
} vmsig_input_cfg;
|
|
|
|
|
|
|
|
|
|
/* Input event codes/contract are PUBLIC: vmsig_input / vmsig_input_kind in
|
|
|
|
|
* include/vmsig_event.h (external control encodes them into inln). No private duplicate. */
|
|
|
|
|
|
|
|
|
|
#endif /* VMSIG_INPUT_H */
|