[ANNOUNCE] libei 0.5
Peter Hutterer
peter.hutterer at who-t.net
Thu Apr 6 04:44:56 UTC 2023
libei 0.5 is now available. libei is a library to send Emulated Input (EI)
to a matching Emulated Input Server (EIS) which can receive those events
with libeis, also part of this project.
libei uses GitLab releases, for tarballs please see:
https://gitlab.freedesktop.org/libinput/libei/-/releases/0.5
Notable changes since 0.4.1:
- the previously protobuf-based ad-hoc protocol has changed to custom format
defined in the protocol.xml file. This protocol is heavily influenced by
the Wayland protocol but not binary compatible. The protocol is not yet
stable.
- new and prettier documentation, primarily aimed at the protocol. See
https://libinput.pages.freedesktop.org/libei/
- ei_get_version() has been removed, with the protocol having per-interface
versions this is no longer useful
- ei_device_start_emulating() now takes a sequence number
- Support for properties has been removed. The use-case for these was a bit
unclear anyway and the few things they could have been used for are
catered for by the portal.
- libreis has been removed. The use-case for this was a bit unclear and it
didn't provide anything the portals can't do.
This is a development snapshot and neither API nor ABI should be considered
stable. Anyone using libei or libeis must keep both in sync, there are no
accommodations made for libei/libeis from different versions and the wire
protocol may break at any time.
Please see the documentation here:
https://libinput.pages.freedesktop.org/libei/
The git shortlog is below:
Jonas Ådahl (4):
protocol: Make integer explicitly sized
demos: Print timestamp
protocol: Add support for 64 bit integers on the wire
protocol: Make timestamps a single 64 bit argument
Peter Hutterer (273):
meson.build: add override_dependencies for all our libraries
gitlab CI: drop the reference to the forced container rebuild
gitlab CI: drop the container clean stage
gitlab CI: compress the file inclusion a bit
gitlab CI: switch the ci-fairy job to the fdo ci-fairy image
gitlab CI: move default_artefacts to the default build template
gitlab CI: replace meson-build.sh with a more generic one
gitlab-ci: add one more explanatory comment
Format python files with black
util-time: fix the us2ms function
ei: re-order a few arguments to match the order in the protocol
Add a gitignore file for the subprojects directory
ei: fix a typo
test: fix a test case's behavior
eis: don't allow connecting a disconnected client
test: fix compiler warning about possible loss of precision
meson.build: switch the source file lists to use files()
meson.build: switch the src include dir to the proper meson way
meson.build: use proper include handling for the proto dir
brei: drop the explicit src in a #include statement
meson.build: move tests to test/meson.build
proto: drop the varint values, replace with fixed size ones
proto: drop the Packet message, replace with 4 byte prefix
Purge libreis from the repo
Purge the properties from the protocol
Add a sequence number to START_EMULATING
test: fix pytest loading liboeffis.so
tools: add a comment to the demo server
tools: cleanup our clients in the eis demo server
tools: whitespace fix in the demo server
util: add a object getter helper for fields as refs
util: add macros to declare getters and setters
util: undo accidental rename from source->is_active to is_sender
meson.build: alphabetical sort of the source files
Remove the public API to query the client version number
Add some extra getters for the context and the eis_client
ei: divide the headers up across multiple files
eis: divide the headers up across multiple files
eis: don't send stop_emulating for a sender device
test: drop a bunch of unused imports
CI: move the package list to the config.yml file
CI: the check-commit and check-merge-request should use the ci-fairy image
CI: use the ci-fairy image and a venv for the black job
CI: add a python linter job with Ruff
CI: fix typo in the package list
util: rename xvasprintf to xvaprintf
ei: implement ei_device_get_width/height
test: set the minimum bits for our test devices
eis: don't EINVAL if a coordinate is outside the region
util: add msleep()
tools: copy the default log handler to the eis demo server
libeis: make eis_client_get_context() part of the public API
eis: use eis_client_get_context instead of parent
util: add some mask helpers
util: mmap with MAP_PRIVATE instead of MAP_SHARED
ei: rename ei_set_connection to ei_set_socket
Add ei/eis getters for the device id
ei-device: use the setter declaration macros
util-io: add a few helper functions to iobuf
Drop protobuf in favour of a custom protocol
protocol: rename the ei core interface to ei_connection
protocol: add a sync request and the ei_callback interface
protocol: add a ei_connection_setup interface
eis: add a reason to the disconnect message
protocol: add an interface version announcement to the connection setup
Add the ei_callback interface versions
protocol: add a seat interface
eis: make sure our connection setup has the right version too
eis: update libeis-client to use the declare macros
protocol: check any incoming/outgoing messages for versions
protocol: move the seat bind to the seat object
brei: pass the proto object through to send_message
protocol: add the ei_device interface
protocol: move start/stop emulating into the device
protocol: move the frame event into the device interface
eis: switch to a goto out approach
protocol: move pointer/keyboard/touch into separate interfaces
protocol: move the keymap into the keyboard interface
protocol: make the connection setup the zero object with a proper handover
protocol: document the protocol better
ei: remove now-unused function
brei: remove some obsolete functions
scanner: add enum verification checks
protocol: require the "since" attribute for all messages
brei: add a brei context object
protocol: rename the touch capability to touchscreen
protocol: add the "bitmask" enum type and check for it
scanner: switch to a two-run parsing of the XML file
eis: destroy the eis_connection immediately after sending disconnect
scanner: add the camel_name property to our messages
eis: don't send seat events unless the client supports ei_seat
scanner: parse the type="destructor" attribute on requests/events
protocol: rename the interface request to interface_version
protocol: rename type to context_type
protocol: mark the disconnected event as destructor
protocol: mark the various destroyed events as destructors
protocol: complete documentation for the protocol XML file
scanner: pass the component through as well
scanner: make the invalid type message a bit easier to identify
protocol: add ei_connection.invalid_object
scanner: handle since tags in enum values
eis: only allow the available caps to bind to a seat
eis: drop the seat when the client requests it
protocol: fix a typo
proto: add a ping/pong request
Split the ping/pong request into its own interface
eis: drop the device->id now that it's all protocol-wrapped
eis: immediately disconnect a client without the ei_connection interface
eis: make ei_connection/callback/pingpong required interfaces
proto: if the target object no longer exists, don't send events/requests
eis: require ei_seat and ei_devices
scanner: drop the Target class, push to templates
Move the C proto templates to the src directory
meson.build: drop the protocol version
ei: remove unused server_version and client_version fields
proto: switch connection_setup.version to mirror interface_version requests
ei: handle server-sent interface versions correctly
eis: send out the ei_callback interface version after setup.Done
scanner: rename to ei-scanner
scanner: add the "camel" jinja filter
scanner: expand the help description
scanner: drop the Argument.argtype in favour of DBus-type bindings
proto: document what a "protocol violation" means
scanner: detect duplicates in the XML file
eis: pass the disconnect reason around when disconnecting a client
Add a brei-proto.h generated header file
brei: add the brei_result object and bubble it up as error case
Remove unused macro
proto: add a bunch of error reasons for debugging
ei: better protocol checking for invalid messages
ei: reject a device with capabilities unknown to us
eis: add eis_client_disconnect_with_reason
ei: remove some indirection from device events
ei: error out if we're in the wrong device state for emulating
eis: error out if we're in the wrong state to start/stop emulating
eis: remove some indirection from the device event handling
ei: make more ei_queue* functions semi-public for consistency
brei: change the various errors to PROTOCOL
Replace remaining errno-based errors to proper brei_results
protocol: a few more minor comments
protocol: change the context type enum to start at 1
Add serial numbers to the protocol
scanner: pass the Enum to the Entry class
scanner: comments and some more type annotations
scanner: don't allow incoming/outgoing for modes other than ei/eis
scanner: slightly clean up the XML error handling
scanner: rename run to run_counter
scanner: separate the parser from the actual protocol
scanner: factor out the protocol type mapping to be global
scanner: rename to as_c_arg and c_type for the c-specific functions
protocol: correct some comments
protocol: add serial numbers to the various destroy events
doc: add generated BREI documentation
scanner: parse the descriptions as well
scanner: fix a few black complaints
CI: explicitly add the ei-scanner to the Python Black run
protocol: improve a comment
util: add iobuf_prepend()
proto: switch to use the Wayland message header
scanner: fix mypy errors
scanner: use the proper SAXException class
scanner: parse the copyright tag
protocol: more explanations
protocol: change type=bitmask to use the wayland protocol's bitfield=true
meson: hook up a dtd check via xmllint
proto: add a serial number to the modifiers event
protocol: rename "type" arguments and events
test: add a framework for doing protocol tests directly
CI: run pytest as separate job
scanner: allow for cross-referencing enums
proto: drop the seat caps and cross-reference device caps instead
proto: rename connection_setup.done to .finish
proto: fix wrong references to ei_callback in the pingpong interface
proto: improve the documentation
proto: shift the capabilities down by one
test: remove unused python import
test: fix a ruff warning - f-string without placeholder
test: strip all trailing zeroes from the protocol strings
proto: rename ei_connection_setup to ei_handshake
protocol: more clarifications
editorconfig: add XML
protocol: split the handshake version negotiation from the other interfaces
ei: correct arguments to the invalid object log message
Change the ei_device_capability values to match the protocol
test: simplify results handling in the python tests
Switch object ids to use the object_id_t typedef
Remove now-obsolete proto files
Remove obsolete declaration
ei: remove obsolete device->id
util: add a strlen0 helper function
brei: factor out header size for the unit tests
brei: abstract string handling in a struct
proto: switch object ids to 64 bits
proto: split up message length and opcode again
brei: use memcpy for the 64bit protocol copy
eis: remove now-unused macro
Check incoming ids for validity
test: distinguish better between stderr/stdout of the subprocess
Ignore the dispatcher where an interface implementation is missing
eis: don't send a disconnected event when the client requests disconnect
test: throw an exception if sock.connect fails
test: up the timeout for dispatch
meson.build: add black and ruff checks to the test suite
CI: explicitly add ei-proto to the ruff check
test: run pytest with xdist where available
test: group 4 bytes at a time in our hexlify function
test: log all function calls to interfaces
client: drop seats when destroying the client
protocol: fix two cross-references
scanner: raise SystemExit instead of calling sys.exit
scanner: drop duplicate import
scanner: add ability to pass extra data to the jinja templates
src: pass the headerfile as jinja extra data
proto: make the documentation an extractable set of XML tags
scanner: allow '-' for loading a template from stdin
scanner: add a filter to escape ei protocol names
doc: add the templates and a script to generate hugo markdown
Generate the protocol documentation in gitlab pages
proto: clarify that the ei_seat capabilities depend on ei_device
tools: fix a debug message in the demo client
tools: add touchscreen support to the eis-demo-server
tools: add touch support to the ei-demo-client
meson: split into separate meson.build files for src/tools
meson: move the "build this?" checks into the subdirs
proto: more documentation improvements
proto: give a rough protocol overview as part of the docs
meson: fix a typo
test: fix the LD_LIBRARY_PATH to liboeffis
CI: always run the tests
Merge branch 'main' into wip/drop-protobuf
meson: make the header files variables to use within other meson files
doc: move the API documentation into its own directory
doc: drop the doxygen protocol generation
meson: hook up the protocol documentation via meson
doc: split protocol and api builds into separate meson options
CI: fix the doxygen path
scanner: expand the regex to search for protocol names
protocol: more protocol documentation
proto: fix references to ei_handshake.interface_version
doc/proto: sort pages by occurrence in the protocol file
doc/proto: add the generator script to the input files
doc/proto: add some basic index pages
doc/proto: put a standard blurb in for the destructor-type requests
proto: add the context-type attribute to events and requests
doc/proto: remove the embedded docs from the proto, use static pages instead
doc/proto: fix a bug with the pages script
doc/proto: remove now unused files
doc/proto: mirror the required directory structure
doc/proto: add a page describing the libraries
doc/proto: add a link to the git repo and issues page
doc/proto: add a page for the ei-scanner
CI: bump to the latest ci templates
Remove empty trailing newlines from all files
Add a pre-commit hook
CI: add new workflow rules
doc/proto: address a few documentation issues
meson: drop version requirement to 0.56 so we can build on Bullseye
proto: skip the bitmask check if on old python versions
test: skip the oeffis tests if we don't have dbusmock 0.28.5
CI: add a debian bullseye job
test: drop the default timeouts to 2
test: fix the exception check for the missing eiproto module
test: if we fail to load liboeffis.so, skip the rest of the pytests
proto: replace pointer/keyboard/touchscreen with a generic "interface" event
test: add test for receiving the device interfaces
test: add a test for pointer vs abs pointer receiving
scanner: use mangle_name for the interface name
scanner: add the protocol name so we can compile some #defines
test: use an enum iterator to loop through the interface names
scanner: look up interfaces by protocol name
scanner: auto-mangle the interface name when accessed
scanner: add a validator for Interface.mode
libei 0.5
Salman Malik (3):
src/meson.build: Switch shared_library => library
ei-scanner: Adjust annotation for list
config: Make memfd_create optional
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20230406/83aaef7f/attachment.sig>
More information about the wayland-devel
mailing list