[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