[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:

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
- new and prettier documentation, primarily aimed at the protocol. See
- 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:

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