# Copyright (C) 2020 by Jacob Alexander # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. @0x89950abd85ed15de; ## Imports ## using Common = import "common.capnp"; ## Interfaces ## interface Daemon extends(Common.Node) { # API interface to hid-io-core # This is the main entry point for calling hid-io-core functionality. enum SubscriptionOptionType { layout @0; # OS Keyboard layout change subscription # Sends a notification whenever the OS keyboard layout changes } struct Signal { struct Layout { } time @0 :UInt64; # Signal event timestamp data :union { layout @1 :Layout; # Layout event message tmp @2 :Layout; # TODO Removeme } } struct Info { hidioMajorVersion @0 :UInt16; hidioMinorVersion @1 :UInt16; hidioPatchVersion @2 :UInt16; # HID-IO Version information os @3 :Text; osVersion @4 :Text; # OS name and version running the daemon hostName @5 :Text; # Name of the daemon } struct SubscriptionOption { type @0 :SubscriptionOptionType; struct NoneOption {} conf :union { tmp1 @1 :NoneOption; # TODO Removeme tmp2 @2 :NoneOption; # TODO Removeme } } interface Subscription { # Subscription interface # Handles subscription ownership and when to drop subscription } interface Subscriber { # Node subscriber # Handles any push notifications from hid-io-core endpoints # NOTE: Not all packets are sent by default, you must configure the subscription to enable the ones you want update @0 (signal :Signal); # Called whenever a subscribed packet type (to this device) is available # May return 1 or more packets depending on the size of the queue # # Time is when the rpc is sent. # Useful when determining Signal ordering } subscribe @0 (subscriber :Subscriber, options :List(SubscriptionOption)) -> (subscription :Subscription); # Subscribes to a Subscriber interface # Registers push notifications for this node, the packets received will depend on the SubscriptionOption list # By default no packets will be sent # Will return an error if any of the options are not supported/invalid for this device unicodeText @1 (string :Text); # Output a unicode string to the focused window unicodeState @2 (characters :Text); # Hold the specified unicode symbols on the focused window # To release the symbols, call this command again without those symbols specified # e.g. # unicodeKeys("abcd") -> Holds abcd # unicodeKeys("d") -> Releases abc but keeps d held info @3 () -> (info: Info); # Returns system and daemon information # Mirrors what's available to HID-IO devices # Unicode # TODO # String # Symbol # Get Held # Set Held # Layout # Get # Set # VirtualKeyboard # VirtualMouse # VirtualJoystick }