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]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)}(hhh]hstruct sdtx_event}(hhhhhNhNubah}(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)}(hjh]henum sdtx_event_code}(hjhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnh݌sdtx_event_codeuh1hhhhKhjubah}(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)}(hj@h]hstruct sdtx_base_info}(hjBhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnh݌sdtx_base_infouh1hhhhKhj:ubah}(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)}(hjjh]hstruct sdtx_device_mode}(hjlhhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhjhubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnh݌sdtx_device_modeuh1hhhhKhjdubah}(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}(hj hhhNhNubah}(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 nomenclatureuh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j )}(hhh]hDetachment Process}(hjJhhhNhNubah}(h]id15ah ]h"]h$]h&]refiddetachment-processuh1jhjGubah}(h]h ]h"]h$]h&]uh1jhjDubj)}(hhh](j)}(hhh]j)}(hhh]j )}(hhh]h Latch States}(hjihhhNhNubah}(h]id16ah ]h"]h$]h&]refid latch-statesuh1jhjfubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1jhj`ubj)}(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&]uh1jhj`ubeh}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]refideventsuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh](j)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjubah}(h]id21ah ]h"]h$]h&]refidsdtx-event-requestuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hjHhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjEubah}(h]id22ah ]h"]h$]h&]refidsdtx-event-canceluh1jhjBubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_EVENT_BASE_CONNECTION``h]hSDTX_EVENT_BASE_CONNECTION}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjqubah}(h]id23ah ]h"]h$]h&]refidsdtx-event-base-connectionuh1jhjnubah}(h]h ]h"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubj)}(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&]uh1jhjubeh}(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}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhj ubah}(h]id27ah ]h"]h$]h&]refidsdtx-ioctl-events-enableuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_IOCTL_EVENTS_DISABLE``h]hSDTX_IOCTL_EVENTS_DISABLE}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjLubah}(h]id28ah ]h"]h$]h&]refidsdtx-ioctl-events-disableuh1jhjIubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_IOCTL_LATCH_LOCK``h]hSDTX_IOCTL_LATCH_LOCK}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjxubah}(h]id29ah ]h"]h$]h&]refidsdtx-ioctl-latch-lockuh1jhjuubah}(h]h ]h"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubj)}(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&]uh1jhjubj)}(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-confirmuh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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-heartbeatuh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h)}(h``SDTX_IOCTL_LATCH_CANCEL``h]hSDTX_IOCTL_LATCH_CANCEL}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhNhNhjTubah}(h]id34ah ]h"]h$]h&]refidsdtx-ioctl-latch-canceluh1jhjQubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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-infouh1jhj}ubah}(h]h ]h"]h$]h&]uh1jhjzubah}(h]h ]h"]h$]h&]uh1jhjubj)}(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&]uh1jhjubj)}(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&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]hA Note on Base IDs}(hjhhhNhNubah}(h]id38ah ]h"]h$]h&]refida-note-on-base-idsuh1jhj ubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]hStructures and Enums}(hj2hhhNhNubah}(h]id39ah ]h"]h$]h&]refidstructures-and-enumsuh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjubj)}(hhh]j)}(hhh]j )}(hhh]h API Users}(hj`hhhNhNubah}(h]id40ah ]h"]h$]h&]refid api-usersuh1jhj]ubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1jhjubeh}(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&]jj1uh1jhjhhhhhKubj)}(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'hjubah}(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&]uh1jhj#ubh 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}(hj#hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhK+hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhK hjhhubeh}(h]j7ah ]h"] nomenclatureah$]h&]uh1jhjhhhhhKubj)}(hhh](j)}(hDetachment Processh]hDetachment Process}(hjWhhhNhNubah}(h]h ]h"]h$]h&]jjSuh1jhjThhhhhK2ubj)}(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.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhK4hjThhubj)}(hhh](j)}(h Latch Statesh]h Latch States}(hjvhhhNhNubah}(h]h ]h"]h$]h&]jjruh1jhjshhhhhK8ubj)}(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:hjshhubj)}(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>hjshhubeh}(h]jxah ]h"] latch statesah$]h&]uh1jhjThhhhhK8ubj)}(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}(hj hhhNhNubah}(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 }(hj"hhhNhNubj)}(h*detach*h]hdetach}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh3 button on the base of the device or executing the }(hj"hhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubh IOCTL. Following that:}(hj"hhhNhNubeh}(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 }(hj]hhhNhNubj)}(h*detach-request*h]hdetach-request}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh event (}(hj]hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubh), 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}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKPhjYubah}(h]h ]h"]h$]h&]uh1jhjVhhhhhNubj)}(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&]uh1jhjVhhhhhNubj)}(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}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh() detailing this with the cancel reason }(hj hhhNhNubh)}(h``SDTX_DETACH_TIMEDOUT``h]hSDTX_DETACH_TIMEDOUT}(hj. hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubh (see }(hj hhhNhNubh)}(h :ref:`events`h]hinline)}(hjB h]hevents}(hjF hhhNhNubah}(h]h ](hʌstdstd-refeh"]h$]h&]uh1jD hj@ ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainjP reftyperef refexplicitrefwarnh݌eventsuh1hhhhKbhj ubh for details).}(hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKbhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]jK-uh1jhhhK]hjubeh}(h]h ]h"]h$]h&]uh1jhjVhhhNhNubeh}(h]h ]h"]h$]h&]enumtypearabicprefixhsuffix.uh1jThjhhhhhKPubj)}(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.}(hj- 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 }(hjE hhhNhNubh)}(h``SDTX_IOCTL_LATCH_HEARTBEAT``h]hSDTX_IOCTL_LATCH_HEARTBEAT}(hjM hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE 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.}(hjE hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKzhjA 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 }(hjo hhhNhNubh)}(h``SDTX_IOCTL_LATCH_CANCEL``h]hSDTX_IOCTL_LATCH_CANCEL}(hjw hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo ubh5. This will abort the detachment process, similar to }(hjo hhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo ubh;, described above, or the button press, described below. A }(hjo hhhNhNubj)}(h*generic request*h]hgeneric request}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjo ubh event (}(hjo hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjo 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.}(hjo hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjk 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&]jKjx uh1jhhhKihjhhubj)}(h6See :ref:`ioctls` for more details on these responses.h](hSee }(hj hhhNhNubh)}(h :ref:`ioctls`h]jE )}(hj h]hioctls}(hj hhhNhNubah}(h]h ](hʌstdstd-refeh"]h$]h&]uh1jD hj ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainj reftyperef refexplicitrefwarnh݌ioctlsuh1hhhhKhj 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}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh event (}(hj hhhNhNubh)}(h``SDTX_EVENT_REQUEST``h]hSDTX_EVENT_REQUEST}(hj5 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}(hjG 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 (}(hj_ hhhNhNubh)}(h``SDTX_EVENT_CANCEL``h]hSDTX_EVENT_CANCEL}(hjg hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ ubh') with the corresponding cancel reason.}(hj_ hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhjhhubeh}(h]jah ]h"]detachment procedureah$]h&]uh1jhjThhhhhKFubeh}(h]jYah ]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}(hj2 hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj/ 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)}(hj_ h]hSTATUS}(hja hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj] ubah}(h]h ]h"]h$]h&]uh1jhhhKhjZ ubah}(h]h ]h"]h$]h&]uh1j hjW ubj )}(hhh]j)}(h ``0x0000``h]h)}(hj h]h0x0000}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj} ubah}(h]h ]h"]h$]h&]uh1jhhhKhjz ubah}(h]h ]h"]h$]h&]uh1j hjW 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 hjW ubeh}(h]h ]h"]h$]h&]uh1j hjT 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 hjT ubj )}(hhh](j )}(hhh]j)}(h``HARDWARE_ERROR``h]h)}(hj h]hHARDWARE_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 ``0x2000``h]h)}(hj? h]h0x2000}(hjA 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)}(hCritical hardware failures.h]hCritical hardware failures.}(hj] hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjZ ubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjT 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&]uh1jhhhKhjz ubah}(h]h ]h"]h$]h&]uh1j hjw 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 hjw 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 hjw ubeh}(h]h ]h"]h$]h&]uh1j hjT ubeh}(h]h ]h"]h$]h&]uh1jR 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()}(hj hhhNhNubah}(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}(hjhhhNhNubah}(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 }(hj/hhhNhNubh)}(h ``UNKNOWN``h]hUNKNOWN}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubhP category by the driver and may be implemented via their own code in the future.}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj)}(hCurrently used error codes are:h]hCurrently used error codes are:}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj hhubj )}(hhh](j)}(hOverview of Error Codes.h]hOverview of Error Codes.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj]ubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjnubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjnubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjnubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hjnubj )}(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 hjnubjS )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_DETACH_NOT_FEASIBLE``h]h)}(hjh]hSDTX_DETACH_NOT_FEASIBLE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``RUNTIME``h]h)}(hj2h]hRUNTIME}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhhhKhj-ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``0x1001``h]h)}(hjRh]h0x1001}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]uh1jhhhKhjMubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h5Detachment not feasible due to low clipboard battery.h]h5Detachment not feasible due to low clipboard battery.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjmubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(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)}(hjh]hSDTX_ERR_FAILED_TO_OPEN}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``HARDWARE``h]h)}(hj2h]hHARDWARE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhhhKhj-ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``0x2001``h]h)}(hjRh]h0x2001}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]uh1jhhhKhjMubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hFailed to open latch.h]hFailed to open latch.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjmubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(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)}(hjh]hSDTX_ERR_FAILED_TO_CLOSE}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``HARDWARE``h]h)}(hj2h]hHARDWARE}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhhhKhj-ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``0x2003``h]h)}(hjRh]h0x2003}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]uh1jhhhKhjMubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hFailed to close latch.h]hFailed to close latch.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjmubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jR hjnubeh}(h]h ]h"]h$]h&]colsKuh1j hj]ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj3ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjS )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_LATCH_CLOSED``h]h)}(hjah]hSDTX_LATCH_CLOSED}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_ubah}(h]h ]h"]h$]h&]uh1jhhhKhj\ubah}(h]h ]h"]h$]h&]uh1j hjYubj )}(hhh]j)}(h ``STATUS``h]h)}(hjh]hSTATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhj|ubah}(h]h ]h"]h$]h&]uh1j hjYubj )}(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 hjYubj )}(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 hjYubeh}(h]h ]h"]h$]h&]uh1j hjVubj )}(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)}(hj!h]h0x0001}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhKhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hLatch is open/has been opened.h]hLatch is open/has been opened.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhj<ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1jR 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.}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhKhjmubj )}(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]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}(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 hj~ubjS )}(hhh](j )}(hhh](j )}(hhh]j)}(h``SDTX_BASE_DETACHED``h]h)}(hj"h]hSDTX_BASE_DETACHED}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``STATUS``h]h)}(hjBh]hSTATUS}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@ubah}(h]h ]h"]h$]h&]uh1jhhhMhj=ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``0x0000``h]h)}(hjbh]h0x0000}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1jhhhMhj]ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(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 hj}ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubj )}(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 hjubeh}(h]h ]h"]h$]h&]uh1jR hj~ubeh}(h]h ]h"]h$]h&]colsKuh1j hjmubeh}(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.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj hhubhtarget)}(h .. _events:h]h}(h]h ]h"]h$]h&]jj uh1j<hMhj hhhhubeh}(h]jah ]h"]error codes and status valuesah$]h&]uh1jhj hhhhhKubj)}(hhh](j)}(hEventsh]hEvents}(hjRhhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhjOhhhhhMubj)}(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 }(hj`hhhNhNubh)}(h``SDTX_IOCTL_EVENTS_ENABLE``h]hSDTX_IOCTL_EVENTS_ENABLE}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubh3 first. All events follow the layout prescribed by }(hj`hhhNhNubh)}(hhh]h)}(hhh]hstruct sdtx_event}(hj}hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjzubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej refexplicitrefwarn reftargetjuh1hhhhKhj`hhubhK. Specific event types can be identified by their event code, described in }(hj`hhhNhNubh)}(hjh]h)}(hjh]henum sdtx_event_code}(hjhhhNhNubah}(h]h ](hhj"eh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypej/ refexplicitrefwarn reftargetj2uh1hhhhKhj`hhubh. 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.}(hj`hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhjOhhubj)}(h#Currently provided event types are:h]h#Currently provided event types are:}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjOhhubj )}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM%hjubah}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM'hj>ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hShort Descriptionh]hShort Description}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM(hjUubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hj ubah}(h]h ]h"]h$]h&]uh1j hjubjS )}(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*hj~ubah}(h]h ]h"]h$]h&]uh1j hj{ubj )}(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 hj{ubj )}(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 hj{ubj )}(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 hj{ubeh}(h]h ]h"]h$]h&]uh1j hjxubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_CANCEL``h]h)}(hjh]hSDTX_EVENT_CANCEL}(hj hhhNhNubah}(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&]uh1jhhhM0hj#ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h ``2`` bytesh](h)}(h``2``h]h2}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFubh bytes}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM1hjCubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(hEC canceled detachment process.h]hEC canceled detachment process.}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM2hjhubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjxubj )}(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 hjxubj )}(hhh](j )}(hhh]j)}(h``SDTX_EVENT_LATCH_STATUS``h]h)}(hjh]hSDTX_EVENT_LATCH_STATUS}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1jhhhM9hj ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h``4``h]h)}(hj2h]h4}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubah}(h]h ]h"]h$]h&]uh1jhhhM:hj-ubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(h ``2`` bytesh](h)}(h``2``h]h2}(hjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubh bytes}(hjPhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM;hjMubah}(h]h ]h"]h$]h&]uh1j hj ubj )}(hhh]j)}(hLatch status changed.h]hLatch status changed.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM<hjrubah}(h]h ]h"]h$]h&]uh1j hj ubeh}(h]h ]h"]h$]h&]uh1j hjxubj )}(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&]uh1jhhhMAhjubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjxubeh}(h]h ]h"]h$]h&]uh1jR hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id7ah ]h"]h$]h&]uh1j hjOhhhNhNubj)}(h!Individual events in more detail:h]h!Individual events in more detail:}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMChjOhhubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_EVENT_REQUEST}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj9ubah}(h]h ]h"]h$]h&]jj,uh1jhj6hhhhhMFubj)}(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 (}(hjOhhhNhNubh)}(h``SDTX_IOCTL_LATCH_REQUEST``h]hSDTX_IOCTL_LATCH_REQUEST}(hjWhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjOubh) being sent from user-space.}(hjOhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMHhj6hhubj)}(hDoes not have any payload.h]hDoes not have any payload.}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMLhj6hhubeh}(h]j2ah ]h"]sdtx_event_requestah$]h&]uh1jhjOhhhhhMFubj)}(hhh](j)}(hjJh]h)}(hjJh]hSDTX_EVENT_CANCEL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]jjXuh1jhjhhhhhMOubj)}(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&]uh1hhj$ubh3: Could not keep the latch open (hardware failure).}(hj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM^hj ubah}(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}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJubh/: Could not close the latch (hardware failure).}(hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMahjFubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jKjLuh1jhhhMVhjhhubj)}(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.}(hjrhhhNhNubah}(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 hjubj )}(hhh]j)}(hTypeh]hType}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMphjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h Descriptionh]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMqhj*ubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1j hjubjS )}(hhh]j )}(hhh](j )}(hhh]j)}(h ``reason``h]h)}(hjXh]hreason}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1jhhhMshjSubah}(h]h ]h"]h$]h&]uh1j hjPubj )}(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&]uh1jhhhMthjsubah}(h]h ]h"]h$]h&]uh1j hjPubj )}(hhh]j)}(hReason for cancellation.h]hReason for cancellation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMuhjubah}(h]h ]h"]h$]h&]uh1j hjPubeh}(h]h ]h"]h$]h&]uh1j hjMubah}(h]h ]h"]h$]h&]uh1jR hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjubeh}(h]id8ah ]h"]h$]h&]uh1j hjhhhNhNubeh}(h]j^ah ]h"]sdtx_event_cancelah$]h&]uh1jhjOhhhhhMOubj)}(hhh](j)}(hjvh]h)}(hjvh]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)}(hj@h]h)}(hj@h]hstruct sdtx_base_info}(hjhhhNhNubah}(h]h ](hhjLeh"]h$]h&]uh1hhNhNhjubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypejY refexplicitrefwarn reftargetj\uh1hhhhKhjhhubh! 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}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj!ubj )}(hhh](j )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj2ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj2ubj )}(hhh]h}(h]h ]h"]h$]h&]colwidthKuh1j hj2ubj )}(hhh]j )}(hhh](j )}(hhh]j)}(hFieldh]hField}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjYubah}(h]h ]h"]h$]h&]uh1j hjVubj )}(hhh]j)}(hTypeh]hType}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjpubah}(h]h ]h"]h$]h&]uh1j hjVubj )}(hhh]j)}(h Descriptionh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjVubeh}(h]h ]h"]h$]h&]uh1j hjSubah}(h]h ]h"]h$]h&]uh1j hj2ubjS )}(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)}(hj$h]hbase_id}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj"ubah}(h]h ]h"]h$]h&]uh1jhhhMhjubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hjIhhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjFubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypehڌ refexplicitrefwarn reftargethuh1hhhhKhjBhhubah}(h]h ]h"]h$]h&]uh1jhhhMhj?ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h&Type of base connected (zero if none).h]h&Type of base connected (zero if none).}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjnubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1jR hj2ubeh}(h]h ]h"]h$]h&]colsKuh1j hj!ubeh}(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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]jKjLuh1jhhhMhjhhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjhhubeh}(h]jah ]h"]sdtx_event_base_connectionah$]h&]uh1jhjOhhhhhMxubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_EVENT_LATCH_STATUS}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjPubah}(h]h ]h"]h$]h&]jjuh1jhjMhhhhhMubj)}(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:}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjMhhubj )}(hhh](j)}(h!Latch-Status-Change Event Payloadh]h!Latch-Status-Change Event Payload}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjtubj )}(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 hjubjS )}(hhh]j )}(hhh](j )}(hhh]j)}(h ``status``h]h)}(hjh]hstatus}(hj hhhNhNubah}(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}(hj-hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhj*ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypehڌ refexplicitrefwarn reftargethuh1hhhhKhj&hhubah}(h]h ]h"]h$]h&]uh1jhhhMhj#ubah}(h]h ]h"]h$]h&]uh1j hjubj )}(hhh]j)}(h Latch status.h]h Latch status.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjRubah}(h]h ]h"]h$]h&]uh1j hjubeh}(h]h ]h"]h$]h&]uh1j hjubah}(h]h ]h"]h$]h&]uh1jR hjubeh}(h]h ]h"]h$]h&]colsKuh1j hjtubeh}(h]id10ah ]h"]h$]h&]uh1j hjMhhhNhNubj)}(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&]uh1jhhhMhjMhhubj)}(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)}(hjh](h)}(h``SDTX_ERR_FAILED_TO_OPEN``h]hSDTX_ERR_FAILED_TO_OPEN}(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_REMAIN_OPEN``, andh]j)}(hj h](h)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hj 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}(hjB 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&]jKjLuh1jhhhMhjMhhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjMhhubeh}(h]jah ]h"]sdtx_event_latch_statusah$]h&]uh1jhjOhhhhhMubj)}(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 ubjS )}(hhh]j )}(hhh](j )}(hhh]j)}(h``mode``h]h)}(hj6!h]hmode}(hj8!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj4!ubah}(h]h ]h"]h$]h&]uh1jhhhMhj1!ubah}(h]h ]h"]h$]h&]uh1j hj.!ubj )}(hhh]j)}(h|__u16|h]h)}(hhh]h)}(hhh]h__u16}(hj[!hhhNhNubah}(h]h ](hhheh"]h$]h&]uh1hhNhNhjX!ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypehڌ refexplicitrefwarn reftargethuh1hhhhKhjT!hhubah}(h]h ]h"]h$]h&]uh1jhhhMhjQ!ubah}(h]h ]h"]h$]h&]uh1j hj.!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 hj.!ubeh}(h]h ]h"]h$]h&]uh1j hj+!ubah}(h]h ]h"]h$]h&]uh1jR 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&]uh1hhj""ubh.}(hj""hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj"ubah}(h]h ]h"]h$]h&]uh1jhj!hhhhhNubeh}(h]h ]h"]h$]h&]jKjLuh1jhhhMhj{ hhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hjJ"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj{ hhubj=)}(h .. _ioctls:h]h}(h]h ]h"]h$]h&]jjuh1j<hMhj{ hhhhubeh}(h]jah ]h"]sdtx_event_device_modeah$]h&]uh1jhjOhhhhhMubeh}(h](j id1eh ]h"]eventsah$]eventsah&]uh1jhj hhhhhM referencedKexpect_referenced_by_name}jn"j>sexpect_referenced_by_id}j j>subj)}(hhh](j)}(hIOCTLsh]hIOCTLs}(hjz"hhhNhNubah}(h]h ]h"]h$]h&]jj uh1jhjw"hhhhhMubj)}(h"The following IOCTLs are provided:h]h"The following IOCTLs are provided:}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjw"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}(hjA#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"ubjS )}(hhh](j )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hjl#h]h0xA5}(hjn#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj#ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg#ubah}(h]h ]h"]h$]h&]uh1j hjd#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 hjd#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 hjd#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 hjd#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 hjd#ubeh}(h]h ]h"]h$]h&]uh1j hja#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}(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)}(hjL$h]h-}(hjN$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ$ubah}(h]h ]h"]h$]h&]uh1jhhhMhjG$ubah}(h]h ]h"]h$]h&]uh1j hj$ubj )}(hhh]j)}(h``EVENTS_DISABLE``h]h)}(hjl$h]hEVENTS_DISABLE}(hjn$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj$ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg$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 hja#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 hja#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hjL%h]h0xA5}(hjN%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ%ubah}(h]h ]h"]h$]h&]uh1jhhhMhjG%ubah}(h]h ]h"]h$]h&]uh1j hjD%ubj )}(hhh]j)}(h``0x24``h]h)}(hjl%h]h0x24}(hjn%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj%ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg%ubah}(h]h ]h"]h$]h&]uh1j hjD%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 hjD%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 hjD%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 hjD%ubeh}(h]h ]h"]h$]h&]uh1j hja#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-}(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_REQUEST``h]h)}(hjL&h]h LATCH_REQUEST}(hjN&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ&ubah}(h]h ]h"]h$]h&]uh1jhhhMhjG&ubah}(h]h ]h"]h$]h&]uh1j hj%ubj )}(hhh]j)}(hRequest clipboard detachment.h]hRequest clipboard detachment.}(hjj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhjg&ubah}(h]h ]h"]h$]h&]uh1j hj%ubeh}(h]h ]h"]h$]h&]uh1j hja#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 hja#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``0x27``h]h)}(hjL'h]h0x27}(hjN'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ'ubah}(h]h ]h"]h$]h&]uh1jhhhMhjG'ubah}(h]h ]h"]h$]h&]uh1j hj$'ubj )}(hhh]j)}(h``-``h]h)}(hjl'h]h-}(hjn'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj'ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg'ubah}(h]h ]h"]h$]h&]uh1j hj$'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 hj$'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 hj$'ubeh}(h]h ]h"]h$]h&]uh1j hja#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}(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)}(hCancel detachment process.h]hCancel detachment process.}(hjJ(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM hjG(ubah}(h]h ]h"]h$]h&]uh1j hj'ubeh}(h]h ]h"]h$]h&]uh1j hja#ubj )}(hhh](j )}(hhh]j)}(h``0xA5``h]h)}(hjl(h]h0xA5}(hjn(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj(ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg(ubah}(h]h ]h"]h$]h&]uh1j hjd(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 hjd(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 hjd(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 hjd(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 hjd(ubeh}(h]h ]h"]h$]h&]uh1j hja#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}(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)}(hjL)h]hR}(hjN)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ)ubah}(h]h ]h"]h$]h&]uh1jhhhMhjG)ubah}(h]h ]h"]h$]h&]uh1j hj)ubj )}(hhh]j)}(h``GET_DEVICE_MODE``h]h)}(hjl)h]hGET_DEVICE_MODE}(hjn)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjj)ubah}(h]h ]h"]h$]h&]uh1jhhhMhjg)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 hja#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 hja#ubeh}(h]h ]h"]h$]h&]uh1jR hj"ubeh}(h]h ]h"]h$]h&]colsKuh1j hj"ubeh}(h]id12ah ]h"]h$]h&]uh1j hjw"hhhNhNubj)}(hhh](j)}(hj%h]h)}(hj%h]hSDTX_IOCTL_EVENTS_ENABLE}(hj^*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[*ubah}(h]h ]h"]h$]h&]jj3uh1jhjX*hhhhhM"ubj)}(hDefined as ``_IO(0xA5, 0x22)``.h](h Defined as }(hjq*hhhNhNubh)}(h``_IO(0xA5, 0x22)``h]h_IO(0xA5, 0x22)}(hjy*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjq*ubh.}(hjq*hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM$hjX*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&hjX*hhubeh}(h]j9ah ]h"]sdtx_ioctl_events_enableah$]h&]uh1jhjw"hhhhhM"ubj)}(hhh](j)}(hjQh]h)}(hjQh]hSDTX_IOCTL_EVENTS_DISABLE}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]jj_uh1jhj*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]jeah ]h"]sdtx_ioctl_events_disableah$]h&]uh1jhjw"hhhhhM*ubj)}(hhh](j)}(hj}h]h)}(hj}h]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.}(hj-+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM6hj*hhubeh}(h]jah ]h"]sdtx_ioctl_latch_lockah$]h&]uh1jhjw"hhhhhM2ubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_UNLOCK}(hjH+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE+ubah}(h]h ]h"]h$]h&]jjuh1jhjB+hhhhhM;ubj)}(hDefined as ``_IO(0xA5, 0x24)``.h](h Defined as }(hj[+hhhNhNubh)}(h``_IO(0xA5, 0x24)``h]h_IO(0xA5, 0x24)}(hjc+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj[+ubh.}(hj[+hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM=hjB+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?hjB+hhubeh}(h]jah ]h"]sdtx_ioctl_latch_unlockah$]h&]uh1jhjw"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&]uh1jhjw"hhhhhMEubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_LATCH_CONFIRM}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]jjuh1jhj ,hhhhhMSubj)}(hDefined as ``_IO(0xA5, 0x26)``.h](h Defined as }(hj%,hhhNhNubh)}(h``_IO(0xA5, 0x26)``h]h_IO(0xA5, 0x26)}(hj-,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%,ubh.}(hj%,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.}(hjE,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.}(hjS,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhM\hj ,hhubeh}(h]jah ]h"]sdtx_ioctl_latch_confirmah$]h&]uh1jhjw"hhhhhMSubj)}(hhh](j)}(hj-h]h)}(hj-h]hSDTX_IOCTL_LATCH_HEARTBEAT}(hjn,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk,ubah}(h]h ]h"]h$]h&]jj;uh1jhjh,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&]uh1jhhhMbhjh,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&]uh1jhhhMdhjh,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&]uh1jhhhMhhjh,hhubeh}(h]jAah ]h"]sdtx_ioctl_latch_heartbeatah$]h&]uh1jhjw"hhhhhM`ubj)}(hhh](j)}(hjYh]h)}(hjYh]hSDTX_IOCTL_LATCH_CANCEL}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj,ubah}(h]h ]h"]h$]h&]jjguh1jhj,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.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMthj,hhubeh}(h]jmah ]h"]sdtx_ioctl_latch_cancelah$]h&]uh1jhjw"hhhhhMlubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_BASE_INFO}(hj8-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5-ubah}(h]h ]h"]h$]h&]jjuh1jhj2-hhhhhMxubj)}(h7Defined as ``_IOR(0xA5, 0x29, struct sdtx_base_info)``.h](h Defined as }(hjK-hhhNhNubh)}(h+``_IOR(0xA5, 0x29, struct sdtx_base_info)``h]h'_IOR(0xA5, 0x29, struct sdtx_base_info)}(hjS-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK-ubh.}(hjK-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMzhj2-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 (}(hjk-hhhNhNubh)}(h``SDTX_EVENT_BASE_CONNECTION``h]hSDTX_EVENT_BASE_CONNECTION}(hjs-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk-ubh).}(hjk-hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhM|hj2-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&]uh1jhhhMhj2-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&]jKjLuh1jhhhMhj2-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&]uh1jhhhMhj2-hhubeh}(h]jah ]h"]sdtx_ioctl_get_base_infoah$]h&]uh1jhjw"hhhhhMxubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_DEVICE_MODE}(hj?.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<.ubah}(h]h ]h"]h$]h&]jjuh1jhj9.hhhhhMubj)}(h'Defined as ``_IOR(0xA5, 0x2A, __u16)``.h](h Defined as }(hjR.hhhNhNubh)}(h``_IOR(0xA5, 0x2A, __u16)``h]h_IOR(0xA5, 0x2A, __u16)}(hjZ.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjR.ubh.}(hjR.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj9.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 (}(hjr.hhhNhNubh)}(h``SDTX_EVENT_DEVICE_MODE``h]hSDTX_EVENT_DEVICE_MODE}(hjz.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjr.ubh).}(hjr.hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj9.hhubj)}(hReturned values are:h]hReturned values are:}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj9.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&]jKjLuh1jhhhMhj9.hhubj)}(hMSee |sdtx_device_mode| for details. Other values are reserved for future use.h](hSee }(hj /hhhNhNubh)}(hjjh]h)}(hjjh]hstruct sdtx_device_mode}(hj/hhhNhNubah}(h]h ](hhjveh"]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&]uh1jhhhMhj9.hhubeh}(h]jah ]h"]sdtx_ioctl_get_device_modeah$]h&]uh1jhjw"hhhhhMubj)}(hhh](j)}(hjh]h)}(hjh]hSDTX_IOCTL_GET_LATCH_STATUS}(hjE/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB/ubah}(h]h ]h"]h$]h&]jjuh1jhj?/hhhhhMubj)}(h'Defined as ``_IOR(0xA5, 0x2B, __u16)``.h](h Defined as }(hjX/hhhNhNubh)}(h``_IOR(0xA5, 0x2B, __u16)``h]h_IOR(0xA5, 0x2B, __u16)}(hj`/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX/ubh.}(hjX/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj?/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 (}(hjx/hhhNhNubh)}(h``SDTX_EVENT_LATCH_STATUS``h]hSDTX_EVENT_LATCH_STATUS}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjx/ubh).}(hjx/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj?/hhubj)}(hReturned values are:h]hReturned values are:}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj?/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}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(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/ubEh,}(hj/hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj/ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubj)}(h'``SDTX_ERR_FAILED_TO_REMAIN_OPEN``, andh]j)}(hj0h](h)}(h"``SDTX_ERR_FAILED_TO_REMAIN_OPEN``h]hSDTX_ERR_FAILED_TO_REMAIN_OPEN}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubh, and}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0ubah}(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}(hjE0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjA0ubh.}(hjA0hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj=0ubah}(h]h ]h"]h$]h&]uh1jhj/hhhhhNubeh}(h]h ]h"]h$]h&]jKjLuh1jhhhMhj?/hhubj)}(h)Other values are reserved for future use.h]h)Other values are reserved for future use.}(hji0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhhhMhj?/hhubeh}(h]jah ]h"]sdtx_ioctl_get_latch_statusah$]h&]uh1jhjw"hhhhhMubeh}(h](jid2eh ]h"]ioctlsah$]ioctlsah&]uh1jhj hhhhhMjr"Kjs"}j0jX"sju"}jjX"subj)}(hhh](j)}(hA Note on Base IDsh]hA Note on Base IDs}(hj0hhhNhNubah}(h]h ]h"]h$]h&]jjuh1jhj0hhhhhMubj)}(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 }(hj0hhhNhNubh)}(h``SDTX_DEVICE_TYPE()``h]hSDTX_DEVICE_TYPE()}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ubhF macro can be used to determine the EC device type. This can be one of}(hj0hhhNhNubeh}(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}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1ubh-, for Surface Aggregator Module over HID, and}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj1ubah}(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}(hj=1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj91ubh8, for Surface Aggregator Module over Surface Serial Hub.}(hj91hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj51ubah}(h]h ]h"]h$]h&]uh1jhj 1hhhhhNubeh}(h]h ]h"]h$]h&]jKjLuh1jhhhMhj0hhubj)}(hkNote that currently only the ``SSH`` type EC is supported, however ``HID`` type is reserved for future use.h](hNote that currently only the }(hja1hhhNhNubh)}(h``SSH``h]hSSH}(hji1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja1ubh type EC is supported, however }(hja1hhhNhNubh)}(h``HID``h]hHID}(hj{1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhja1ubh! type is reserved for future use.}(hja1hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhhhMhj0hhubeh}(h]jah ]h"]a note on base idsah$]h&]uh1jhj hhhhhMubj)}(hhh](j)}(hStructures and Enumsh]hStructures and Enums}(hj1hhhNhNubah}(h]h ]h"]h$]h&]jj;uh1jhj1hhhhhMubhindex)}(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}(hj1hhhNhNubah}(h]h ]nah"]h$]h&]uh1j1hj1ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j1hj1hhhj1hKubeh}(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>hj$2hhubah}(h]h ]h"]h$]h&]uh1j"2hj1hhhj1hKubeh}(h]h ](hˌenumeh"]h$]h&]domainhˌobjtypej?2desctypej?2noindex 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)}(hjQ2h]h Constants}(hjS2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjO2ubah}(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.hhKBhjK2ubhdefinition_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)}(hjv2h]hSDTX_DEVICE_MODE_TABLET}(hjx2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjt2ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKFhjn2ubh 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&]uh1j2hjn2ubeh}(h]h ]h"]h$]h&]uh1jl2hj2hKFhji2ubjm2)}(hn``SDTX_DEVICE_MODE_LAPTOP`` The clipboard is attached normally to the base and the device operates as laptop. h](js2)}(h``SDTX_DEVICE_MODE_LAPTOP``h]h)}(hj2h]hSDTX_DEVICE_MODE_LAPTOP}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1jr2h/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&]uh1jl2hj2hKJhji2ubjm2)}(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](js2)}(h``SDTX_DEVICE_MODE_STUDIO``h]h)}(hj2h]hSDTX_DEVICE_MODE_STUDIO}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1jr2h/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&]uh1jl2hj3hKPhji2ubeh}(h]h ]h"]h$]h&]uh1jg2hjK2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jI2hj1hhhNhNubj1)}(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}(hjF3hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hjB3hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKWubj1)}(h h]h }(hjU3hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hjB3hhhjT3hKWubj1)}(h sdtx_eventh]j1)}(hj@3h]h sdtx_event}(hjg3hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hjc3ubah}(h]h ](j 2j 2eh"]h$]h&]hhuh1j1hjB3hhhjT3hKWubeh}(h]h ]h"]h$]h&]hhj2uh1j1j2j2hj>3hhhjT3hKWubah}(h]j93ah ](j2j2eh"]h$]h&]j2j 2)j!2huh1j1hjT3hKWhj;3hhubj#2)}(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&]uh1j"2hj;3hhhjT3hKWubeh}(h]h ](hˌstructeh"]h$]h&]jC2hjD2j3jE2j3jF2jG2jH2uh1j1hhhj1hNhNubjJ2)}(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]hj3ubjh2)}(hhh](jm2)}(h2``length`` Length of the event payload, in bytes. h](js2)}(h ``length``h]h)}(hj3h]hlength}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKShj3ubj2)}(hhh]j)}(h&Length of the event payload, in bytes.h]h&Length of the event payload, in bytes.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 4hKShj4ubah}(h]h ]h"]h$]h&]uh1j2hj3ubeh}(h]h ]h"]h$]h&]uh1jl2hj 4hKShj3ubjm2)}(h;``code`` Event code, detailing what type of event this is. h](js2)}(h``code``h]h)}(hj14h]hcode}(hj34hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/4ubah}(h]h ]h"]h$]h&]uh1jr2h/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.}(hjJ4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjF4hKThjG4ubah}(h]h ]h"]h$]h&]uh1j2hj+4ubeh}(h]h ]h"]h$]h&]uh1jl2hjF4hKThj3ubjm2)}(h;``data`` Payload of the event, containing **length** bytes.h](js2)}(h``data``h]h)}(hjj4h]hdata}(hjl4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh4ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKThjd4ubj2)}(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&]uh1j2hjd4ubeh}(h]h ]h"]h$]h&]uh1jl2hj4hKThj3ubeh}(h]h ]h"]h$]h&]uh1jg2hj3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jI2hj1hhhNhNubj)}(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]sbh݌sdtx_event_codeuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKVhj4ubh! for currently valid event codes.}(hj4hhhNhNubeh}(h]h ]h"]h$]h&]uh1jhj5hKVhj1hhubj1)}(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&]uh1j1hj$5hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK[ubj1)}(h h]h }(hj65hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hj$5hhhj55hK[ubj1)}(hsdtx_event_codeh]j1)}(hj"5h]hsdtx_event_code}(hjH5hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hjD5ubah}(h]h ](j 2j 2eh"]h$]h&]hhuh1j1hj$5hhhj55hK[ubeh}(h]h ]h"]h$]h&]hhj2uh1j1j2j2hj 5hhhj55hK[ubah}(h]j5ah ](j2j2eh"]h$]h&]j2j 2)j!2huh1j1hj55hK[hj5hhubj#2)}(hhh]j)}(h%Code describing the type of an event.h]h%Code describing the type of an event.}(hjj5hhhNhNubah}(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_hjg5hhubah}(h]h ]h"]h$]h&]uh1j"2hj5hhhj55hK[ubeh}(h]h ](hˌenumeh"]h$]h&]jC2hjD2j5jE2j5jF2jG2jH2uh1j1hhhj1hNhNubjJ2)}(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.hhKchj5ubjh2)}(hhh](jm2)}(h6``SDTX_EVENT_REQUEST`` Detachment request event type. h](js2)}(h``SDTX_EVENT_REQUEST``h]h)}(hj5h]hSDTX_EVENT_REQUEST}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jr2h/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&]uh1jl2hj5hKfhj5ubjm2)}(h<``SDTX_EVENT_CANCEL`` Cancel detachment process event type. h](js2)}(h``SDTX_EVENT_CANCEL``h]h)}(hj5h]hSDTX_EVENT_CANCEL}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1jr2h/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.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5hKihj5ubah}(h]h ]h"]h$]h&]uh1j2hj5ubeh}(h]h ]h"]h$]h&]uh1jl2hj5hKihj5ubjm2)}(hL``SDTX_EVENT_BASE_CONNECTION`` Base/clipboard connection change event type. h](js2)}(h``SDTX_EVENT_BASE_CONNECTION``h]h)}(hj6h]hSDTX_EVENT_BASE_CONNECTION}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKlhj6ubj2)}(hhh]j)}(h,Base/clipboard connection change event type.h]h,Base/clipboard connection change event type.}(hj66hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj26hKlhj36ubah}(h]h ]h"]h$]h&]uh1j2hj6ubeh}(h]h ]h"]h$]h&]uh1jl2hj26hKlhj5ubjm2)}(h<``SDTX_EVENT_LATCH_STATUS`` Latch status change event type. h](js2)}(h``SDTX_EVENT_LATCH_STATUS``h]h)}(hjV6h]hSDTX_EVENT_LATCH_STATUS}(hjX6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT6ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKohjP6ubj2)}(hhh]j)}(hLatch status change event type.h]hLatch status change event type.}(hjo6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjk6hKohjl6ubah}(h]h ]h"]h$]h&]uh1j2hjP6ubeh}(h]h ]h"]h$]h&]uh1jl2hjk6hKohj5ubjm2)}(h9``SDTX_EVENT_DEVICE_MODE`` Device mode change event type.h](js2)}(h``SDTX_EVENT_DEVICE_MODE``h]h)}(hj6h]hSDTX_EVENT_DEVICE_MODE}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1jr2h/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&]uh1jl2hj6hKqhj5ubeh}(h]h ]h"]h$]h&]uh1jg2hj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jI2hj1hhhNhNubj)}(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.hhKuhj1hhubj)}(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)}(hj6h]hstruct sdtx_event}(hj6hhhNhNubah}(h]h ](hhˌc-typeeh"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]refdoch׌ refdomainhˌreftypetype refexplicitrefwarnj4j4h݌ sdtx_eventuh1hh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKfhj6ubh 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&]uh1jhj7hKfhj1hhubj)}(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.}(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.hhKjhj1hhubj1)}(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)}(hjH3h]hstruct}(hjB7hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hj>7hhh/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhKpubj1)}(h h]h }(hjP7hhhNhNubah}(h]h ]j1ah"]h$]h&]uh1j1hj>7hhhjO7hKpubj1)}(hsdtx_base_infoh]j1)}(hj<7h]hsdtx_base_info}(hjb7hhhNhNubah}(h]h ]j2ah"]h$]h&]uh1j1hj^7ubah}(h]h ](j 2j 2eh"]h$]h&]hhuh1j1hj>7hhhjO7hKpubeh}(h]h ]h"]h$]h&]hhj2uh1j1j2j2hj:7hhhjO7hKpubah}(h]j57ah ](j2j2eh"]h$]h&]j2j 2)j!2huh1j1hjO7hKphj77hhubj#2)}(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&]uh1j"2hj77hhhjO7hKpubeh}(h]h ](hˌstructeh"]h$]h&]jC2hjD2j7jE2j7jF2jG2jH2uh1j1hhhj1hNhNubjJ2)}(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.hhKhj7ubjh2)}(hhh](jm2)}(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](js2)}(h ``state``h]h)}(hj7h]hstate}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1jr2h/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 }(hj 8hhhNhNubh)}(h``SDTX_BASE_DETACHED``h]hSDTX_BASE_DETACHED}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8ubh, }(hj 8hhhNhNubh)}(h``SDTX_BASE_ATTACHED``h]hSDTX_BASE_ATTACHED}(hj$8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8ubh, and }(hj 8hhhNhNubh)}(h``SDTX_DETACH_NOT_FEASIBLE``h]hSDTX_DETACH_NOT_FEASIBLE}(hj68hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 8ubhq (in case a base is attached but low clipboard battery prevents detachment). Other values are currently reserved.}(hj 8hhhNhNubeh}(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&]uh1jl2hj8hK{hj7ubjm2)}(hE``base_id`` The type of base connected. Zero if no base is connected.h](js2)}(h ``base_id``h]h)}(hja8h]hbase_id}(hjc8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_8ubah}(h]h ]h"]h$]h&]uh1jr2h/var/lib/git/docbuild/linux/Documentation/driver-api/surface_aggregator/clients/dtx:712: ./include/uapi/linux/surface_aggregator/dtx.hhK{hj[8ubj2)}(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.}(hjz8hhhNhNubah}(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|hjw8ubah}(h]h ]h"]h$]h&]uh1j2hj[8ubeh}(h]h ]h"]h$]h&]uh1jl2hjv8hK{hj7ubeh}(h]h ]h"]h$]h&]uh1jg2hj7ubeh}(h]h ] kernelindentah"]h$]h&]uh1jI2hj1hhhNhNubeh}(h]jAah ]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&]jjiuh1jhj8hhhhhMubj)}(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]joah ]h"] api usersah$]h&]uh1jhjhhhhhMubeh}(h]jah ]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_handlerj9error_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _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 hj7jjaj:jjdusubstitution_names}(__u16h sdtx_eventj sdtx_event_codej7sdtx_base_infojasdtx_device_modejurefnames}refids}(j ]j>aj]jX"aunameids}(j8jjjjQj7j jYjjxj jj8jjLjjn"j jj2jj^jJjjx jjf"jj0jj*j9j*jej?+jj+jj ,jje,jj,jAj/-jmj6.jj3j5j 5j57j:7joj8j j jj]jhjj)jmj#jjjjj!j~jtj!j jS*j"jj j1j(jSjJjrjijjjjjjjjj,jjXjEjjqjjjjj jj3j j_jLjjxjjjjjjj;j(jgjTjjjjjjjjj;j2jij`u footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}j 9K(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&]uh1jhj}9ubah}(h]h ]h"]h$]h&]jk"alevelKtypeINFOsourcehlineMuh1j{9hjOhhhhhMubj|9)}(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&]j0alevelKtypej9sourcehlineMuh1j{9hjw"hhhhhMubetransform_messages](j|9)}(hhh]j)}(hhh]h,Hyperlink target "events" is not referenced.}hj9sbah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]levelKtypej9sourcehlineMuh1j{9ubj|9)}(hhh]j)}(hhh]h,Hyperlink target "ioctls" is not referenced.}hj9sbah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]levelKtypej9sourcehlineMuh1j{9ube transformerN include_log] decorationNhhub.