sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget=/translations/zh_CN/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/zh_TW/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/it_IT/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/ja_JP/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/ko_KR/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/pt_BR/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget=/translations/sp_SP/driver-api/surface_aggregator/clients/dtxmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhW/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx.rsthKubhsubstitution_definition)}(h,.. |__u16| replace:: :c:type:`__u16 <__u16>`h]h)}(h:c:type:`__u16 <__u16>`h]hliteral)}(hhh]h__u16}(hhhhhNhNubah}(h]h ](xrefcc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoc)driver-api/surface_aggregator/clients/dtx refdomainhߌreftypetype refexplicitrefwarn reftarget__u16uh1hhhhKhhubah}(h]h ]h"]__u16ah$]h&]uh1hhhhKhhhhubh)}(hB.. |sdtx_event| replace:: :c:type:`struct sdtx_event `h]h)}(h(:c:type:`struct sdtx_event `h]h)}(hjh]hstruct sdtx_event}(hjhhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarnh sdtx_eventuh1hhhhKhhubah}(h]h ]h"] sdtx_eventah$]h&]uh1hhhhKhhhhubh)}(hO.. |sdtx_event_code| replace:: :c:type:`enum sdtx_event_code `h]h)}(h0:c:type:`enum sdtx_event_code `h]h)}(hj*h]henum sdtx_event_code}(hj,hhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarnhsdtx_event_codeuh1hhhhKhj$ubah}(h]h ]h"]sdtx_event_codeah$]h&]uh1hhhhKhhhhubh)}(hN.. |sdtx_base_info| replace:: :c:type:`struct sdtx_base_info `h]h)}(h0:c:type:`struct sdtx_base_info `h]h)}(hjTh]hstruct sdtx_base_info}(hjVhhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhjRubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarnhsdtx_base_infouh1hhhhKhjNubah}(h]h ]h"]sdtx_base_infoah$]h&]uh1hhhhKhhhhubh)}(hU.. |sdtx_device_mode| replace:: :c:type:`struct sdtx_device_mode ` h]h)}(h4:c:type:`struct sdtx_device_mode `h]h)}(hj~h]hstruct sdtx_device_mode}(hjhhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhj|ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarnhsdtx_device_modeuh1hhhhKhjxubah}(h]h ]h"]sdtx_device_modeah$]h&]uh1hhhhKhhhhubhsection)}(hhh](htitle)}(h6User-Space DTX (Clipboard Detachment System) Interfaceh]h6User-Space DTX (Clipboard Detachment System) Interface}(hjhhhNhNubah}(h]h ]h"]h$]h&]refidid13uh1jhjhhhhhK ubh paragraph)}(hXThe ``surface_dtx`` driver is responsible for proper clipboard detachment and re-attachment handling. To this end, it provides the ``/dev/surface/dtx`` device file, through which it can interface with a user-space daemon. This daemon is then ultimately responsible for determining and taking necessary actions, such as unmounting devices attached to the base, unloading/reloading the graphics-driver, user-notifications, etc.h](hThe }(hjhhhNhNubh)}(h``surface_dtx``h]h surface_dtx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhp driver is responsible for proper clipboard detachment and re-attachment handling. To this end, it provides the }(hjhhhNhNubh)}(h``/dev/surface/dtx``h]h/dev/surface/dtx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhX device file, through which it can interface with a user-space daemon. This daemon is then ultimately responsible for determining and taking necessary actions, such as unmounting devices attached to the base, unloading/reloading the graphics-driver, user-notifications, etc.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK hjhhubj)}(hXThere are two basic communication principles used in this driver: Commands (in other parts of the documentation also referred to as requests) and events. Commands are sent to the EC and may have a different implications in different contexts. Events are sent by the EC upon some internal state change. Commands are always driver-initiated, whereas events are always initiated by the EC.h]hXThere are two basic communication principles used in this driver: Commands (in other parts of the documentation also referred to as requests) and events. Commands are sent to the EC and may have a different implications in different contexts. Events are sent by the EC upon some internal state change. Commands are always driver-initiated, whereas events are always initiated by the EC.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjhhubhtopic)}(h Contents h](j)}(hContentsh]hContents}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhhhKubh bullet_list)}(hhh]h list_item)}(hhh](j)}(hhh]h reference)}(hhh]h6User-Space DTX (Clipboard Detachment System) Interface}(hjhhhNhNubah}(h]jah ]h"]h$]h&]refid4user-space-dtx-clipboard-detachment-system-interfaceuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]j)}(hhh]h Nomenclature}(hj<hhhNhNubah}(h]id14ah ]h"]h$]h&]refid nomenclatureuh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj3ubj)}(hhh](j)}(hhh]j)}(hhh]hDetachment Process}(hj^hhhNhNubah}(h]id15ah ]h"]h$]h&]refiddetachment-processuh1jhj[ubah}(h]h ]h"]h$]h&]uh1jhjXubj)}(hhh](j)}(hhh]j)}(hhh]j)}(hhh]h Latch States}(hj}hhhNhNubah}(h]id16ah ]h"]h$]h&]refid latch-statesuh1jhjzubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhjtubj)}(hhh]j)}(hhh]j)}(hhh]hDetachment Procedure}(hjhhhNhNubah}(h]id17ah ]h"]h$]h&]refiddetachment-procedureuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjtubeh}(h]h ]h"]h$]h&]uh1jhjXubeh}(h]h ]h"]h$]h&]uh1jhj3ubj)}(hhh](j)}(hhh]j)}(hhh]h"User-Space Interface Documentation}(hjhhhNhNubah}(h]id18ah ]h"]h$]h&]refid"user-space-interface-documentationuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]j)}(hhh]hError Codes and Status Values}(hjhhhNhNubah}(h]id19ah ]h"]h$]h&]refiderror-codes-and-status-valuesuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]hEvents}(hjhhhNhNubah}(h]id20ah ]h"]h$]h&]refideventsuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhj-ubah}(h]id21ah ]h"]h$]h&]refidsdtx-event-requestuh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjYubah}(h]id22ah ]h"]h$]h&]refidsdtx-event-canceluh1jhjVubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_EVENT_BASE_CONNECTION``h]hSDTX_EVENT_BASE_CONNECTION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id23ah ]h"]h$]h&]refidsdtx-event-base-connectionuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_EVENT_LATCH_STATUS``h]hSDTX_EVENT_LATCH_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id24ah ]h"]h$]h&]refidsdtx-event-latch-statusuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj$ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_EVENT_DEVICE_MODE``h]hSDTX_EVENT_DEVICE_MODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id25ah ]h"]h$]h&]refidsdtx-event-device-modeuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]hIOCTLs}(hjhhhNhNubah}(h]id26ah ]h"]h$]h&]refidioctlsuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_EVENTS_ENABLE``h]hSDTX_IOCTL_EVENTS_ENABLE}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhj4ubah}(h]id27ah ]h"]h$]h&]refidsdtx-ioctl-events-enableuh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_EVENTS_DISABLE``h]hSDTX_IOCTL_EVENTS_DISABLE}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhj`ubah}(h]id28ah ]h"]h$]h&]refidsdtx-ioctl-events-disableuh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_LOCK``h]hSDTX_IOCTL_LATCH_LOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id29ah ]h"]h$]h&]refidsdtx-ioctl-latch-lockuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_UNLOCK``h]hSDTX_IOCTL_LATCH_UNLOCK}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id30ah ]h"]h$]h&]refidsdtx-ioctl-latch-unlockuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id31ah ]h"]h$]h&]refidsdtx-ioctl-latch-requestuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_CONFIRM``h]hSDTX_IOCTL_LATCH_CONFIRM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id32ah ]h"]h$]h&]refidsdtx-ioctl-latch-confirmuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_HEARTBEAT``h]hSDTX_IOCTL_LATCH_HEARTBEAT}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhj<ubah}(h]id33ah ]h"]h$]h&]refidsdtx-ioctl-latch-heartbeatuh1jhj9ubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_LATCH_CANCEL``h]hSDTX_IOCTL_LATCH_CANCEL}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjhubah}(h]id34ah ]h"]h$]h&]refidsdtx-ioctl-latch-canceluh1jhjeubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_GET_BASE_INFO``h]hSDTX_IOCTL_GET_BASE_INFO}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id35ah ]h"]h$]h&]refidsdtx-ioctl-get-base-infouh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_GET_DEVICE_MODE``h]hSDTX_IOCTL_GET_DEVICE_MODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id36ah ]h"]h$]h&]refidsdtx-ioctl-get-device-modeuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubj)}(hhh]j)}(hhh]j)}(hhh]h)}(h``SDTX_IOCTL_GET_LATCH_STATUS``h]hSDTX_IOCTL_GET_LATCH_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id37ah ]h"]h$]h&]refidsdtx-ioctl-get-latch-statusuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j)}(hhh]hA Note on Base IDs}(hj$hhhNhNubah}(h]id38ah ]h"]h$]h&]refida-note-on-base-idsuh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j)}(hhh]hStructures and Enums}(hjFhhhNhNubah}(h]id39ah ]h"]h$]h&]refidstructures-and-enumsuh1jhjCubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj3ubj)}(hhh]j)}(hhh]j)}(hhh]h API Users}(hjthhhNhNubah}(h]id40ah ]h"]h$]h&]refid api-usersuh1jhjqubah}(h]h ]h"]h$]h&]uh1jhjnubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjhhhNhNubeh}(h]contentsah ]contentsah"]contentsah$]h&]uh1jhhhKhjhhubj)}(hhh](j)}(h Nomenclatureh]h Nomenclature}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjEuh1jhjhhhhhKubj)}(hhh](j)}(hZ**Clipboard:** The detachable upper part of the Surface Book, housing the screen and CPU. h]j)}(hY**Clipboard:** The detachable upper part of the Surface Book, housing the screen and CPU.h](hstrong)}(h**Clipboard:**h]h Clipboard:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhK The detachable upper part of the Surface Book, housing the screen and CPU.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h**Base:** The lower part of the Surface Book from which the clipboard can be detached, optionally (model dependent) housing the discrete GPU (dGPU). h]j)}(h**Base:** The lower part of the Surface Book from which the clipboard can be detached, optionally (model dependent) housing the discrete GPU (dGPU).h](j)}(h **Base:**h]hBase:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh The lower part of the Surface Book from which the clipboard can be detached, optionally (model dependent) housing the discrete GPU (dGPU).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK#hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h**Latch:** The mechanism keeping the clipboard attached to the base in normal operation and allowing it to be detached when requested. h]j)}(h**Latch:** The mechanism keeping the clipboard attached to the base in normal operation and allowing it to be detached when requested.h](j)}(h **Latch:**h]hLatch:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh| The mechanism keeping the clipboard attached to the base in normal operation and allowing it to be detached when requested.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK'hj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h**Silently ignored commands:** The command is accepted by the EC as a valid command and acknowledged (following the standard communication protocol), but the EC does not act upon it, i.e. ignores it.e upper part of the h]j)}(h**Silently ignored commands:** The command is accepted by the EC as a valid command and acknowledged (following the standard communication protocol), but the EC does not act upon it, i.e. ignores it.e upper part of theh](j)}(h**Silently ignored commands:**h]hSilently ignored commands:}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh The command is accepted by the EC as a valid command and acknowledged (following the standard communication protocol), but the EC does not act upon it, i.e. ignores it.e upper part of the}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK+hj3ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhK hjhhubeh}(h]jKah ]h"] nomenclatureah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hDetachment Processh]hDetachment Process}(hjkhhhNhNubah}(h]h ]h"]h$]h&]jjguh1jhjhhhhhhK2ubj)}(hWarning: This part of the documentation is based on reverse engineering and testing and thus may contain errors or be incomplete.h]hWarning: This part of the documentation is based on reverse engineering and testing and thus may contain errors or be incomplete.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK4hjhhhubj)}(hhh](j)}(h Latch Statesh]h Latch States}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhhK8ubj)}(hThe latch mechanism has two major states: *open* and *closed*. In the *closed* state (default), the clipboard is secured to the base, whereas in the *open* state, the clipboard can be removed by a user.h](h*The latch mechanism has two major states: }(hjhhhNhNubhemphasis)}(h*open*h]hopen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h*closed*h]hclosed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh . In the }(hjhhhNhNubj)}(h*closed*h]hclosed}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhG state (default), the clipboard is secured to the base, whereas in the }(hjhhhNhNubj)}(h*open*h]hopen}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh/ state, the clipboard can be removed by a user.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK:hjhhubj)}(hX{The latch can additionally be locked and, correspondingly, unlocked, which can influence the detachment procedure. Specifically, this locking mechanism is intended to prevent the dGPU, positioned in the base of the device, from being hot-unplugged while in use. More details can be found in the documentation for the detachment procedure below. By default, the latch is unlocked.h]hX{The latch can additionally be locked and, correspondingly, unlocked, which can influence the detachment procedure. Specifically, this locking mechanism is intended to prevent the dGPU, positioned in the base of the device, from being hot-unplugged while in use. More details can be found in the documentation for the detachment procedure below. By default, the latch is unlocked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK>hjhhubeh}(h]jah ]h"] latch statesah$]h&]uh1jhjhhhhhhK8ubj)}(hhh](j)}(hDetachment Procedureh]hDetachment Procedure}(hjhhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhhKFubj)}(hNote that the detachment process is governed fully by the EC. The ``surface_dtx`` driver only relays events from the EC to user-space and commands from user-space to the EC, i.e. it does not influence this process.h](hBNote that the detachment process is governed fully by the EC. The }(hjhhhNhNubh)}(h``surface_dtx``h]h surface_dtx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh driver only relays events from the EC to user-space and commands from user-space to the EC, i.e. it does not influence this process.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKHhjhhubj)}(hThe detachment process is started with the user pressing the *detach* button on the base of the device or executing the ``SDTX_IOCTL_LATCH_REQUEST`` IOCTL. Following that:h](h=The detachment process is started with the user pressing the }(hj6hhhNhNubj)}(h*detach*h]hdetach}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh3 button on the base of the device or executing the }(hj6hhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubh IOCTL. Following that:}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKLhjhhubhenumerated_list)}(hhh](j)}(hX The EC turns on the indicator led on the detach-button, sends a *detach-request* event (``SDTX_EVENT_REQUEST``), and awaits further instructions/commands. In case the latch is unlocked, the led will flash green. If the latch has been locked, the led will be solid red h]j)}(hX The EC turns on the indicator led on the detach-button, sends a *detach-request* event (``SDTX_EVENT_REQUEST``), and awaits further instructions/commands. In case the latch is unlocked, the led will flash green. If the latch has been locked, the led will be solid redh](h@The EC turns on the indicator led on the detach-button, sends a }(hjqhhhNhNubj)}(h*detach-request*h]hdetach-request}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh event (}(hjqhhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqubh), and awaits further instructions/commands. In case the latch is unlocked, the led will flash green. If the latch has been locked, the led will be solid red}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKPhjmubah}(h]h ]h"]h$]h&]uh1jhjjhhhhhNubj)}(hThe event is, via the ``surface_dtx`` driver, relayed to user-space, where an appropriate user-space daemon can handle it and send instructions back to the EC via IOCTLs provided by this driver. h]j)}(hThe event is, via the ``surface_dtx`` driver, relayed to user-space, where an appropriate user-space daemon can handle it and send instructions back to the EC via IOCTLs provided by this driver.h](hThe event is, via the }(hjhhhNhNubh)}(h``surface_dtx``h]h surface_dtx}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh driver, relayed to user-space, where an appropriate user-space daemon can handle it and send instructions back to the EC via IOCTLs provided by this driver.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKUhjubah}(h]h ]h"]h$]h&]uh1jhjjhhhhhNubj)}(hXThe EC waits for instructions from user-space and acts according to them. If the EC does not receive any instructions in a given period, it will time out and continue as follows: - If the latch is unlocked, the EC will open the latch and the clipboard can be detached from the base. This is the exact behavior as without this driver or any user-space daemon. See the ``SDTX_IOCTL_LATCH_CONFIRM`` description below for more details on the follow-up behavior of the EC. - If the latch is locked, the EC will *not* open the latch, meaning the clipboard cannot be detached from the base. Furthermore, the EC sends an cancel event (``SDTX_EVENT_CANCEL``) detailing this with the cancel reason ``SDTX_DETACH_TIMEDOUT`` (see :ref:`events` for details). h](j)}(hThe EC waits for instructions from user-space and acts according to them. If the EC does not receive any instructions in a given period, it will time out and continue as follows:h]hThe EC waits for instructions from user-space and acts according to them. If the EC does not receive any instructions in a given period, it will time out and continue as follows:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKYhjubj)}(hhh](j)}(hXIf the latch is unlocked, the EC will open the latch and the clipboard can be detached from the base. This is the exact behavior as without this driver or any user-space daemon. See the ``SDTX_IOCTL_LATCH_CONFIRM`` description below for more details on the follow-up behavior of the EC. h]j)}(hXIf the latch is unlocked, the EC will open the latch and the clipboard can be detached from the base. This is the exact behavior as without this driver or any user-space daemon. See the ``SDTX_IOCTL_LATCH_CONFIRM`` description below for more details on the follow-up behavior of the EC.h](hIf the latch is unlocked, the EC will open the latch and the clipboard can be detached from the base. This is the exact behavior as without this driver or any user-space daemon. See the }(hjhhhNhNubh)}(h``SDTX_IOCTL_LATCH_CONFIRM``h]hSDTX_IOCTL_LATCH_CONFIRM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhH description below for more details on the follow-up behavior of the EC.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK]hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hXIf the latch is locked, the EC will *not* open the latch, meaning the clipboard cannot be detached from the base. Furthermore, the EC sends an cancel event (``SDTX_EVENT_CANCEL``) detailing this with the cancel reason ``SDTX_DETACH_TIMEDOUT`` (see :ref:`events` for details). h]j)}(hXIf the latch is locked, the EC will *not* open the latch, meaning the clipboard cannot be detached from the base. Furthermore, the EC sends an cancel event (``SDTX_EVENT_CANCEL``) detailing this with the cancel reason ``SDTX_DETACH_TIMEDOUT`` (see :ref:`events` for details).h](h$If the latch is locked, the EC will }(hj hhhNhNubj)}(h*not*h]hnot}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubht open the latch, meaning the clipboard cannot be detached from the base. Furthermore, the EC sends an cancel event (}(hj hhhNhNubh)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh() detailing this with the cancel reason }(hj hhhNhNubh)}(h``SDTX_DETACH_TIMEDOUT``h]hSDTX_DETACH_TIMEDOUT}(hjB hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh (see }(hj hhhNhNubh)}(h :ref:`events`h]hinline)}(hjV h]hevents}(hjZ hhhNhNubah}(h]h ](hތstdstd-refeh"]h$]h&]uh1jX hjT ubah}(h]h ]h"]h$]h&]refdoch refdomainjd reftyperef refexplicitrefwarnheventsuh1hhhhKbhj ubh for details).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKbhj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j_-uh1jhhhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjjhhhNhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jhhjhhhhhKPubj)}(hIValid responses by a user-space daemon to a detachment request event are:h]hIValid responses by a user-space daemon to a detachment request event are:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKghjhhubj)}(hhh](j)}(hExecute ``SDTX_IOCTL_LATCH_REQUEST``. This will immediately abort the detachment process. Furthermore, the EC will send a detach-request event, similar to the user pressing the detach-button to cancel said process (see below). h]j)}(hExecute ``SDTX_IOCTL_LATCH_REQUEST``. This will immediately abort the detachment process. Furthermore, the EC will send a detach-request event, similar to the user pressing the detach-button to cancel said process (see below).h](hExecute }(hj hhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh. This will immediately abort the detachment process. Furthermore, the EC will send a detach-request event, similar to the user pressing the detach-button to cancel said process (see below).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKihj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hX8Execute ``SDTX_IOCTL_LATCH_CONFIRM``. This will cause the EC to open the latch, after which the user can separate clipboard and base. As this changes the latch state, a *latch-status* event (``SDTX_EVENT_LATCH_STATUS``) will be sent once the latch has been opened successfully. If the EC fails to open the latch, e.g. due to hardware error or low battery, a latch-cancel event (``SDTX_EVENT_CANCEL``) will be sent with the cancel reason indicating the specific failure. If the latch is currently locked, the latch will automatically be unlocked before it is opened. h](j)}(hExecute ``SDTX_IOCTL_LATCH_CONFIRM``. This will cause the EC to open the latch, after which the user can separate clipboard and base.h](hExecute }(hj hhhNhNubh)}(h``SDTX_IOCTL_LATCH_CONFIRM``h]hSDTX_IOCTL_LATCH_CONFIRM}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubha. This will cause the EC to open the latch, after which the user can separate clipboard and base.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKnhj ubj)}(hXOAs this changes the latch state, a *latch-status* event (``SDTX_EVENT_LATCH_STATUS``) will be sent once the latch has been opened successfully. If the EC fails to open the latch, e.g. due to hardware error or low battery, a latch-cancel event (``SDTX_EVENT_CANCEL``) will be sent with the cancel reason indicating the specific failure.h](h#As this changes the latch state, a }(hj hhhNhNubj)}(h*latch-status*h]h latch-status}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh event (}(hj hhhNhNubh)}(h``SDTX_EVENT_LATCH_STATUS``h]hSDTX_EVENT_LATCH_STATUS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh) will be sent once the latch has been opened successfully. If the EC fails to open the latch, e.g. due to hardware error or low battery, a latch-cancel event (}(hj hhhNhNubh)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhF) will be sent with the cancel reason indicating the specific failure.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKqhj ubj)}(h_If the latch is currently locked, the latch will automatically be unlocked before it is opened.h]h_If the latch is currently locked, the latch will automatically be unlocked before it is opened.}(hjA hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKwhj ubeh}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hExecute ``SDTX_IOCTL_LATCH_HEARTBEAT``. This will reset the internal timeout. No other actions will be performed, i.e. the detachment process will neither be completed nor canceled, and the EC will still be waiting for further responses. h]j)}(hExecute ``SDTX_IOCTL_LATCH_HEARTBEAT``. This will reset the internal timeout. No other actions will be performed, i.e. the detachment process will neither be completed nor canceled, and the EC will still be waiting for further responses.h](hExecute }(hjY hhhNhNubh)}(h``SDTX_IOCTL_LATCH_HEARTBEAT``h]hSDTX_IOCTL_LATCH_HEARTBEAT}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY ubh. This will reset the internal timeout. No other actions will be performed, i.e. the detachment process will neither be completed nor canceled, and the EC will still be waiting for further responses.}(hjY hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKzhjU ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hXuExecute ``SDTX_IOCTL_LATCH_CANCEL``. This will abort the detachment process, similar to ``SDTX_IOCTL_LATCH_REQUEST``, described above, or the button press, described below. A *generic request* event (``SDTX_EVENT_REQUEST``) is send in response to this. In contrast to those, however, this command does not trigger a new detachment process if none is currently in progress. h]j)}(hXtExecute ``SDTX_IOCTL_LATCH_CANCEL``. This will abort the detachment process, similar to ``SDTX_IOCTL_LATCH_REQUEST``, described above, or the button press, described below. A *generic request* event (``SDTX_EVENT_REQUEST``) is send in response to this. In contrast to those, however, this command does not trigger a new detachment process if none is currently in progress.h](hExecute }(hj hhhNhNubh)}(h``SDTX_IOCTL_LATCH_CANCEL``h]hSDTX_IOCTL_LATCH_CANCEL}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh5. This will abort the detachment process, similar to }(hj hhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh;, described above, or the button press, described below. A }(hj hhhNhNubj)}(h*generic request*h]hgeneric request}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh event (}(hj hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh) is send in response to this. In contrast to those, however, this command does not trigger a new detachment process if none is currently in progress.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubj)}(hQDo nothing. The detachment process eventually times out as described in point 3. h]j)}(hPDo nothing. The detachment process eventually times out as described in point 3.h]hPDo nothing. The detachment process eventually times out as described in point 3.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhj hhhhhNubeh}(h]h ]h"]h$]h&]j_j uh1jhhhKihjhhubj)}(h6See :ref:`ioctls` for more details on these responses.h](hSee }(hj hhhNhNubh)}(h :ref:`ioctls`h]jY )}(hj h]hioctls}(hj hhhNhNubah}(h]h ](hތstdstd-refeh"]h$]h&]uh1jX hj ubah}(h]h ]h"]h$]h&]refdoch refdomainj reftyperef refexplicitrefwarnhioctlsuh1hhhhKhj ubh% for more details on these responses.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hXIt is important to note that, if the user presses the detach button at any point when a detachment operation is in progress (i.e. after the EC has sent the initial *detach-request* event (``SDTX_EVENT_REQUEST``) and before it received the corresponding response concluding the process), the detachment process is canceled on the EC-level and an identical event is being sent. Thus a *detach-request* event, by itself, does not signal the start of the detachment process.h](hIt is important to note that, if the user presses the detach button at any point when a detachment operation is in progress (i.e. after the EC has sent the initial }(hj/ hhhNhNubj)}(h*detach-request*h]hdetach-request}(hj7 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ ubh event (}(hj/ hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hjI hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ ubh) and before it received the corresponding response concluding the process), the detachment process is canceled on the EC-level and an identical event is being sent. Thus a }(hj/ hhhNhNubj)}(h*detach-request*h]hdetach-request}(hj[ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ ubhG event, by itself, does not signal the start of the detachment process.}(hj/ hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubj)}(hThe detachment process may further be canceled by the EC due to hardware failures or a low clipboard battery. This is done via a cancel event (``SDTX_EVENT_CANCEL``) with the corresponding cancel reason.h](hThe detachment process may further be canceled by the EC due to hardware failures or a low clipboard battery. This is done via a cancel event (}(hjs hhhNhNubh)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs ubh') with the corresponding cancel reason.}(hjs hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]jah ]h"]detachment procedureah$]h&]uh1jhjhhhhhhKFubeh}(h]jmah ]h"]detachment processah$]h&]uh1jhjhhhhhK2ubj)}(hhh](j)}(h"User-Space Interface Documentationh]h"User-Space Interface Documentation}(hj hhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhj hhhhhKubj)}(hhh](j)}(hError Codes and Status Valuesh]hError Codes and Status Values}(hj hhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhj hhhhhKubj)}(hError and status codes are divided into different categories, which can be used to determine if the status code is an error, and, if it is, the severity and type of that error. The current categories are:h]hError and status codes are divided into different categories, which can be used to determine if the status code is an error, and, if it is, the severity and type of that error. The current categories are:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubhtable)}(hhh](j)}(h$Overview of Status/Error Categories.h]h$Overview of Status/Error Categories.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubhtgroup)}(hhh](hcolspec)}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubhthead)}(hhh]hrow)}(hhh](hentry)}(hhh]j)}(hNameh]hName}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hValueh]hValue}(hj/ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj, ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hjF hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjC ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hj ubhtbody)}(hhh](j )}(hhh](j )}(hhh]j)}(h ``STATUS``h]h)}(hjs h]hSTATUS}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq ubah}(h]h ]h"]h$]h&]uh1jhhhKhjn ubah}(h]h ]h"]h$]h&]uh1j hjk ubj )}(hhh]j)}(h ``0x0000``h]h)}(hj h]h0x0000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjk ubj )}(hhh]j)}(hNon-error status codes.h]hNon-error status codes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hjk ubeh}(h]h ]h"]h$]h&]uh1j hjh ubj )}(hhh](j )}(hhh]j)}(h``RUNTIME_ERROR``h]h)}(hj h]h RUNTIME_ERROR}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``0x1000``h]h)}(hj h]h0x1000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hNon-critical runtime errors.h]hNon-critical runtime errors.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjh ubj )}(hhh](j )}(hhh]j)}(h``HARDWARE_ERROR``h]h)}(hj3 h]hHARDWARE_ERROR}(hj5 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1 ubah}(h]h ]h"]h$]h&]uh1jhhhKhj. ubah}(h]h ]h"]h$]h&]uh1j hj+ ubj )}(hhh]j)}(h ``0x2000``h]h)}(hjS h]h0x2000}(hjU hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ ubah}(h]h ]h"]h$]h&]uh1jhhhKhjN ubah}(h]h ]h"]h$]h&]uh1j hj+ ubj )}(hhh]j)}(hCritical hardware failures.h]hCritical hardware failures.}(hjq hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjn ubah}(h]h ]h"]h$]h&]uh1j hj+ ubeh}(h]h ]h"]h$]h&]uh1j hjh ubj )}(hhh](j )}(hhh]j)}(h ``UNKNOWN``h]h)}(hj h]hUNKNOWN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``0xF000``h]h)}(hj h]h0xF000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hUnknown error codes.h]hUnknown error codes.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjh ubeh}(h]h ]h"]h$]h&]uh1jf hj ubeh}(h]h ]h"]h$]h&]colsKuh1j hj ubeh}(h]id3ah ]h"]h$]h&]uh1j hj hhhNhNubj)}(hXOther categories are reserved for future use. The ``SDTX_CATEGORY()`` macro can be used to determine the category of any status value. The ``SDTX_SUCCESS()`` macro can be used to check if the status value is a success value (``SDTX_CATEGORY_STATUS``) or if it indicates a failure.h](h2Other categories are reserved for future use. The }(hj hhhNhNubh)}(h``SDTX_CATEGORY()``h]hSDTX_CATEGORY()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhF macro can be used to determine the category of any status value. The }(hj hhhNhNubh)}(h``SDTX_SUCCESS()``h]hSDTX_SUCCESS()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubhD macro can be used to check if the status value is a success value (}(hj hhhNhNubh)}(h``SDTX_CATEGORY_STATUS``h]hSDTX_CATEGORY_STATUS}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh) or if it indicates a failure.}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hUnknown status or error codes sent by the EC are assigned to the ``UNKNOWN`` category by the driver and may be implemented via their own code in the future.h](hAUnknown status or error codes sent by the EC are assigned to the }(hjChhhNhNubh)}(h ``UNKNOWN``h]hUNKNOWN}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjCubhP category by the driver and may be implemented via their own code in the future.}(hjChhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hCurrently used error codes are:h]hCurrently used error codes are:}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj )}(hhh](j)}(hOverview of Error Codes.h]hOverview of Error Codes.}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjqubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hCategoryh]hCategory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hValueh]hValue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_DETACH_NOT_FEASIBLE``h]h)}(hj&h]hSDTX_DETACH_NOT_FEASIBLE}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhKhj!ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``RUNTIME``h]h)}(hjFh]hRUNTIME}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhhhKhjAubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x1001``h]h)}(hjfh]h0x1001}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jhhhKhjaubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h5Detachment not feasible due to low clipboard battery.h]h5Detachment not feasible due to low clipboard battery.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_DETACH_TIMEDOUT``h]h)}(hjh]hSDTX_DETACH_TIMEDOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``RUNTIME``h]h)}(hjh]hRUNTIME}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x1002``h]h)}(hjh]h0x1002}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h8Detachment process timed out while the latch was locked.h]h8Detachment process timed out while the latch was locked.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_ERR_FAILED_TO_OPEN``h]h)}(hj&h]hSDTX_ERR_FAILED_TO_OPEN}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhKhj!ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``HARDWARE``h]h)}(hjFh]hHARDWARE}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhhhKhjAubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x2001``h]h)}(hjfh]h0x2001}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jhhhKhjaubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hFailed to open latch.h]hFailed to open latch.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]h)}(hjh]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``HARDWARE``h]h)}(hjh]hHARDWARE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x2002``h]h)}(hjh]h0x2002}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hFailed to keep latch open.h]hFailed to keep latch open.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_ERR_FAILED_TO_CLOSE``h]h)}(hj&h]hSDTX_ERR_FAILED_TO_CLOSE}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhKhj!ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``HARDWARE``h]h)}(hjFh]hHARDWARE}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhhhKhjAubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x2003``h]h)}(hjfh]h0x2003}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1jhhhKhjaubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hFailed to close latch.h]hFailed to close latch.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjqubeh}(h]id4ah ]h"]h$]h&]uh1j hj hhhNhNubj)}(hOther error codes are reserved for future use. Non-error status codes may overlap and are generally only unique within their use-case:h]hOther error codes are reserved for future use. Non-error status codes may overlap and are generally only unique within their use-case:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj )}(hhh](j)}(hLatch Status Codes.h]hLatch Status Codes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hCategoryh]hCategory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hValueh]hValue}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj0ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjGubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_LATCH_CLOSED``h]h)}(hjuh]hSDTX_LATCH_CLOSED}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsubah}(h]h ]h"]h$]h&]uh1jhhhKhjpubah}(h]h ]h"]h$]h&]uh1j hjmubj )}(hhh]j)}(h ``STATUS``h]h)}(hjh]hSTATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjmubj )}(hhh]j)}(h ``0x0000``h]h)}(hjh]h0x0000}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjmubj )}(hhh]j)}(h Latch is closed/has been closed.h]h Latch is closed/has been closed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjmubeh}(h]h ]h"]h$]h&]uh1j hjjubj )}(hhh](j )}(hhh]j)}(h``SDTX_LATCH_OPENED``h]h)}(hjh]hSDTX_LATCH_OPENED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``STATUS``h]h)}(hjh]hSTATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x0001``h]h)}(hj5h]h0x0001}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jhhhKhj0ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hLatch is open/has been opened.h]hLatch is open/has been opened.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjPubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id5ah ]h"]h$]h&]uh1j hj hhhNhNubj )}(hhh](j)}(hBase State Codes.h]hBase State Codes.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hNameh]hName}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hCategoryh]hCategory}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hValueh]hValue}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_BASE_DETACHED``h]h)}(hj6h]hSDTX_BASE_DETACHED}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(h]h ]h"]h$]h&]uh1j hj.ubj )}(hhh]j)}(h ``STATUS``h]h)}(hjVh]hSTATUS}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjTubah}(h]h ]h"]h$]h&]uh1jhhhMhjQubah}(h]h ]h"]h$]h&]uh1j hj.ubj )}(hhh]j)}(h ``0x0000``h]h)}(hjvh]h0x0000}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtubah}(h]h ]h"]h$]h&]uh1jhhhMhjqubah}(h]h ]h"]h$]h&]uh1j hj.ubj )}(hhh]j)}(h&Base has been detached/is not present.h]h&Base has been detached/is not present.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hjubah}(h]h ]h"]h$]h&]uh1j hj.ubeh}(h]h ]h"]h$]h&]uh1j hj+ubj )}(hhh](j )}(hhh]j)}(h``SDTX_BASE_ATTACHED``h]h)}(hjh]hSDTX_BASE_ATTACHED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``STATUS``h]h)}(hjh]hSTATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x0001``h]h)}(hjh]h0x0001}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h"Base has been attached/is present.h]h"Base has been attached/is present.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hj+ubeh}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id6ah ]h"]h$]h&]uh1j hj hhhNhNubj)}(h/Again, other codes are reserved for future use.h]h/Again, other codes are reserved for future use.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubhtarget)}(h .. _events:h]h}(h]h ]h"]h$]h&]jjuh1jPhMhj hhhhubeh}(h]jah ]h"]error codes and status valuesah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hEventsh]hEvents}(hjfhhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhjchhhhhMubj)}(hXEvents can be received by reading from the device file. They are disabled by default and have to be enabled by executing ``SDTX_IOCTL_EVENTS_ENABLE`` first. All events follow the layout prescribed by |sdtx_event|. Specific event types can be identified by their event code, described in |sdtx_event_code|. Note that other event codes are reserved for future use, thus an event parser must be able to handle any unknown/unsupported event types gracefully, by relying on the payload length given in the event header.h](hyEvents can be received by reading from the device file. They are disabled by default and have to be enabled by executing }(hjthhhNhNubh)}(h``SDTX_IOCTL_EVENTS_ENABLE``h]hSDTX_IOCTL_EVENTS_ENABLE}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjtubh3 first. All events follow the layout prescribed by }(hjthhhNhNubh)}(hjh]h)}(hjh]hstruct sdtx_event}(hjhhhNhNubah}(h]h ](hhj eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypej refexplicitrefwarn reftargetjuh1hhhhKhjthhubhK. Specific event types can be identified by their event code, described in }(hjthhhNhNubh)}(hj*h]h)}(hj*h]henum sdtx_event_code}(hjhhhNhNubah}(h]h ](hhj6eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypejC refexplicitrefwarn reftargetjFuh1hhhhKhjthhubh. Note that other event codes are reserved for future use, thus an event parser must be able to handle any unknown/unsupported event types gracefully, by relying on the payload length given in the event header.}(hjthhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjchhubj)}(h#Currently provided event types are:h]h#Currently provided event types are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjchhubj )}(hhh](j)}(hOverview of DTX events.h]hOverview of DTX events.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM!hjubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hNameh]hName}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM%hj$ubah}(h]h ]h"]h$]h&]uh1j hj!ubj )}(hhh]j)}(hCodeh]hCode}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM&hj;ubah}(h]h ]h"]h$]h&]uh1j hj!ubj )}(hhh]j)}(hPayloadh]hPayload}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM'hjRubah}(h]h ]h"]h$]h&]uh1j hj!ubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM(hjiubah}(h]h ]h"]h$]h&]uh1j hj!ubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_REQUEST``h]h)}(hjh]hSDTX_EVENT_REQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM*hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h``1``h]h)}(hjh]h1}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM+hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0`` bytesh](h)}(h``0``h]h0}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh bytes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM,hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h%Detachment process initiated/aborted.h]h%Detachment process initiated/aborted.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM-hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_CANCEL``h]h)}(hjh]hSDTX_EVENT_CANCEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM/hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h``2``h]h)}(hj<h]h2}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1jhhhM0hj7ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``2`` bytesh](h)}(h``2``h]h2}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZubh bytes}(hjZhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM1hjWubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hEC canceled detachment process.h]hEC canceled detachment process.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM2hj|ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_BASE_CONNECTION``h]h)}(hjh]hSDTX_EVENT_BASE_CONNECTION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM4hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h``3``h]h)}(hjh]h3}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM5hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``4`` bytesh](h)}(h``4``h]h4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh bytes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM6hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hBase connection state changed.h]hBase connection state changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM7hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_LATCH_STATUS``h]h)}(hj&h]hSDTX_EVENT_LATCH_STATUS}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhM9hj!ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h``4``h]h)}(hjFh]h4}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDubah}(h]h ]h"]h$]h&]uh1jhhhM:hjAubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``2`` bytesh](h)}(h``2``h]h2}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubh bytes}(hjdhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM;hjaubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hLatch status changed.h]hLatch status changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM<hjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_DEVICE_MODE``h]h)}(hjh]hSDTX_EVENT_DEVICE_MODE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM>hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h``5``h]h)}(hjh]h5}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM?hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``2`` bytesh](h)}(h``2``h]h2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh bytes}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM@hjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hDevice mode changed.h]hDevice mode changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMAhj ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id7ah ]h"]h$]h&]uh1j hjchhhNhNubj)}(h!Individual events in more detail:h]h!Individual events in more detail:}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChjchhubj)}(hhh](j)}(hj2h]h)}(hj2h]hSDTX_EVENT_REQUEST}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]jj@uh1jhjJhhhhhMFubj)}(hSent when a detachment process is started or, if in progress, aborted by the user, either via a detach button press or a detach request (``SDTX_IOCTL_LATCH_REQUEST``) being sent from user-space.h](hSent when a detachment process is started or, if in progress, aborted by the user, either via a detach button press or a detach request (}(hjchhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcubh) being sent from user-space.}(hjchhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMHhjJhhubj)}(hDoes not have any payload.h]hDoes not have any payload.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMLhjJhhubeh}(h]jFah ]h"]sdtx_event_requestah$]h&]uh1jhjchhhhhMFubj)}(hhh](j)}(hj^h]h)}(hj^h]hSDTX_EVENT_CANCEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jjluh1jhjhhhhhMOubj)}(hSent when a detachment process is canceled by the EC due to unfulfilled preconditions (e.g. clipboard battery too low to detach) or hardware failure. The reason for cancellation is given in the event payload detailed below and can be one ofh]hSent when a detachment process is canceled by the EC due to unfulfilled preconditions (e.g. clipboard battery too low to detach) or hardware failure. The reason for cancellation is given in the event payload detailed below and can be one of}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMQhjhhubj)}(hhh](j)}(h{``SDTX_DETACH_TIMEDOUT``: Detachment timed out while the latch was locked. The latch has neither been opened nor unlocked. h]j)}(hz``SDTX_DETACH_TIMEDOUT``: Detachment timed out while the latch was locked. The latch has neither been opened nor unlocked.h](h)}(h``SDTX_DETACH_TIMEDOUT``h]hSDTX_DETACH_TIMEDOUT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhb: Detachment timed out while the latch was locked. The latch has neither been opened nor unlocked.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMVhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hT``SDTX_DETACH_NOT_FEASIBLE``: Detachment not feasible due to low clipboard battery. h]j)}(hS``SDTX_DETACH_NOT_FEASIBLE``: Detachment not feasible due to low clipboard battery.h](h)}(h``SDTX_DETACH_NOT_FEASIBLE``h]hSDTX_DETACH_NOT_FEASIBLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh7: Detachment not feasible due to low clipboard battery.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMYhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hJ``SDTX_ERR_FAILED_TO_OPEN``: Could not open the latch (hardware failure). h]j)}(hI``SDTX_ERR_FAILED_TO_OPEN``: Could not open the latch (hardware failure).h](h)}(h``SDTX_ERR_FAILED_TO_OPEN``h]hSDTX_ERR_FAILED_TO_OPEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.: Could not open the latch (hardware failure).}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM\hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hV``SDTX_ERR_FAILED_TO_REMAIN_OPEN``: Could not keep the latch open (hardware failure). h]j)}(hU``SDTX_ERR_FAILED_TO_REMAIN_OPEN``: Could not keep the latch open (hardware failure).h](h)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh3: Could not keep the latch open (hardware failure).}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM^hj4ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(hL``SDTX_ERR_FAILED_TO_CLOSE``: Could not close the latch (hardware failure). h]j)}(hK``SDTX_ERR_FAILED_TO_CLOSE``: Could not close the latch (hardware failure).h](h)}(h``SDTX_ERR_FAILED_TO_CLOSE``h]hSDTX_ERR_FAILED_TO_CLOSE}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^ubh/: Could not close the latch (hardware failure).}(hj^hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMahjZubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMVhjhhubj)}(h>Other error codes in this context are reserved for future use.h]h>Other error codes in this context are reserved for future use.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMchjhhubj)}(hX1These codes can be classified via the ``SDTX_CATEGORY()`` macro to discern between critical hardware errors (``SDTX_CATEGORY_HARDWARE_ERROR``) or runtime errors (``SDTX_CATEGORY_RUNTIME_ERROR``), the latter of which may happen during normal operation if certain preconditions for detachment are not given.h](h&These codes can be classified via the }(hjhhhNhNubh)}(h``SDTX_CATEGORY()``h]hSDTX_CATEGORY()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh4 macro to discern between critical hardware errors (}(hjhhhNhNubh)}(h ``SDTX_CATEGORY_HARDWARE_ERROR``h]hSDTX_CATEGORY_HARDWARE_ERROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh) or runtime errors (}(hjhhhNhNubh)}(h``SDTX_CATEGORY_RUNTIME_ERROR``h]hSDTX_CATEGORY_RUNTIME_ERROR}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhp), the latter of which may happen during normal operation if certain preconditions for detachment are not given.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMehjhhubj )}(hhh](j)}(hDetachment Cancel Event Payloadh]hDetachment Cancel Event Payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMkhjubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hFieldh]hField}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMohjubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hTypeh]hType}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMphj'ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h Descriptionh]h Description}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMqhj>ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh]j )}(hhh](j )}(hhh]j)}(h ``reason``h]h)}(hjlh]hreason}(hjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]uh1jhhhMshjgubah}(h]h ]h"]h$]h&]uh1j hjdubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hjhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhjhhubah}(h]h ]h"]h$]h&]uh1jhhhMthjubah}(h]h ]h"]h$]h&]uh1j hjdubj )}(hhh]j)}(hReason for cancellation.h]hReason for cancellation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMuhjubah}(h]h ]h"]h$]h&]uh1j hjdubeh}(h]h ]h"]h$]h&]uh1j hjaubah}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id8ah ]h"]h$]h&]uh1j hjhhhNhNubeh}(h]jrah ]h"]sdtx_event_cancelah$]h&]uh1jhjchhhhhMOubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_EVENT_BASE_CONNECTION}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jjuh1jhjhhhhhMxubj)}(hX-Sent when the base connection state has changed, i.e. when the base has been attached, detached, or detachment has become infeasible due to low clipboard battery. The new state and, if a base is connected, ID of the base is provided as payload of type |sdtx_base_info| with its layout presented below:h](hSent when the base connection state has changed, i.e. when the base has been attached, detached, or detachment has become infeasible due to low clipboard battery. The new state and, if a base is connected, ID of the base is provided as payload of type }(hjhhhNhNubh)}(hjTh]h)}(hjTh]hstruct sdtx_base_info}(hjhhhNhNubah}(h]h ](hhj`eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypejm refexplicitrefwarn reftargetjpuh1hhhhKhjhhubh! with its layout presented below:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMzhjhhubj )}(hhh](j)}(h$Base-Connection-Change Event Payloadh]h$Base-Connection-Change Event Payload}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj5ubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjFubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjFubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjFubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hFieldh]hField}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjmubah}(h]h ]h"]h$]h&]uh1j hjjubj )}(hhh]j)}(hTypeh]hType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjjubj )}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjjubeh}(h]h ]h"]h$]h&]uh1j hjgubah}(h]h ]h"]h$]h&]uh1j hjFubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h ``state``h]h)}(hjh]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hjhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhjhhubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hBase connection state.h]hBase connection state.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh](j )}(hhh]j)}(h ``base_id``h]h)}(hj8h]hbase_id}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jhhhMhj3ubah}(h]h ]h"]h$]h&]uh1j hj0ubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hj]hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjZubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhjVhhubah}(h]h ]h"]h$]h&]uh1jhhhMhjSubah}(h]h ]h"]h$]h&]uh1j hj0ubj )}(hhh]j)}(h&Type of base connected (zero if none).h]h&Type of base connected (zero if none).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hj0ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jf hjFubeh}(h]h ]h"]h$]h&]colsKuh1j hj5ubeh}(h]id9ah ]h"]h$]h&]uh1j hjhhhNhNubj)}(h"Possible values for ``state`` are:h](hPossible values for }(hjhhhNhNubh)}(h ``state``h]hstate}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjhhubj)}(hhh](j)}(h``SDTX_BASE_DETACHED``,h]j)}(hjh](h)}(h``SDTX_BASE_DETACHED``h]hSDTX_BASE_DETACHED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh,}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``SDTX_BASE_ATTACHED``, andh]j)}(hjh](h)}(h``SDTX_BASE_ATTACHED``h]hSDTX_BASE_ATTACHED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, and}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``SDTX_DETACH_NOT_FEASIBLE``. h]j)}(h``SDTX_DETACH_NOT_FEASIBLE``.h](h)}(h``SDTX_DETACH_NOT_FEASIBLE``h]hSDTX_DETACH_NOT_FEASIBLE}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubh.}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjhhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]jah ]h"]sdtx_event_base_connectionah$]h&]uh1jhjchhhhhMxubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_EVENT_LATCH_STATUS}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]jjuh1jhjahhhhhMubj)}(hSent when the latch status has changed, i.e. when the latch has been opened, closed, or an error occurred. The current status is provided as payload:h]hSent when the latch status has changed, i.e. when the latch has been opened, closed, or an error occurred. The current status is provided as payload:}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjahhubj )}(hhh](j)}(h!Latch-Status-Change Event Payloadh]h!Latch-Status-Change Event Payload}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hFieldh]hField}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hTypeh]hType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjg )}(hhh]j )}(hhh](j )}(hhh]j)}(h ``status``h]h)}(hjh]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hjAhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhj>ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhj:hhubah}(h]h ]h"]h$]h&]uh1jhhhMhj7ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h Latch status.h]h Latch status.}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjfubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jf hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id10ah ]h"]h$]h&]uh1j hjahhhNhNubj)}(h#Possible values for ``status`` are:h](hPossible values for }(hjhhhNhNubh)}(h ``status``h]hstatus}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh are:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjahhubj)}(hhh](j)}(h``SDTX_LATCH_CLOSED``,h]j)}(hjh](h)}(h``SDTX_LATCH_CLOSED``h]hSDTX_LATCH_CLOSED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh,}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``SDTX_LATCH_OPENED``,h]j)}(hjh](h)}(h``SDTX_LATCH_OPENED``h]hSDTX_LATCH_OPENED}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh,}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``SDTX_ERR_FAILED_TO_OPEN``,h]j)}(hj h](h)}(h``SDTX_ERR_FAILED_TO_OPEN``h]hSDTX_ERR_FAILED_TO_OPEN}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh,}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h'``SDTX_ERR_FAILED_TO_REMAIN_OPEN``, andh]j)}(hj+ h](h)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hj0 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj- ubh, and}(hj- hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj) ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h``SDTX_ERR_FAILED_TO_CLOSE``. h]j)}(h``SDTX_ERR_FAILED_TO_CLOSE``.h](h)}(h``SDTX_ERR_FAILED_TO_CLOSE``h]hSDTX_ERR_FAILED_TO_CLOSE}(hjV hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR ubh.}(hjR hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjN ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjahhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hjz hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjahhubeh}(h]jah ]h"]sdtx_event_latch_statusah$]h&]uh1jhjchhhhhMubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_EVENT_DEVICE_MODE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]jjuh1jhj hhhhhMubj)}(hRSent when the device mode has changed. The new device mode is provided as payload:h]hRSent when the device mode has changed. The new device mode is provided as payload:}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj )}(hhh](j)}(h Device-Mode-Change Event Payloadh]h Device-Mode-Change Event Payload}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj ubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hFieldh]hField}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hTypeh]hType}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj!ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h Descriptionh]h Description}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj!ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hj ubjg )}(hhh]j )}(hhh](j )}(hhh]j)}(h``mode``h]h)}(hjJ!h]hmode}(hjL!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjH!ubah}(h]h ]h"]h$]h&]uh1jhhhMhjE!ubah}(h]h ]h"]h$]h&]uh1j hjB!ubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hjo!hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjl!ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhjh!hhubah}(h]h ]h"]h$]h&]uh1jhhhMhje!ubah}(h]h ]h"]h$]h&]uh1j hjB!ubj )}(hhh]j)}(hDevice operation mode.h]hDevice operation mode.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj!ubah}(h]h ]h"]h$]h&]uh1j hjB!ubeh}(h]h ]h"]h$]h&]uh1j hj?!ubah}(h]h ]h"]h$]h&]uh1jf hj ubeh}(h]h ]h"]h$]h&]colsKuh1j hj ubeh}(h]id11ah ]h"]h$]h&]uh1j hj hhhNhNubj)}(h!Possible values for ``mode`` are:h](hPossible values for }(hj!hhhNhNubh)}(h``mode``h]hmode}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!ubh are:}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj hhubj)}(hhh](j)}(h``SDTX_DEVICE_MODE_TABLET``,h]j)}(hj!h](h)}(h``SDTX_DEVICE_MODE_TABLET``h]hSDTX_DEVICE_MODE_TABLET}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!ubh,}(hj!hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj!ubah}(h]h ]h"]h$]h&]uh1jhj!hhhhhNubj)}(h ``SDTX_DEVICE_MODE_LAPTOP``, andh]j)}(hj"h](h)}(h``SDTX_DEVICE_MODE_LAPTOP``h]hSDTX_DEVICE_MODE_LAPTOP}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubh, and}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj "ubah}(h]h ]h"]h$]h&]uh1jhj!hhhhhNubj)}(h``SDTX_DEVICE_MODE_STUDIO``. h]j)}(h``SDTX_DEVICE_MODE_STUDIO``.h](h)}(h``SDTX_DEVICE_MODE_STUDIO``h]hSDTX_DEVICE_MODE_STUDIO}(hj:"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6"ubh.}(hj6"hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj2"ubah}(h]h ]h"]h$]h&]uh1jhj!hhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhj hhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hj^"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubjQ)}(h .. _ioctls:h]h}(h]h ]h"]h$]h&]jj$uh1jPhMhj hhhhubeh}(h]jah ]h"]sdtx_event_device_modeah$]h&]uh1jhjchhhhhMubeh}(h](jid1eh ]h"]eventsah$]eventsah&]uh1jhj hhhhhM referencedKexpect_referenced_by_name}j"jRsexpect_referenced_by_id}jjRsubj)}(hhh](j)}(hIOCTLsh]hIOCTLs}(hj"hhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhj"hhhhhMubj)}(h"The following IOCTLs are provided:h]h"The following IOCTLs are provided:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj"hhubj )}(hhh](j)}(hOverview of DTX IOCTLsh]hOverview of DTX IOCTLs}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj"ubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj"ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj"ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj"ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj"ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj"ubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hTypeh]hType}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubj )}(hhh]j)}(hNumberh]hNumber}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj #ubah}(h]h ]h"]h$]h&]uh1j hj"ubj )}(hhh]j)}(h Directionh]h Direction}(hj'#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj$#ubah}(h]h ]h"]h$]h&]uh1j hj"ubj )}(hhh]j)}(hNameh]hName}(hj>#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj;#ubah}(h]h ]h"]h$]h&]uh1j hj"ubj )}(hhh]j)}(h Descriptionh]h Description}(hjU#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjR#ubah}(h]h ]h"]h$]h&]uh1j hj"ubeh}(h]h ]h"]h$]h&]uh1j hj"ubah}(h]h ]h"]h$]h&]uh1j hj"ubjg )}(hhh](j )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj#h]h0xA5}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~#ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{#ubah}(h]h ]h"]h$]h&]uh1j hjx#ubj )}(hhh]j)}(h``0x21``h]h)}(hj#h]h0x21}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1jhhhMhj#ubah}(h]h ]h"]h$]h&]uh1j hjx#ubj )}(hhh]j)}(h``-``h]h)}(hj#h]h-}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1jhhhMhj#ubah}(h]h ]h"]h$]h&]uh1j hjx#ubj )}(hhh]j)}(h``EVENTS_ENABLE``h]h)}(hj#h]h EVENTS_ENABLE}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1jhhhMhj#ubah}(h]h ]h"]h$]h&]uh1j hjx#ubj )}(hhh]j)}(h.Enable events for the current file descriptor.h]h.Enable events for the current file descriptor.}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj#ubah}(h]h ]h"]h$]h&]uh1j hjx#ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj $h]h0xA5}(hj"$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``0x22``h]h)}(hj@$h]h0x22}(hjB$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj;$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``-``h]h)}(hj`$h]h-}(hjb$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj[$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``EVENTS_DISABLE``h]h)}(hj$h]hEVENTS_DISABLE}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h/Disable events for the current file descriptor.h]h/Disable events for the current file descriptor.}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj$h]h0xA5}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``0x23``h]h)}(hj$h]h0x23}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``-``h]h)}(hj%h]h-}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1jhhhMhj$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``LATCH_LOCK``h]h)}(hj %h]h LATCH_LOCK}(hj"%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj%ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(hLock the latch.h]hLock the latch.}(hj>%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj;%ubah}(h]h ]h"]h$]h&]uh1j hj$ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj`%h]h0xA5}(hjb%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj[%ubah}(h]h ]h"]h$]h&]uh1j hjX%ubj )}(hhh]j)}(h``0x24``h]h)}(hj%h]h0x24}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{%ubah}(h]h ]h"]h$]h&]uh1j hjX%ubj )}(hhh]j)}(h``-``h]h)}(hj%h]h-}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj%ubah}(h]h ]h"]h$]h&]uh1j hjX%ubj )}(hhh]j)}(h``LATCH_UNLOCK``h]h)}(hj%h]h LATCH_UNLOCK}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj%ubah}(h]h ]h"]h$]h&]uh1j hjX%ubj )}(hhh]j)}(hUnlock the latch.h]hUnlock the latch.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj%ubah}(h]h ]h"]h$]h&]uh1j hjX%ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj&h]h0xA5}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1jhhhMhj%ubah}(h]h ]h"]h$]h&]uh1j hj%ubj )}(hhh]j)}(h``0x25``h]h)}(hj &h]h0x25}(hj"&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]uh1j hj%ubj )}(hhh]j)}(h``-``h]h)}(hj@&h]h-}(hjB&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj;&ubah}(h]h ]h"]h$]h&]uh1j hj%ubj )}(hhh]j)}(h``LATCH_REQUEST``h]h)}(hj`&h]h LATCH_REQUEST}(hjb&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj[&ubah}(h]h ]h"]h$]h&]uh1j hj%ubj )}(hhh]j)}(hRequest clipboard detachment.h]hRequest clipboard detachment.}(hj~&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj{&ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj&h]h0xA5}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubj )}(hhh]j)}(h``0x26``h]h)}(hj&h]h0x26}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubj )}(hhh]j)}(h``-``h]h)}(hj&h]h-}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubj )}(hhh]j)}(h``LATCH_CONFIRM``h]h)}(hj'h]h LATCH_CONFIRM}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1jhhhMhj&ubah}(h]h ]h"]h$]h&]uh1j hj&ubj )}(hhh]j)}(h%Confirm clipboard detachment request.h]h%Confirm clipboard detachment request.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubah}(h]h ]h"]h$]h&]uh1j hj&ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj@'h]h0xA5}(hjB'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>'ubah}(h]h ]h"]h$]h&]uh1jhhhMhj;'ubah}(h]h ]h"]h$]h&]uh1j hj8'ubj )}(hhh]j)}(h``0x27``h]h)}(hj`'h]h0x27}(hjb'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^'ubah}(h]h ]h"]h$]h&]uh1jhhhMhj['ubah}(h]h ]h"]h$]h&]uh1j hj8'ubj )}(hhh]j)}(h``-``h]h)}(hj'h]h-}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~'ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{'ubah}(h]h ]h"]h$]h&]uh1j hj8'ubj )}(hhh]j)}(h``LATCH_HEARTBEAT``h]h)}(hj'h]hLATCH_HEARTBEAT}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubah}(h]h ]h"]h$]h&]uh1j hj8'ubj )}(hhh]j)}(hSend heartbeat signal to EC.h]hSend heartbeat signal to EC.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj'ubah}(h]h ]h"]h$]h&]uh1j hj8'ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj'h]h0xA5}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhhhM hj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubj )}(hhh]j)}(h``0x28``h]h)}(hj(h]h0x28}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubah}(h]h ]h"]h$]h&]uh1jhhhM hj'ubah}(h]h ]h"]h$]h&]uh1j hj'ubj )}(hhh]j)}(h``-``h]h)}(hj (h]h-}(hj"(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhhhM hj(ubah}(h]h ]h"]h$]h&]uh1j hj'ubj )}(hhh]j)}(h``LATCH_CANCEL``h]h)}(hj@(h]h LATCH_CANCEL}(hjB(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>(ubah}(h]h ]h"]h$]h&]uh1jhhhM hj;(ubah}(h]h ]h"]h$]h&]uh1j hj'ubj )}(hhh]j)}(hCancel detachment process.h]hCancel detachment process.}(hj^(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hj[(ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj(h]h0xA5}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~(ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{(ubah}(h]h ]h"]h$]h&]uh1j hjx(ubj )}(hhh]j)}(h``0x29``h]h)}(hj(h]h0x29}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]uh1j hjx(ubj )}(hhh]j)}(h``R``h]h)}(hj(h]hR}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]uh1j hjx(ubj )}(hhh]j)}(h``GET_BASE_INFO``h]h)}(hj(h]h GET_BASE_INFO}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]uh1j hjx(ubj )}(hhh]j)}(h(Get current base/connection information.h]h(Get current base/connection information.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj(ubah}(h]h ]h"]h$]h&]uh1j hjx(ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj )h]h0xA5}(hj")hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``0x2A``h]h)}(hj@)h]h0x2A}(hjB)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj;)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``R``h]h)}(hj`)h]hR}(hjb)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj[)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``GET_DEVICE_MODE``h]h)}(hj)h]hGET_DEVICE_MODE}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj{)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h"Get current device operation mode.h]h"Get current device operation mode.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1j hju#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hj)h]h0xA5}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``0x2B``h]h)}(hj)h]h0x2B}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``R``h]h)}(hj*h]hR}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1jhhhMhj)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``GET_LATCH_STATUS``h]h)}(hj *h]hGET_LATCH_STATUS}(hj"*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1jhhhMhj*ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h Get current device latch status.h]h Get current device latch status.}(hj>*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj;*ubah}(h]h ]h"]h$]h&]uh1j hj)ubeh}(h]h ]h"]h$]h&]uh1j hju#ubeh}(h]h ]h"]h$]h&]uh1jf hj"ubeh}(h]h ]h"]h$]h&]colsKuh1j hj"ubeh}(h]id12ah ]h"]h$]h&]uh1j hj"hhhNhNubj)}(hhh](j)}(hj9h]h)}(hj9h]hSDTX_IOCTL_EVENTS_ENABLE}(hjr*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo*ubah}(h]h ]h"]h$]h&]jjGuh1jhjl*hhhhhM"ubj)}(hDefined as ``_IO(0xA5, 0x22)``.h](h Defined as }(hj*hhhNhNubh)}(h``_IO(0xA5, 0x22)``h]h_IO(0xA5, 0x22)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM$hjl*hhubj)}(hEnable events for the current file descriptor. Events can be obtained by reading from the device, if enabled. Events are disabled by default.h]hEnable events for the current file descriptor. Events can be obtained by reading from the device, if enabled. Events are disabled by default.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM&hjl*hhubeh}(h]jMah ]h"]sdtx_ioctl_events_enableah$]h&]uh1jhj"hhhhhM"ubj)}(hhh](j)}(hjeh]h)}(hjeh]hSDTX_IOCTL_EVENTS_DISABLE}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]jjsuh1jhj*hhhhhM*ubj)}(hDefined as ``_IO(0xA5, 0x22)``.h](h Defined as }(hj*hhhNhNubh)}(h``_IO(0xA5, 0x22)``h]h_IO(0xA5, 0x22)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM,hj*hhubj)}(hDisable events for the current file descriptor. Events can be obtained by reading from the device, if enabled. Events are disabled by default.h]hDisable events for the current file descriptor. Events can be obtained by reading from the device, if enabled. Events are disabled by default.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM.hj*hhubeh}(h]jyah ]h"]sdtx_ioctl_events_disableah$]h&]uh1jhj"hhhhhM*ubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_LOCK}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj +ubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhhhM2ubj)}(hDefined as ``_IO(0xA5, 0x23)``.h](h Defined as }(hj!+hhhNhNubh)}(h``_IO(0xA5, 0x23)``h]h_IO(0xA5, 0x23)}(hj)+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!+ubh.}(hj!+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM4hj+hhubj)}(hLocks the latch, causing the detachment procedure to abort without opening the latch on timeout. The latch is unlocked by default. This command will be silently ignored if the latch is already locked.h]hLocks the latch, causing the detachment procedure to abort without opening the latch on timeout. The latch is unlocked by default. This command will be silently ignored if the latch is already locked.}(hjA+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM6hj+hhubeh}(h]jah ]h"]sdtx_ioctl_latch_lockah$]h&]uh1jhj"hhhhhM2ubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_UNLOCK}(hj\+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjY+ubah}(h]h ]h"]h$]h&]jjuh1jhjV+hhhhhM;ubj)}(hDefined as ``_IO(0xA5, 0x24)``.h](h Defined as }(hjo+hhhNhNubh)}(h``_IO(0xA5, 0x24)``h]h_IO(0xA5, 0x24)}(hjw+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo+ubh.}(hjo+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM=hjV+hhubj)}(hXUnlocks the latch, causing the detachment procedure to open the latch on timeout. The latch is unlocked by default. This command will not open the latch when sent during an ongoing detachment process. It will be silently ignored if the latch is already unlocked.h]hXUnlocks the latch, causing the detachment procedure to open the latch on timeout. The latch is unlocked by default. This command will not open the latch when sent during an ongoing detachment process. It will be silently ignored if the latch is already unlocked.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM?hjV+hhubeh}(h]jah ]h"]sdtx_ioctl_latch_unlockah$]h&]uh1jhj"hhhhhM;ubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_REQUEST}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubah}(h]h ]h"]h$]h&]jjuh1jhj+hhhhhMEubj)}(hDefined as ``_IO(0xA5, 0x25)``.h](h Defined as }(hj+hhhNhNubh)}(h``_IO(0xA5, 0x25)``h]h_IO(0xA5, 0x25)}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMGhj+hhubj)}(hGeneric latch request. Behavior depends on the context: If no detachment-process is active, detachment is requested. Otherwise the currently active detachment-process will be aborted.h]hGeneric latch request. Behavior depends on the context: If no detachment-process is active, detachment is requested. Otherwise the currently active detachment-process will be aborted.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMIhj+hhubj)}(hIf a detachment process is canceled by this operation, a generic detachment request event (``SDTX_EVENT_REQUEST``) will be sent.h](h[If a detachment process is canceled by this operation, a generic detachment request event (}(hj+hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+ubh) will be sent.}(hj+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMMhj+hhubj)}(h?This essentially behaves the same as a detachment button press.h]h?This essentially behaves the same as a detachment button press.}(hj ,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMPhj+hhubeh}(h]jah ]h"]sdtx_ioctl_latch_requestah$]h&]uh1jhj"hhhhhMEubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_CONFIRM}(hj&,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#,ubah}(h]h ]h"]h$]h&]jj#uh1jhj ,hhhhhMSubj)}(hDefined as ``_IO(0xA5, 0x26)``.h](h Defined as }(hj9,hhhNhNubh)}(h``_IO(0xA5, 0x26)``h]h_IO(0xA5, 0x26)}(hjA,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9,ubh.}(hj9,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMUhj ,hhubj)}(hXAcknowledges and confirms a latch request. If sent during an ongoing detachment process, this command causes the latch to be opened immediately. The latch will also be opened if it has been locked. In this case, the latch lock is reset to the unlocked state.h]hXAcknowledges and confirms a latch request. If sent during an ongoing detachment process, this command causes the latch to be opened immediately. The latch will also be opened if it has been locked. In this case, the latch lock is reset to the unlocked state.}(hjY,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMWhj ,hhubj)}(h`This command will be silently ignored if there is currently no detachment procedure in progress.h]h`This command will be silently ignored if there is currently no detachment procedure in progress.}(hjg,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM\hj ,hhubeh}(h]j)ah ]h"]sdtx_ioctl_latch_confirmah$]h&]uh1jhj"hhhhhMSubj)}(hhh](j)}(hjAh]h)}(hjAh]hSDTX_IOCTL_LATCH_HEARTBEAT}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]jjOuh1jhj|,hhhhhM`ubj)}(hDefined as ``_IO(0xA5, 0x27)``.h](h Defined as }(hj,hhhNhNubh)}(h``_IO(0xA5, 0x27)``h]h_IO(0xA5, 0x27)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMbhj|,hhubj)}(hSends a heartbeat, essentially resetting the detachment timeout. This command can be used to keep the detachment process alive while work required for the detachment to succeed is still in progress.h]hSends a heartbeat, essentially resetting the detachment timeout. This command can be used to keep the detachment process alive while work required for the detachment to succeed is still in progress.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMdhj|,hhubj)}(h`This command will be silently ignored if there is currently no detachment procedure in progress.h]h`This command will be silently ignored if there is currently no detachment procedure in progress.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhhj|,hhubeh}(h]jUah ]h"]sdtx_ioctl_latch_heartbeatah$]h&]uh1jhj"hhhhhM`ubj)}(hhh](j)}(hjmh]h)}(hjmh]hSDTX_IOCTL_LATCH_CANCEL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]jj{uh1jhj,hhhhhMlubj)}(hDefined as ``_IO(0xA5, 0x28)``.h](h Defined as }(hj,hhhNhNubh)}(h``_IO(0xA5, 0x28)``h]h_IO(0xA5, 0x28)}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubh.}(hj,hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMnhj,hhubj)}(hCancels detachment in progress (if any). If a detachment process is canceled by this operation, a generic detachment request event (``SDTX_EVENT_REQUEST``) will be sent.h](hCancels detachment in progress (if any). If a detachment process is canceled by this operation, a generic detachment request event (}(hj-hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubh) will be sent.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMphj,hhubj)}(h`This command will be silently ignored if there is currently no detachment procedure in progress.h]h`This command will be silently ignored if there is currently no detachment procedure in progress.}(hj1-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMthj,hhubeh}(h]jah ]h"]sdtx_ioctl_latch_cancelah$]h&]uh1jhj"hhhhhMlubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_BASE_INFO}(hjL-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI-ubah}(h]h ]h"]h$]h&]jjuh1jhjF-hhhhhMxubj)}(h7Defined as ``_IOR(0xA5, 0x29, struct sdtx_base_info)``.h](h Defined as }(hj_-hhhNhNubh)}(h+``_IOR(0xA5, 0x29, struct sdtx_base_info)``h]h'_IOR(0xA5, 0x29, struct sdtx_base_info)}(hjg-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_-ubh.}(hj_-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMzhjF-hhubj)}(hXGet the current base connection state (i.e. attached/detached) and the type of the base connected to the clipboard. This is command essentially provides a way to query the information provided by the base connection change event (``SDTX_EVENT_BASE_CONNECTION``).h](hGet the current base connection state (i.e. attached/detached) and the type of the base connected to the clipboard. This is command essentially provides a way to query the information provided by the base connection change event (}(hj-hhhNhNubh)}(h``SDTX_EVENT_BASE_CONNECTION``h]hSDTX_EVENT_BASE_CONNECTION}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubh).}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM|hjF-hhubj)}(h8Possible values for ``struct sdtx_base_info.state`` are:h](hPossible values for }(hj-hhhNhNubh)}(h``struct sdtx_base_info.state``h]hstruct sdtx_base_info.state}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubh are:}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjF-hhubj)}(hhh](j)}(h``SDTX_BASE_DETACHED``,h]j)}(hj-h](h)}(h``SDTX_BASE_DETACHED``h]hSDTX_BASE_DETACHED}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubh,}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-hhhhhNubj)}(h``SDTX_BASE_ATTACHED``, andh]j)}(hj-h](h)}(h``SDTX_BASE_ATTACHED``h]hSDTX_BASE_ATTACHED}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubh, and}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj-ubah}(h]h ]h"]h$]h&]uh1jhj-hhhhhNubj)}(h``SDTX_DETACH_NOT_FEASIBLE``. h]j)}(h``SDTX_DETACH_NOT_FEASIBLE``.h](h)}(h``SDTX_DETACH_NOT_FEASIBLE``h]hSDTX_DETACH_NOT_FEASIBLE}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh.}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj .ubah}(h]h ]h"]h$]h&]uh1jhj-hhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjF-hhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hj8.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjF-hhubeh}(h]jah ]h"]sdtx_ioctl_get_base_infoah$]h&]uh1jhj"hhhhhMxubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_DEVICE_MODE}(hjS.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP.ubah}(h]h ]h"]h$]h&]jjuh1jhjM.hhhhhMubj)}(h'Defined as ``_IOR(0xA5, 0x2A, __u16)``.h](h Defined as }(hjf.hhhNhNubh)}(h``_IOR(0xA5, 0x2A, __u16)``h]h_IOR(0xA5, 0x2A, __u16)}(hjn.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjf.ubh.}(hjf.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjM.hhubj)}(hReturns the device operation mode, indicating if and how the base is attached to the clipboard. This is command essentially provides a way to query the information provided by the device mode change event (``SDTX_EVENT_DEVICE_MODE``).h](hReturns the device operation mode, indicating if and how the base is attached to the clipboard. This is command essentially provides a way to query the information provided by the device mode change event (}(hj.hhhNhNubh)}(h``SDTX_EVENT_DEVICE_MODE``h]hSDTX_EVENT_DEVICE_MODE}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh).}(hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjM.hhubj)}(hReturned values are:h]hReturned values are:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjM.hhubj)}(hhh](j)}(h``SDTX_DEVICE_MODE_LAPTOP``h]j)}(hj.h]h)}(hj.h]hSDTX_DEVICE_MODE_LAPTOP}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.hhhhhNubj)}(h``SDTX_DEVICE_MODE_TABLET``h]j)}(hj.h]h)}(hj.h]hSDTX_DEVICE_MODE_TABLET}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.hhhhhNubj)}(h``SDTX_DEVICE_MODE_STUDIO`` h]j)}(h``SDTX_DEVICE_MODE_STUDIO``h]h)}(hj.h]hSDTX_DEVICE_MODE_STUDIO}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1jhhhMhj.ubah}(h]h ]h"]h$]h&]uh1jhj.hhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjM.hhubj)}(hMSee |sdtx_device_mode| for details. Other values are reserved for future use.h](hSee }(hj/hhhNhNubh)}(hj~h]h)}(hj~h]hstruct sdtx_device_mode}(hj)/hhhNhNubah}(h]h ](hhjeh"]h$]h&]uh1hhNhNhj&/ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypej refexplicitrefwarn reftargetjuh1hhhhKhj/hhubh7 for details. Other values are reserved for future use.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjM.hhubeh}(h]jah ]h"]sdtx_ioctl_get_device_modeah$]h&]uh1jhj"hhhhhMubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_LATCH_STATUS}(hjY/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV/ubah}(h]h ]h"]h$]h&]jjuh1jhjS/hhhhhMubj)}(h'Defined as ``_IOR(0xA5, 0x2B, __u16)``.h](h Defined as }(hjl/hhhNhNubh)}(h``_IOR(0xA5, 0x2B, __u16)``h]h_IOR(0xA5, 0x2B, __u16)}(hjt/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjl/ubh.}(hjl/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjS/hhubj)}(hGet the current latch status or (presumably) the last error encountered when trying to open/close the latch. This is command essentially provides a way to query the information provided by the latch status change event (``SDTX_EVENT_LATCH_STATUS``).h](hGet the current latch status or (presumably) the last error encountered when trying to open/close the latch. This is command essentially provides a way to query the information provided by the latch status change event (}(hj/hhhNhNubh)}(h``SDTX_EVENT_LATCH_STATUS``h]hSDTX_EVENT_LATCH_STATUS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh).}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjS/hhubj)}(hReturned values are:h]hReturned values are:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjS/hhubj)}(hhh](j)}(h``SDTX_LATCH_CLOSED``,h]j)}(hj/h](h)}(h``SDTX_LATCH_CLOSED``h]hSDTX_LATCH_CLOSED}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh,}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(h``SDTX_LATCH_OPENED``,h]j)}(hj/h](h)}(h``SDTX_LATCH_OPENED``h]hSDTX_LATCH_OPENED}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubh,}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(hD]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(h``SDTX_ERR_FAILED_TO_OPEN``,h]j)}(hj 0h](h)}(h``SDTX_ERR_FAILED_TO_OPEN``h]hSDTX_ERR_FAILED_TO_OPEN}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 0ubh,}(hj 0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(h'``SDTX_ERR_FAILED_TO_REMAIN_OPEN``, andh]j)}(hj.0h](h)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hj30hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj00ubh, and}(hj00hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj,0ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(h``SDTX_ERR_FAILED_TO_CLOSE``. h]j)}(h``SDTX_ERR_FAILED_TO_CLOSE``.h](h)}(h``SDTX_ERR_FAILED_TO_CLOSE``h]hSDTX_ERR_FAILED_TO_CLOSE}(hjY0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU0ubh.}(hjU0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjQ0ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhjS/hhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hj}0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjS/hhubeh}(h]jah ]h"]sdtx_ioctl_get_latch_statusah$]h&]uh1jhj"hhhhhMubeh}(h](j$id2eh ]h"]ioctlsah$]ioctlsah&]uh1jhj hhhhhMj"Kj"}j0jl"sj"}j$jl"subj)}(hhh](j)}(hA Note on Base IDsh]hA Note on Base IDs}(hj0hhhNhNubah}(h]h ]h"]h$]h&]jj-uh1jhj0hhhhhMubj)}(hXEBase types/IDs provided via ``SDTX_EVENT_BASE_CONNECTION`` or ``SDTX_IOCTL_GET_BASE_INFO`` are directly forwarded from the EC in the lower byte of the combined |__u16| value, with the driver storing the EC type from which this ID comes in the high byte (without this, base IDs over different types of ECs may be overlapping).h](hBase types/IDs provided via }(hj0hhhNhNubh)}(h``SDTX_EVENT_BASE_CONNECTION``h]hSDTX_EVENT_BASE_CONNECTION}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubh or }(hj0hhhNhNubh)}(h``SDTX_IOCTL_GET_BASE_INFO``h]hSDTX_IOCTL_GET_BASE_INFO}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubhF are directly forwarded from the EC in the lower byte of the combined }(hj0hhhNhNubh)}(hhh]h)}(hhh]h__u16}(hj0hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhj0ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypeh refexplicitrefwarn reftargethuh1hhhhKhj0hhubh value, with the driver storing the EC type from which this ID comes in the high byte (without this, base IDs over different types of ECs may be overlapping).}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0hhubj)}(h`The ``SDTX_DEVICE_TYPE()`` macro can be used to determine the EC device type. This can be one ofh](hThe }(hj1hhhNhNubh)}(h``SDTX_DEVICE_TYPE()``h]hSDTX_DEVICE_TYPE()}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubhF macro can be used to determine the EC device type. This can be one of}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0hhubj)}(hhh](j)}(hF``SDTX_DEVICE_TYPE_HID``, for Surface Aggregator Module over HID, and h]j)}(hE``SDTX_DEVICE_TYPE_HID``, for Surface Aggregator Module over HID, andh](h)}(h``SDTX_DEVICE_TYPE_HID``h]hSDTX_DEVICE_TYPE_HID}(hj+1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'1ubh-, for Surface Aggregator Module over HID, and}(hj'1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj#1ubah}(h]h ]h"]h$]h&]uh1jhj 1hhhhhNubj)}(hQ``SDTX_DEVICE_TYPE_SSH``, for Surface Aggregator Module over Surface Serial Hub. h]j)}(hP``SDTX_DEVICE_TYPE_SSH``, for Surface Aggregator Module over Surface Serial Hub.h](h)}(h``SDTX_DEVICE_TYPE_SSH``h]hSDTX_DEVICE_TYPE_SSH}(hjQ1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM1ubh8, for Surface Aggregator Module over Surface Serial Hub.}(hjM1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjI1ubah}(h]h ]h"]h$]h&]uh1jhj 1hhhhhNubeh}(h]h ]h"]h$]h&]j_j`uh1jhhhMhj0hhubj)}(hkNote that currently only the ``SSH`` type EC is supported, however ``HID`` type is reserved for future use.h](hNote that currently only the }(hju1hhhNhNubh)}(h``SSH``h]hSSH}(hj}1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju1ubh type EC is supported, however }(hju1hhhNhNubh)}(h``HID``h]hHID}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhju1ubh! type is reserved for future use.}(hju1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0hhubeh}(h]j3ah ]h"]a note on base idsah$]h&]uh1jhj hhhhhMubj)}(hhh](j)}(hStructures and Enumsh]hStructures and Enums}(hj1hhhNhNubah}(h]h ]h"]h$]h&]jjOuh1jhj1hhhhhMubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlesdtx_device_mode (C enum)c.sdtx_device_modehNtauh1j1hj1hhhNhNubhdesc)}(hhh](hdesc_signature)}(hsdtx_device_modeh]hdesc_signature_line)}(henum sdtx_device_modeh](hdesc_sig_keyword)}(henumh]henum}(hj1hhhNhNubah}(h]h ]kah"]h$]h&]uh1j1hj1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKubhdesc_sig_space)}(h h]h }(hj1hhhNhNubah}(h]h ]wah"]h$]h&]uh1j1hj1hhhj1hKubh desc_name)}(hsdtx_device_modeh]h desc_sig_name)}(hj1h]hsdtx_device_mode}(hj 2hhhNhNubah}(h]h ]nah"]h$]h&]uh1j 2hj2ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j2hj1hhhj1hKubeh}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j1sphinx_line_type declaratorhj1hhhj1hKubah}(h]j1ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j1hj1hKhj1hhubh desc_content)}(hhh]j)}(hQMode describing how (and if) the clipboard is attached to the base of the device.h]hQMode describing how (and if) the clipboard is attached to the base of the device.}(hj;2hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK>hj82hhubah}(h]h ]h"]h$]h&]uh1j62hj1hhhj1hKubeh}(h]h ](hߌenumeh"]h$]h&]domainhߌobjtypejS2desctypejS2noindex noindexentrynocontentsentryuh1j1hhhj1hNhNubh container)}(hX**Constants** ``SDTX_DEVICE_MODE_TABLET`` The clipboard is detached from the base and the device operates as tablet. ``SDTX_DEVICE_MODE_LAPTOP`` The clipboard is attached normally to the base and the device operates as laptop. ``SDTX_DEVICE_MODE_STUDIO`` The clipboard is attached to the base in reverse. The device operates as tablet with keyboard and touchpad deactivated, however, the base battery and, if present in the specific device model, dGPU are available to the system.h](j)}(h **Constants**h]j)}(hje2h]h Constants}(hjg2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjc2ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKBhj_2ubhdefinition_list)}(hhh](hdefinition_list_item)}(hg``SDTX_DEVICE_MODE_TABLET`` The clipboard is detached from the base and the device operates as tablet. h](hterm)}(h``SDTX_DEVICE_MODE_TABLET``h]h)}(hj2h]hSDTX_DEVICE_MODE_TABLET}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKFhj2ubh definition)}(hhh]j)}(hJThe clipboard is detached from the base and the device operates as tablet.h]hJThe clipboard is detached from the base and the device operates as tablet.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKEhj2ubah}(h]h ]h"]h$]h&]uh1j2hj2ubeh}(h]h ]h"]h$]h&]uh1j2hj2hKFhj}2ubj2)}(hn``SDTX_DEVICE_MODE_LAPTOP`` The clipboard is attached normally to the base and the device operates as laptop. h](j2)}(h``SDTX_DEVICE_MODE_LAPTOP``h]h)}(hj2h]hSDTX_DEVICE_MODE_LAPTOP}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKJhj2ubj2)}(hhh]j)}(hQThe clipboard is attached normally to the base and the device operates as laptop.h]hQThe clipboard is attached normally to the base and the device operates as laptop.}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKIhj2ubah}(h]h ]h"]h$]h&]uh1j2hj2ubeh}(h]h ]h"]h$]h&]uh1j2hj2hKJhj}2ubj2)}(h``SDTX_DEVICE_MODE_STUDIO`` The clipboard is attached to the base in reverse. The device operates as tablet with keyboard and touchpad deactivated, however, the base battery and, if present in the specific device model, dGPU are available to the system.h](j2)}(h``SDTX_DEVICE_MODE_STUDIO``h]h)}(hj3h]hSDTX_DEVICE_MODE_STUDIO}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKPhj2ubj2)}(hhh]j)}(hThe clipboard is attached to the base in reverse. The device operates as tablet with keyboard and touchpad deactivated, however, the base battery and, if present in the specific device model, dGPU are available to the system.h]hThe clipboard is attached to the base in reverse. The device operates as tablet with keyboard and touchpad deactivated, however, the base battery and, if present in the specific device model, dGPU are available to the system.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKMhj3ubah}(h]h ]h"]h$]h&]uh1j2hj2ubeh}(h]h ]h"]h$]h&]uh1j2hj3hKPhj}2ubeh}(h]h ]h"]h$]h&]uh1j{2hj_2ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]2hj1hhhNhNubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j1sdtx_event (C struct) c.sdtx_eventhNtauh1j1hj1hhhNhNubj1)}(hhh](j1)}(h sdtx_eventh]j1)}(hstruct sdtx_eventh](j1)}(hstructh]hstruct}(hjZ3hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hjV3hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKVubj1)}(h h]h }(hji3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hjV3hhhjh3hKVubj2)}(h sdtx_eventh]j 2)}(hjT3h]h sdtx_event}(hj{3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j 2hjw3ubah}(h]h ](j2j2eh"]h$]h&]hhuh1j2hjV3hhhjh3hKVubeh}(h]h ]h"]h$]h&]hhj(2uh1j1j)2j*2hjR3hhhjh3hKVubah}(h]jM3ah ](j.2j/2eh"]h$]h&]j32j42)j52huh1j1hjh3hKVhjO3hhubj72)}(hhh]j)}(h3Event provided by reading from the DTX device file.h]h3Event provided by reading from the DTX device file.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKQhj3hhubah}(h]h ]h"]h$]h&]uh1j62hjO3hhhjh3hKVubeh}(h]h ](hߌstructeh"]h$]h&]jW2hjX2j3jY2j3jZ2j[2j\2uh1j1hhhj1hNhNubj^2)}(hX$**Definition**:: struct sdtx_event { __u16 length; __u16 code; __u8 data[]; }; **Members** ``length`` Length of the event payload, in bytes. ``code`` Event code, detailing what type of event this is. ``data`` Payload of the event, containing **length** bytes.h](j)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubh:}(hj3hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKUhj3ubh literal_block)}(hIstruct sdtx_event { __u16 length; __u16 code; __u8 data[]; };h]hIstruct sdtx_event { __u16 length; __u16 code; __u8 data[]; };}hj3sbah}(h]h ]h"]h$]h&]hhuh1j3h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKWhj3ubj)}(h **Members**h]j)}(hj3h]hMembers}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK]hj3ubj|2)}(hhh](j2)}(h2``length`` Length of the event payload, in bytes. h](j2)}(h ``length``h]h)}(hj 4h]hlength}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 4ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKShj4ubj2)}(hhh]j)}(h&Length of the event payload, in bytes.h]h&Length of the event payload, in bytes.}(hj%4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!4hKShj"4ubah}(h]h ]h"]h$]h&]uh1j2hj4ubeh}(h]h ]h"]h$]h&]uh1j2hj!4hKShj4ubj2)}(h;``code`` Event code, detailing what type of event this is. h](j2)}(h``code``h]h)}(hjE4h]hcode}(hjG4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjC4ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKThj?4ubj2)}(hhh]j)}(h1Event code, detailing what type of event this is.h]h1Event code, detailing what type of event this is.}(hj^4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZ4hKThj[4ubah}(h]h ]h"]h$]h&]uh1j2hj?4ubeh}(h]h ]h"]h$]h&]uh1j2hjZ4hKThj4ubj2)}(h;``data`` Payload of the event, containing **length** bytes.h](j2)}(h``data``h]h)}(hj~4h]hdata}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|4ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKThjx4ubj2)}(hhh]j)}(h2Payload of the event, containing **length** bytes.h](h!Payload of the event, containing }(hj4hhhNhNubj)}(h **length**h]hlength}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubh bytes.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKUhj4ubah}(h]h ]h"]h$]h&]uh1j2hjx4ubeh}(h]h ]h"]h$]h&]uh1j2hj4hKThj4ubeh}(h]h ]h"]h$]h&]uh1j{2hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]2hj1hhhNhNubj)}(h**Description**h]j)}(hj4h]h Description}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKXhj1hhubj)}(hUSee :c:type:`enum sdtx_event_code ` for currently valid event codes.h](hSee }(hj4hhhNhNubh)}(h0:c:type:`enum sdtx_event_code `h]h)}(hj4h]henum sdtx_event_code}(hj4hhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhj4ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarn c:parent_keysphinx.domains.c LookupKey)}data]sbhsdtx_event_codeuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKUhj4ubh! for currently valid event codes.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj5hKUhj1hhubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j1sdtx_event_code (C enum)c.sdtx_event_codehNtauh1j1hj1hhhNhNubj1)}(hhh](j1)}(hsdtx_event_codeh]j1)}(henum sdtx_event_codeh](j1)}(hj1h]henum}(hj<5hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hj85hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKZubj1)}(h h]h }(hjJ5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hj85hhhjI5hKZubj2)}(hsdtx_event_codeh]j 2)}(hj65h]hsdtx_event_code}(hj\5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j 2hjX5ubah}(h]h ](j2j2eh"]h$]h&]hhuh1j2hj85hhhjI5hKZubeh}(h]h ]h"]h$]h&]hhj(2uh1j1j)2j*2hj45hhhjI5hKZubah}(h]j/5ah ](j.2j/2eh"]h$]h&]j32j42)j52huh1j1hjI5hKZhj15hhubj72)}(hhh]j)}(h%Code describing the type of an event.h]h%Code describing the type of an event.}(hj~5hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK_hj{5hhubah}(h]h ]h"]h$]h&]uh1j62hj15hhhjI5hKZubeh}(h]h ](hߌenumeh"]h$]h&]jW2hjX2j5jY2j5jZ2j[2j\2uh1j1hhhj1hNhNubj^2)}(hXP**Constants** ``SDTX_EVENT_REQUEST`` Detachment request event type. ``SDTX_EVENT_CANCEL`` Cancel detachment process event type. ``SDTX_EVENT_BASE_CONNECTION`` Base/clipboard connection change event type. ``SDTX_EVENT_LATCH_STATUS`` Latch status change event type. ``SDTX_EVENT_DEVICE_MODE`` Device mode change event type.h](j)}(h **Constants**h]j)}(hj5h]h Constants}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKchj5ubj|2)}(hhh](j2)}(h6``SDTX_EVENT_REQUEST`` Detachment request event type. h](j2)}(h``SDTX_EVENT_REQUEST``h]h)}(hj5h]hSDTX_EVENT_REQUEST}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKfhj5ubj2)}(hhh]j)}(hDetachment request event type.h]hDetachment request event type.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5hKfhj5ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1j2hj5hKfhj5ubj2)}(h<``SDTX_EVENT_CANCEL`` Cancel detachment process event type. h](j2)}(h``SDTX_EVENT_CANCEL``h]h)}(hj5h]hSDTX_EVENT_CANCEL}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKihj5ubj2)}(hhh]j)}(h%Cancel detachment process event type.h]h%Cancel detachment process event type.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 6hKihj6ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1j2hj 6hKihj5ubj2)}(hL``SDTX_EVENT_BASE_CONNECTION`` Base/clipboard connection change event type. h](j2)}(h``SDTX_EVENT_BASE_CONNECTION``h]h)}(hj16h]hSDTX_EVENT_BASE_CONNECTION}(hj36hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/6ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKlhj+6ubj2)}(hhh]j)}(h,Base/clipboard connection change event type.h]h,Base/clipboard connection change event type.}(hjJ6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF6hKlhjG6ubah}(h]h ]h"]h$]h&]uh1j2hj+6ubeh}(h]h ]h"]h$]h&]uh1j2hjF6hKlhj5ubj2)}(h<``SDTX_EVENT_LATCH_STATUS`` Latch status change event type. h](j2)}(h``SDTX_EVENT_LATCH_STATUS``h]h)}(hjj6h]hSDTX_EVENT_LATCH_STATUS}(hjl6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh6ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKohjd6ubj2)}(hhh]j)}(hLatch status change event type.h]hLatch status change event type.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6hKohj6ubah}(h]h ]h"]h$]h&]uh1j2hjd6ubeh}(h]h ]h"]h$]h&]uh1j2hj6hKohj5ubj2)}(h9``SDTX_EVENT_DEVICE_MODE`` Device mode change event type.h](j2)}(h``SDTX_EVENT_DEVICE_MODE``h]h)}(hj6h]hSDTX_EVENT_DEVICE_MODE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKqhj6ubj2)}(hhh]j)}(hDevice mode change event type.h]hDevice mode change event type.}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKrhj6ubah}(h]h ]h"]h$]h&]uh1j2hj6ubeh}(h]h ]h"]h$]h&]uh1j2hj6hKqhj5ubeh}(h]h ]h"]h$]h&]uh1j{2hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]2hj1hhhNhNubj)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKthj1hhubj)}(hUsed in :c:type:`struct sdtx_event ` to describe the type of the event. Further event codes are reserved for future use. Any event parser should be able to gracefully handle unknown events, i.e. by simply skipping them.h](hUsed in }(hj6hhhNhNubh)}(h(:c:type:`struct sdtx_event `h]h)}(hj7h]hstruct sdtx_event}(hj7hhhNhNubah}(h]h ](hhߌc-typeeh"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]refdoch refdomainhߌreftypetype refexplicitrefwarnj5j5h sdtx_eventuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKehj6ubh to describe the type of the event. Further event codes are reserved for future use. Any event parser should be able to gracefully handle unknown events, i.e. by simply skipping them.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj#7hKehj1hhubj)}(hdConsult the DTX user-space interface documentation for details regarding the individual event types.h]hdConsult the DTX user-space interface documentation for details regarding the individual event types.}(hj.7hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKihj1hhubj1)}(hhh]h}(h]h ]h"]h$]h&]entries](j1sdtx_base_info (C struct)c.sdtx_base_infohNtauh1j1hj1hhhNhNubj1)}(hhh](j1)}(hsdtx_base_infoh]j1)}(hstruct sdtx_base_infoh](j1)}(hj\3h]hstruct}(hjV7hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hjR7hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKoubj1)}(h h]h }(hjd7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hjR7hhhjc7hKoubj2)}(hsdtx_base_infoh]j 2)}(hjP7h]hsdtx_base_info}(hjv7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j 2hjr7ubah}(h]h ](j2j2eh"]h$]h&]hhuh1j2hjR7hhhjc7hKoubeh}(h]h ]h"]h$]h&]hhj(2uh1j1j)2j*2hjN7hhhjc7hKoubah}(h]jI7ah ](j.2j/2eh"]h$]h&]j32j42)j52huh1j1hjc7hKohjK7hhubj72)}(hhh]j)}(h0Describes if and what type of base is connected.h]h0Describes if and what type of base is connected.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKvhj7hhubah}(h]h ]h"]h$]h&]uh1j62hjK7hhhjc7hKoubeh}(h]h ](hߌstructeh"]h$]h&]jW2hjX2j7jY2j7jZ2j[2j\2uh1j1hhhj1hNhNubj^2)}(hX**Definition**:: struct sdtx_base_info { __u16 state; __u16 base_id; }; **Members** ``state`` The state of the connection. Valid values are ``SDTX_BASE_DETACHED``, ``SDTX_BASE_ATTACHED``, and ``SDTX_DETACH_NOT_FEASIBLE`` (in case a base is attached but low clipboard battery prevents detachment). Other values are currently reserved. ``base_id`` The type of base connected. Zero if no base is connected.h](j)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubh:}(hj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKzhj7ubj3)}(h>struct sdtx_base_info { __u16 state; __u16 base_id; };h]h>struct sdtx_base_info { __u16 state; __u16 base_id; };}hj7sbah}(h]h ]h"]h$]h&]hhuh1j3h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK|hj7ubj)}(h **Members**h]j)}(hj7h]hMembers}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj7ubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKhj7ubj|2)}(hhh](j2)}(h``state`` The state of the connection. Valid values are ``SDTX_BASE_DETACHED``, ``SDTX_BASE_ATTACHED``, and ``SDTX_DETACH_NOT_FEASIBLE`` (in case a base is attached but low clipboard battery prevents detachment). Other values are currently reserved. h](j2)}(h ``state``h]h)}(hj8h]hstate}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK{hj7ubj2)}(hhh]j)}(hThe state of the connection. Valid values are ``SDTX_BASE_DETACHED``, ``SDTX_BASE_ATTACHED``, and ``SDTX_DETACH_NOT_FEASIBLE`` (in case a base is attached but low clipboard battery prevents detachment). Other values are currently reserved.h](h.The state of the connection. Valid values are }(hj8hhhNhNubh)}(h``SDTX_BASE_DETACHED``h]hSDTX_BASE_DETACHED}(hj&8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, }(hj8hhhNhNubh)}(h``SDTX_BASE_ATTACHED``h]hSDTX_BASE_ATTACHED}(hj88hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubh, and }(hj8hhhNhNubh)}(h``SDTX_DETACH_NOT_FEASIBLE``h]hSDTX_DETACH_NOT_FEASIBLE}(hjJ8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8ubhq (in case a base is attached but low clipboard battery prevents detachment). Other values are currently reserved.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKxhj8ubah}(h]h ]h"]h$]h&]uh1j2hj7ubeh}(h]h ]h"]h$]h&]uh1j2hj8hK{hj7ubj2)}(hE``base_id`` The type of base connected. Zero if no base is connected.h](j2)}(h ``base_id``h]h)}(hju8h]hbase_id}(hjw8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs8ubah}(h]h ]h"]h$]h&]uh1j2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK{hjo8ubj2)}(hhh]j)}(h9The type of base connected. Zero if no base is connected.h]h9The type of base connected. Zero if no base is connected.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK|hj8ubah}(h]h ]h"]h$]h&]uh1j2hjo8ubeh}(h]h ]h"]h$]h&]uh1j2hj8hK{hj7ubeh}(h]h ]h"]h$]h&]uh1j{2hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1j]2hj1hhhNhNubeh}(h]jUah ]h"]structures and enumsah$]h&]uh1jhj hhhhhMubeh}(h]jah ]h"]"user-space interface documentationah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(h API Usersh]h API Users}(hj8hhhNhNubah}(h]h ]h"]h$]h&]jj}uh1jhj8hhhhhMubj)}(hkA user-space daemon utilizing this API can be found at https://github.com/linux-surface/surface-dtx-daemon.h](h7A user-space daemon utilizing this API can be found at }(hj8hhhNhNubj)}(h3https://github.com/linux-surface/surface-dtx-daemonh]h3https://github.com/linux-surface/surface-dtx-daemon}(hj8hhhNhNubah}(h]h ]h"]h$]h&]refurij8uh1jhj8ubh.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj8hhubeh}(h]jah ]h"] api usersah$]h&]uh1jhjhhhhhMubeh}(h]j,ah ]h"]6user-space dtx (clipboard detachment system) interfaceah$]h&]uh1jhhhhhhhK ubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(jN generatorN datestampN source_linkN source_urlN toc_backlinksj footnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerj&9error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}(hhj!hjKj$jujNjjxusubstitution_names}(__u16h sdtx_eventj!sdtx_event_codejKsdtx_base_infojusdtx_device_modejurefnames}refids}(j]jRaj$]jl"aunameids}(j9j,jjjejKj jmjjj jj8jj`jj"jjjFjjrj^jj jjz"jj0j$j*jMj+jyjS+jj+jj,jjy,j)j,jUjC-jjJ.jjP/jj0jj1j3j8jUj8ju nametypes}(j9jjej jj j8j`j"jjj^j jz"j0j*j+jS+j+j,jy,j,jC-jJ.jP/j0j1j8j8uh}(j,jjjjKjjmjhjjjjjj jj jjcj"jcjFjJjrjjjjjajj j$j"j0j"jMjl*jyj*jj+jjV+jj+j)j ,jUj|,jj,jjF-jjM.jjS/j3j0jUj1j1j1jM3jR3j/5j45jI7jN7jj8j j jjqj|jj=jj7jjjjj5jjj!j jg*j"jjjEj<jgj^jj}jjjjjjjjj@j-jljYjjjjjjjjjGj4jsj`jjjjjjj#jjOj<j{jhjjjjjjj-j$jOjFj}jtu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j49K(sRparse_messages](hsystem_message)}(hhh]j)}(h)Duplicate implicit target name: "events".h]h-Duplicate implicit target name: “events”.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]j"alevelKtypeINFOsourcehnjlineMuh1j9hjchhhhhMubj9)}(hhh]j)}(h)Duplicate implicit target name: "ioctls".h]h-Duplicate implicit target name: “ioctls”.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]j0alevelKtypej9sourcehnjlineMuh1j9hj"hhhhhMubetransform_messages](j9)}(hhh]j)}(hhh]h,Hyperlink target "events" is not referenced.}hj9sbah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]levelKtypej9sourcehnjlineMuh1j9ubj9)}(hhh]j)}(hhh]h,Hyperlink target "ioctls" is not referenced.}hj9sbah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]levelKtypej9sourcehnjlineMuh1j9ube transformerN include_log] decorationNhhub.