mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-27 04:13:53 -06:00

This patch implements a new chardev backend `hub` device, which aggregates input from multiple backend devices and forwards it to a single frontend device. Additionally, `hub` device takes the output from the frontend device and sends it back to all the connected backend devices. This allows for seamless interaction between different backend devices and a single frontend interface. The idea of the change is trivial: keep list of backend devices (up to 4), init them on demand and forward data buffer back and forth. The following is QEMU command line example: -chardev pty,path=/tmp/pty,id=pty0 \ -chardev vc,id=vc0 \ -chardev hub,id=hub0,chardevs.0=pty0,chardevs.1=vc0 \ -device virtconsole,chardev=hub0 \ -vnc 0.0.0.0:0 Which creates 2 backend devices: text virtual console (`vc0`) and a pseudo TTY (`pty0`) connected to the single virtio hvc console with the backend aggregator (`hub0`) help. `vc0` renders text to an image, which can be shared over the VNC protocol. `pty0` is a pseudo TTY backend which provides biderectional communication to the virtio hvc console. 'chardevs.N' list syntax is used for the sake of compatibility with the representation of JSON lists in 'key=val' pairs format of the util/keyval.c, despite the fact that modern QAPI way of parsing, namely qobject_input_visitor_new_str(), is not used. Choice of keeping QAPI list syntax may help to smoothly switch to modern parsing in the future. Signed-off-by: Roman Penyaev <r.peniaev@gmail.com> Reviewed-by: "Marc-André Lureau" <marcandre.lureau@redhat.com> Cc: qemu-devel@nongnu.org Message-ID: <20250123085327.965501-3-r.peniaev@gmail.com>
52 lines
991 B
Meson
52 lines
991 B
Meson
chardev_ss.add(files(
|
|
'char-fe.c',
|
|
'char-file.c',
|
|
'char-io.c',
|
|
'char-mux.c',
|
|
'char-hub.c',
|
|
'char-null.c',
|
|
'char-pipe.c',
|
|
'char-ringbuf.c',
|
|
'char-serial.c',
|
|
'char-socket.c',
|
|
'char-stdio.c',
|
|
'char-udp.c',
|
|
'char.c',
|
|
))
|
|
if host_os == 'windows'
|
|
chardev_ss.add(files(
|
|
'char-console.c',
|
|
'char-win-stdio.c',
|
|
'char-win.c',
|
|
))
|
|
else
|
|
chardev_ss.add(files(
|
|
'char-fd.c',
|
|
'char-parallel.c',
|
|
'char-pty.c',
|
|
), util)
|
|
endif
|
|
|
|
chardev_ss = chardev_ss.apply({})
|
|
|
|
system_ss.add(files(
|
|
'char-hmp-cmds.c',
|
|
'msmouse.c',
|
|
'wctablet.c',
|
|
'testdev.c'))
|
|
|
|
chardev_modules = {}
|
|
|
|
if brlapi.found()
|
|
module_ss = ss.source_set()
|
|
module_ss.add(when: [brlapi], if_true: [files('baum.c'), pixman])
|
|
chardev_modules += { 'baum': module_ss }
|
|
endif
|
|
|
|
if spice.found()
|
|
module_ss = ss.source_set()
|
|
module_ss.add(when: [spice], if_true: files('spice.c'))
|
|
chardev_modules += { 'spice': module_ss }
|
|
endif
|
|
|
|
modules += { 'chardev': chardev_modules }
|