Skip to content

Releases

0.11.0

Choose a tag to compare

@etherealrl etherealrl released this 30 Oct 17:54
4a570a6

anybox types text, presses key chords, takes a held key away from the PC and gives it back, and reaches what only a MAKCU, YSC or Ferrum can do

  • type_text, press_keys, release_keys and tap_keys. typing is native on a MAKCU and a YSC, chords on a MAKCU and a Ferrum, every other box gives you Unsupported. the README has a helper for when no box has something and a fallback for when only some do
  • force_release_key makes the PC see a key up while the user still holds it, and restore_key gives it back, down again if it's still held. native on a Medius (checked on 3.4.7) and a MAKCU (its key mask, i haven't checked that one on a box yet)
  • device.makcu() has interpolation, autorelease and whether it's still moving, device.ysc() its interpolation and serial, device.ferrum() its catch_xy, next to device.medius(). the MAKCU ones haven't run on a box yet, the YSC and Ferrum ones come from the vendors' own sources
  • docs/boxes.md says what a lock does to a held key, what each box does when you release a key the user holds, and which events carry the box's own time

nothing got removed, so updating from 0.10.0 is just the version number, but the C ABI is 3 now, so a C or C++ program needs the new header

0.10.0

Choose a tag to compare

@etherealrl etherealrl released this 17 Oct 21:03
c56ae03

YSC boxes report key events now, and anybox reads the YSC report shapes it used to drop

  • YSC: key events, from the keyboard reports the box sends by itself every time something changes on the keyboard behind it. they only show the real keyboard, never the keys anybox presses, and the box names at most 6 keys next to the modifiers. they were read off a real V1's recording and the vendor's own source, though anybox reading them hasn't run on a box yet
  • YSC: mouse reports named mouse (newer firmware) or with no message or no wheel at all (older firmware) are read too. before, anybox dropped them, so a box with that firmware gave no button or motion events
  • YSC: a V2's version is read from data or message, whatever the message says, like the vendor's driver does
  • what YSC key events show and what they don't is in docs/boxes.md

the API didn't change, so updating from 0.9.0 is just the version number, and the C ABI is still 2

0.9.0

Choose a tag to compare

@etherealrl etherealrl released this 17 Oct 17:49
ac61c85

anybox works from C# now, C++ has its own API, and every language has all of it, Medius included

  • C#: dotnet add package Anybox, .NET 10 on Windows and Linux. the library comes inside the package so you don't need Rust, and device.Medius() gives you everything only Medius does
  • C++: the capi tarball has anybox.hpp and anybox_medius.hpp now, the same API with RAII and exceptions, and device.medius() gives you a C++ Medius device instead of a handle for medius.h
  • every error carries its details in every language (the ports it tried, the boxes that couldn't do it, what it expected and what it found, etc), not just a status and a text
  • event stamps also come in nanoseconds on the OS monotonic clock (Stamp::arrived_ns, received_ns and anybox::monotonic_ns()), so they line up with other devices and other programs on the same machine. Python's time.perf_counter_ns() and .NET's Stopwatch read that same clock
  • Events::close() ends a receiver from any thread, a recv waiting on it returns right away
  • Python: a receiver that ran out raises RecvClosedError now instead of the closed device's error, a for over it still just ends
  • built on medius 3.4.6
  • how to install and use each language is in docs/bindings.md

the Rust API only got additions, so updating from 0.8.0 is just the version number. the C ABI is 2 now, so a C or C++ program needs the new headers and library

0.8.0

Choose a tag to compare

@etherealrl etherealrl released this 14 Oct 15:32
0fd075e

anybox now works from C, C++ and Python, not only Rust

  • C and C++: every release has an anybox-capi-<target>.tar.gz for Windows and Linux with anybox.h, medius.h, the library (shared and static) and the licenses of everything built into it
  • Python: pip install anybox-rs, Python 3.11 or newer on Windows and Linux. the wheel has the library inside, so you don't need Rust. pip install anybox-rs[medius] also gets you device.medius()
  • the box-specific behavior notes moved from the README to docs/boxes.md

the Rust crate itself didn't change its API, so updating from 0.7.1 is just the version number

v0.7.1

Choose a tag to compare

@etherealrl etherealrl released this 14 Oct 09:17
0b07d7c
  • YSC: buttons, motion and the wheel come in, anybox reads the reports the way a real V1 sends them
  • YSC: keys wait for the box's answer, so quick writes in a row don't break the link, and a key the box couldn't read gives Rejected instead of a disconnect
  • YSC: connecting checks that the box takes text commands and tells you what to try when it doesn't
  • Ferrum: a box that comes back through the app gets its locks back and lets go of what you held, with an Event::SessionReset

v0.7.0

Choose a tag to compare

@etherealrl etherealrl released this 13 Oct 20:33
d955afc
  • anybox::scan() and Connect::scan(): every port a search looks at, in port order, with its box or the error for that port alone (busy, not allowed, too old, NoBoxCan, NotFound), for a box picker
  • find() removed, scan() gives everything it gave

v0.6.1

Choose a tag to compare

@etherealrl etherealrl released this 13 Oct 19:18
8723a04
  • a receiver made right after a refused one still gets its own Rejected, so a stream that never came on can't look like an idle mouse
  • Events::recv_timeout with a timeout too long for the clock waits like recv instead of panicking, and a Stamp built with a huge since_open saturates
  • README: the YSC8K that's sold is the V1, and the MAKCU move rate as measured on one box

0.6.0

Choose a tag to compare

@etherealrl etherealrl released this 13 Oct 10:24
8bf741a
  • a click or a key tap with a hold on Ferrum is now a press and a release timed from your PC, like Ferrum's docs say to do it, native_only still refuses it
  • Ferrum: unplugging the box from the PC shows up as Event::Changed (the app's port stays open), and the "no device set" reason says the box might not be plugged in
  • YSC 8K V1: opened with .family(Family::Ysc), found at its rate the way the vendor's app does it (4M first, 9 rates), never changes the rate, the bootloader is refused. connect() with no family doesn't look for a V1 yet
  • a YSC search asks V2 ports before CH343 ones

0.5.0

Choose a tag to compare

@etherealrl etherealrl released this 13 Oct 00:41
6e1de18
  • anybox::candidates() and Connect::candidates() list the ports a search would look at, without opening any of them, so an app can notice a box getting plugged in and only run find() then
  • Event::Changed comes when the snapshot changes without a reconnect (a mouse set in the Ferrum app, YSC keys turning off, a Medius clone's details), at most one waits unread per receiver
  • Info.peripheral has the USB ids of the device plugged into the box, on a Medius and on a Ferrum's app port
  • README notes: the MAKCU's moment with no mouse right after a reconnect, the button Windows keeps down when the box restarts, and a YSC can't say yet whether a mouse is behind it

0.4.1

Choose a tag to compare

@etherealrl etherealrl released this 12 Oct 12:51
acc940e

adds a trace feature. turn it on and set ANYBOX_TRACE to a file path, and every byte anybox sends to a box and gets back ends up in that file with a timestamp, failed opens included. it's for figuring out what a box actually says when something doesn't work, and it's off by default. on Linux and macOS the file is only readable by you, since keys typed on the keyboard behind the box end up in it