当前位置: 首页 > news >正文

2.输入子系统学习-multi-touch-protocol-2023.02

Documentation/input/multi-touch-protocol.txt(百度翻译)

Multi-touch (MT) Protocol -------------------------
    Copyright (C) 2009-2010    Henrik Rydberg <rydberg@euromail.se>

一、Introduction 
 ------------
 In order to utilize the full power of the new multi-touch and multi-user devices, a way to report detailed data from multiple contacts, i.e., objects in direct contact with the device surface, is needed.  This document describes the multi-touch (MT) protocol which allows kernel drivers to report details for an arbitrary number of contacts.
 为了充分利用新的多点触摸和多用户设备的功能,需要一种报告来自多个触点(即,与设备表面直接接触的对象)的详细数据的方法。本文档描述了多点触摸(MT)协议,该协议允许内核驱动程序报告任意数量触点的详细信息。
 The protocol is divided into two types, depending on the capabilities of the hardware. For devices handling anonymous contacts (type A), the protocol describes how to send the raw data for all contacts to the receiver. For devices capable of tracking identifiable contacts (type B), the protocol describes how to send updates for individual contacts via event slots.
根据硬件的功能,协议分为两种类型。对于处理匿名触点(类型A)的设备,协议描述了如何将所有触点的原始数据发送给接收方。对于能够跟踪可识别触点(类型B)的设备,协议描述了如何通过事件槽发送单个触点的更新。
 

二、Protocol Usage  //协议使用方法 
 --------------
 Contact details are sent sequentially as separate packets of ABS_MT events. Only the ABS_MT events are recognized as part of a contact packet. Since these events are ignored by current single-touch (ST) applications, the MT protocol can be implemented on top of the ST protocol in an existing driver.
 触点详细信息作为ABS_MT事件的单独数据包依次发送。只有ABS_MT事件被识别为触点数据包的一部分。由于当前的单触(ST)应用程序忽略了这些事件,因此MT协议可以在现有驱动程序中的ST协议之上实现。
 Drivers for type A devices separate contact packets by calling input_mt_sync() at the end of each packet. This generates a SYN_MT_REPORT event, which instructs the receiver to accept the data for the current contact and prepare to receive another.
 A类设备的驱动程序通过在每个数据包的末尾调用input_mt_sync()来分离触点数据包。这将生成SYN_MT_REPORT事件,该事件指示接收方接受当前触点的数据并准备接收另一个触点。
 Drivers for type B devices separate contact packets by calling input_mt_slot(), with a slot as argument, at the beginning of each packet. This generates an ABS_MT_SLOT event, which instructs the receiver to prepare for updates of the given slot.
 B类设备的驱动程序通过调用input_mt_slot()(在每个数据包的开头,以slot作为参数)来分离触点数据包。这将生成ABS_MT_SLOT事件,该事件指示接收器准备更新给定时隙。
 All drivers mark the end of a multi-touch transfer by calling the usual input_sync() function. This instructs the receiver to act upon events accumulated since last EV_SYN/SYN_REPORT and prepare to receive a new set of events/packets.
 所有驱动程序都通过调用通常的input_sync()函数来标记多点触摸传输的结束。这指示接收器对自上次EV_SYN/SYN_REPORT 以来累积的事件采取行动,并准备接收一组新的事件/分组。
 The main difference between the stateless type A protocol and the stateful type B slot protocol lies in the usage of identifiable contacts to reduce the amount of data sent to userspace. The slot protocol requires the use of the ABS_MT_TRACKING_ID, either provided by the hardware or computed from the raw data [5].
 无状态类型A协议和有状态类型B插槽协议之间的主要区别在于使用可识别的触点来减少发送到用户空间的数据量。时隙协议要求使用ABS_MT_TRACKING_ID,由硬件提供或根据原始数据计算[5]。
 For type A devices, the kernel driver should generate an arbitrary enumeration of the full set of anonymous contacts currently on the surface. The order in which the packets appear in the event stream is not important.  Event filtering and finger tracking is left to user space [3].
 对于类型A设备,内核驱动程序应该生成一个当前在表面上的所有匿名触点的任意枚举。数据包在事件流中出现的顺序并不重要。事件过滤和手指跟踪留给用户空间[3]。
 For type B devices, the kernel driver should associate a slot with each identified contact, and use that slot to propagate changes for the contact. Creation, replacement and destruction of contacts is achieved by modifying the ABS_MT_TRACKING_ID of the associated slot.  A non-negative tracking id is interpreted as a contact, and the value -1 denotes an unused slot.  A tracking id not previously present is considered new, and a tracking id no longer present is considered removed.  Since only changes are propagated, the full state of each initiated contact has to reside in the receiving end.  Upon receiving an MT event, one simply updates the appropriate attribute of the current slot.
 对于B类设备,内核驱动程序应该将一个槽与每个标识的触点相关联,并使用该槽传播触点的更改。通过修改相关插槽的ABS_MT_TRACKING_ID来创建、替换和销毁触点。非负跟踪id被解释为触点,值-1表示未使用的插槽。以前不存在的跟踪id被认为是新的,不再存在的跟踪标识被认为是已删除的。由于只传播更改,因此每个启动的触点的完整状态必须位于接收端。在接收到MT事件后,只需更新当前时隙的适当属性。
 Some devices identify and/or track more contacts than they can report to the driver.  A driver for such a device should associate one type B slot with each contact that is reported by the hardware.  Whenever the identity of the contact associated with a slot changes, the driver should invalidate that slot by changing its ABS_MT_TRACKING_ID.  If the hardware signals that it is tracking more contacts than it is currently reporting, the driver should use a BTN_TOOL_*TAP event to inform userspace of the total number of contacts being tracked by the hardware at that moment.  The driver should do this by explicitly sending the corresponding BTN_TOOL_*TAP event and setting use_count to false when calling input_mt_report_pointer_emulation(). The driver should only advertise as many slots as the hardware can report. Userspace can detect that a driver can report more total contacts than slots by noting that the largest supported BTN_TOOL_*TAP event is larger than the total number of type B slots reported in the absinfo for the ABS_MT_SLOT axis.
 一些设备识别和/或跟踪的触点数量超过了他们可以向驱动报告的数量。这种设备的驱动程序应该将一个B型插槽与硬件报告的每个触点相关联。每当与插槽关联的触点的身份发生更改时,驱动程序应通过更改其ABS_MT_TRACKING_ID来使该插槽无效。如果硬件发出信号,表明它正在跟踪比当前报告的触点更多的触点,则驱动程序应使用BTN_TOOL_*TAP事件通知用户空间此时硬件正在跟踪的触点总数。驱动程序应该通过显式发送相应的BTN_TOOL_*TAP事件并在调用input_mt_report_pointer_simulation()时将use_count设置为false来完成此操作。驱动程序应该只公布硬件可以报告的插槽数量。用户空间可以通过注意到最大的支持BTN_TOOL_*TAP事件大于ABS_MT_SLOT轴的absinfo中报告的B类插槽的总数,检测到驱动程序可以报告比插槽更多的总触点。
 The minimum value of the ABS_MT_SLOT axis must be 0.
 ABS_MT_SLOT轴的最小值必须为0。

三、Protocol Example A   //协议A举例
 ------------------
 Here is what a minimal event sequence for a two-contact touch would look like for a type A device:
以下是A型设备的双触点触摸的最小事件序列:
   ABS_MT_POSITION_X x[0]
   ABS_MT_POSITION_Y y[0]
   SYN_MT_REPORT
   ABS_MT_POSITION_X x[1]
   ABS_MT_POSITION_Y y[1]
   SYN_MT_REPORT
   SYN_REPORT
 The sequence after moving one of the contacts looks exactly the same; the raw data for all present contacts are sent between every synchronization with SYN_REPORT.
 移动其中一个触点后的顺序看起来完全相同;在每次同步SYN_ REPORT之间发送所有当前触点的原始数据。
 Here is the sequence after lifting the first contact:
以下是抬起第一个触点后的顺序:
   ABS_MT_POSITION_X x[1]
   ABS_MT_POSITION_Y y[1]
   SYN_MT_REPORT
   SYN_REPORT
 And here is the sequence after lifting the second contact:
下面是提起第二个触点后的顺序:
   SYN_MT_REPORT
   SYN_REPORT
 If the driver reports one of BTN_TOUCH or ABS_PRESSURE in addition to the ABS_MT events, the last SYN_MT_REPORT event may be omitted. Otherwise, the last SYN_REPORT will be dropped by the input core, resulting in no zero-contact event reaching userland.
如果驱动除了ABS_MT事件之外还报告BTN_TOUCH或ABS_PRESSURE中的一个,则可以省略最后一个SYN_MT_REPORT事件。否则,最后一个SYN_REPORT将被输入核心丢弃,导致没有零接触事件到达用户区域。


四、Protocol Example B   //协议B举例
 ------------------
 Here is what a minimal event sequence for a two-contact touch would look like for a type B device:
以下是B类设备的双触点触摸的最小事件序列:
   ABS_MT_SLOT 0
   ABS_MT_TRACKING_ID 45
   ABS_MT_POSITION_X x[0]
   ABS_MT_POSITION_Y y[0]
   ABS_MT_SLOT 1
   ABS_MT_TRACKING_ID 46
   ABS_MT_POSITION_X x[1]
   ABS_MT_POSITION_Y y[1]
   SYN_REPORT
 Here is the sequence after moving contact 45 in the x direction:
以下是沿x方向移动触点45后的顺序:
   ABS_MT_SLOT 0
   ABS_MT_POSITION_X x[0]
   SYN_REPORT
 Here is the sequence after lifting the contact in slot 0:
以下是提起插槽0中的触点后的顺序:
   ABS_MT_TRACKING_ID -1
   SYN_REPORT
 The slot being modified is already 0, so the ABS_MT_SLOT is omitted.  The message removes the association of slot 0 with contact 45, thereby destroying contact 45 and freeing slot 0 to be reused for another contact.
 正在修改的插槽已为0,因此省略ABS_MT_slot。该消息移除了槽0与触点45的关联,从而破坏触点45并释放槽0以供另一触点重新使用。
 Finally, here is the sequence after lifting the second contact:
最后,这里是提起第二个触点后的顺序:
   ABS_MT_SLOT 1
   ABS_MT_TRACKING_ID -1
   SYN_REPORT

五、Event Usage   //事件使用情况
 -----------
 A set of ABS_MT events with the desired properties is defined. The events are divided into categories, to allow for partial implementation.  The minimum set consists of ABS_MT_POSITION_X and ABS_MT_POSITION_Y, which allows for multiple contacts to be tracked.  If the device supports it, the ABS_MT_TOUCH_MAJOR and ABS_MT_WIDTH_MAJOR may be used to provide the size of the contact area and approaching tool, respectively.
 定义了一组具有所需属性的ABS_MT事件。这些事件被分为几类,以允许部分实施。最小集合由ABS_MT_POSITION_X和ABS_MT_POSITION_Y组成,允许跟踪多个触点。如果设备支持,则ABS_MT_TOUCH_MAJOR和ABS_MT_WIDTH_MAJO可分别用于提供接触区域的大小和逼近工具。
 The TOUCH and WIDTH parameters have a geometrical interpretation; imagine looking through a window at someone gently holding a finger against the glass.  You will see two regions, one inner region consisting of the part of the finger actually touching the glass, and one outer region formed by the perimeter of the finger. The center of the touching region (a) is ABS_MT_POSITION_X/Y and the center of the approaching finger (b) is ABS_MT_TOOL_X/Y. The touch diameter is ABS_MT_TOUCH_MAJOR and the finger diameter is ABS_MT_WIDTH_MAJOR. Now imagine the person pressing the finger harder against the glass. The touch region will increase, and in general, the ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR, which is always smaller than unity, is related to the contact pressure. For pressure-based devices, ABS_MT_PRESSURE may be used to provide the pressure on the contact area instead. Devices capable of contact hovering can use ABS_MT_DISTANCE to indicate the distance between the contact and the surface.
TOUCH和WIDTH参数具有几何解释;想象一下,透过窗户望着一个手指轻轻地点着玻璃的人。您将看到两个区域,一个内部区域由手指实际接触玻璃的部分组成,另一个外部区域由手指周边形成。触摸区域(a)的中心是ABS_MT_POSITION_X/Y, 接近手指(b)的中心为ABS_MT_TOOL_X/Y。触摸直径为ABS_MT_TOUCH_MAJOR,手指直径为ABS_MT_WIDTH_MAJOR。现在想象一下,有人将手指更用力地按在玻璃上。触摸区域将增加,通常,ABS_MT_TOUCH_MAJOR/ABS_MT_WIDTH_MAJOR之比(始终小于1)与接触压力有关。对于基于压力的装置,ABS_MT_PRESSURE可用于提供接触区域上的压力。能够接触悬停的设备可以使用ABS_MT_DISTANCE来指示接触和表面之间的距离。

      Linux MT                               Win8
         __________                     _______________________
        /          \                   |                       |
       /            \                  |                       |
      /     ____     \                 |                       |
     /     /    \     \                |                       |
     \     \  a  \     \               |       a               |
      \     \____/      \              |                       |
       \                 \             |                       |
        \        b        \            |           b           |
         \                 \           |                       |
          \                 \          |                       |
           \                 \         |                       |
            \                /         |                       |
             \              /          |                       |
              \            /           |                       |
               \__________/            |_______________________|

 In addition to the MAJOR parameters, the oval shape of the touch and finger regions can be described by adding the MINOR parameters, such that MAJOR and MINOR are the major and minor axis of an ellipse. The orientation of the touch ellipse can be described with the ORIENTATION parameter, and the direction of the finger ellipse is given by the vector (a - b).
 除了MAJOR参数之外,可以通过添加MINOR参数来描述触摸和手指区域的椭圆形状,使得MAJOR和MINOR是椭圆的长轴和短轴。触摸椭圆的方向可以用orientation参数描述,手指椭圆的方向由矢量(a-b)给出。
 For type A devices, further specification of the touch shape is possible via ABS_MT_BLOB_ID.
  对于A类设备,可以通过ABS_MT_BLOB_ID进一步指定触摸形状。
 The ABS_MT_TOOL_TYPE may be used to specify whether the touching tool is a finger or a pen or something else. Finally, the ABS_MT_TRACKING_ID event may be used to track identified contacts over time [5].
ABS_MT_TOOL_TYPE可用于指定触摸工具是手指还是笔或其他东西。最后,ABS_MT_TRACKING_ID事件可用于跟踪一段时间内识别的连接(事件)[5]。
 In the type B protocol, ABS_MT_TOOL_TYPE and ABS_MT_TRACKING_ID are implicitly handled by input core; drivers should instead call input_mt_report_slot_state().
在类型B协议中,ABS_MT_TOOL_type和ABS_MT_TRACKING_ID由输入核心隐式处理;驱动程序应该改为调用input_mt_report_slot_state()。

六、Event Semantics    //事件语义
 ---------------
6.1 ABS_MT_TOUCH_MAJOR
 The length of the major axis of the contact. The length should be given in surface units. If the surface has an X times Y resolution, the largest possible value of ABS_MT_TOUCH_MAJOR is sqrt(X^2 + Y^2), the diagonal [4].
 触点长轴的长度。长度应以表面单位表示。如果曲面具有X乘以Y的分辨率,ABS_MT_TOUCH_MAJOR的最大可能值为sqrt(X^2+Y^2),即对角线[4]。
6.2 ABS_MT_TOUCH_MINOR
 The length, in surface units, of the minor axis of the contact. If the contact is circular, this event can be omitted [4].
 接触短轴的长度,以表面单位表示。如果接触是圆形的,则可以省略此事件[4]。
6.3 ABS_MT_WIDTH_MAJOR
 The length, in surface units, of the major axis of the approaching tool. This should be understood as the size of the tool itself. The orientation of the contact and the approaching tool are assumed to be the same [4].
 接近工具主轴的长度,以表面单位表示。这应理解为工具本身的大小。假设触点和接近工具的方向相同[4]。
6.4 ABS_MT_WIDTH_MINOR
 The length, in surface units, of the minor axis of the approaching tool. Omit if circular [4].
 接近工具短轴的长度,以表面单位表示。如果是圆形[4],则省略。
 The above four values can be used to derive additional information about the contact. The ratio ABS_MT_TOUCH_MAJOR / ABS_MT_WIDTH_MAJOR approximates the notion of pressure. The fingers of the hand and the palm all have different characteristic widths.
 上述四个值可用于导出关于触点的附加信息。ABS_MT_TOUCH_MAJOR/ABS_MT_WIDTH_MAJOR 之比近似于压力的概念。手和手掌的手指都具有不同的特征宽度。
6.5 ABS_MT_PRESSURE
 The pressure, in arbitrary units, on the contact area. May be used instead of TOUCH and WIDTH for pressure-based devices or any device with a spatial signal intensity distribution.
 接触面积上的压力,以任意单位表示。对于基于压力的设备或具有空间信号强度分布的任何设备,可以使用TOUCH和WIDTH来代替TOUCH。
6.6 ABS_MT_DISTANCE
 The distance, in surface units, between the contact and the surface. Zero distance means the contact is touching the surface. A positive number means the contact is hovering above the surface.
 触点和表面之间的距离,以表面单位表示。零距离表示触点接触表面。正数表示触点悬停在表面上方。
6.7 ABS_MT_ORIENTATION
 The orientation of the touching ellipse. The value should describe a signed quarter of a revolution clockwise around the touch center. The signed value range is arbitrary, but zero should be returned for an ellipse aligned with the Y axis of the surface, a negative value when the ellipse is turned to the left, and a positive value when the ellipse is turned to the right. When completely aligned with the X axis, the range max should be returned.
 触摸椭圆的方向。该值应描述围绕触摸中心顺时针旋转的四分之一圈。带符号值范围是任意的,但对于与曲面的Y轴对齐的椭圆,应返回零,当椭圆向左旋转时返回负值,当椭圆向右旋转时返回正值。当与X轴完全对齐时,应返回范围最大值。
 Touch ellipsis are symmetrical by default. For devices capable of true 360 degree orientation, the reported orientation must exceed the range max to indicate more than a quarter of a revolution. For an upside-down finger, range max * 2 should be returned.
 默认情况下,触摸省略号是对称的。对于能够真正360度定向的设备,报告的定向必须超过最大范围,以指示超过四分之一转。对于倒置的手指,应返回范围max*2。
 Orientation can be omitted if the touch area is circular, or if the information is not available in the kernel driver. Partial orientation support is possible if the device can distinguish between the two axis, but not (uniquely) any values in between. In such cases, the range of ABS_MT_ORIENTATION should be [0, 1] [4].
 如果触摸区域是圆形的,或者内核驱动程序中没有信息,则可以省略方向。如果设备可以区分两个轴,但不能(唯一地)区分两个之间的任何值,则可以支持部分定向。在这种情况下,ABS_MT_ORIENTATION的范围应为[0,1][4]。
6.8 ABS_MT_POSITION_X
 The surface X coordinate of the center of the touching ellipse.
 触摸椭圆中心的曲面X坐标。
6.9 ABS_MT_POSITION_Y
 The surface Y coordinate of the center of the touching ellipse.
 接触椭圆中心的曲面Y坐标。
6.10 ABS_MT_TOOL_X
 The surface X coordinate of the center of the approaching tool. Omit if the device cannot distinguish between the intended touch point and the tool itself.
 接近工具中心的表面X坐标。如果设备无法区分预期的触摸点和工具本身,则忽略此项。
6.11 ABS_MT_TOOL_Y
 The surface Y coordinate of the center of the approaching tool. Omit if the device cannot distinguish between the intended touch point and the tool itself.
 接近工具中心的表面Y坐标。如果设备无法区分预期的触摸点和工具本身,则忽略此项。
 The four position values can be used to separate the position of the touch from the position of the tool. If both positions are present, the major tool axis points towards the touch point [1]. Otherwise, the tool axes are aligned with the touch axes.
 四个位置值可用于将触摸位置与工具位置分开。如果两个位置都存在,则主工具轴指向接触点[1]。否则,工具轴与触摸轴对齐。
6.12 ABS_MT_TOOL_TYPE
 The type of approaching tool. A lot of kernel drivers cannot distinguish between different tool types, such as a finger or a pen. In such cases, the event should be omitted. The protocol currently supports MT_TOOL_FINGER, MT_TOOL_PEN, and MT_TOOL_PALM [2]. For type B devices, this event is handled by input core; drivers should instead use input_mt_report_slot_state(). A contact's ABS_MT_TOOL_TYPE may change over time while still touching the device, because the firmware may not be able to determine which tool is being used when it first appears.
 接近工具的类型。许多内核驱动程序无法区分不同的工具类型,例如手指或笔。在这种情况下,应省略该事件。该协议目前支持MT_TOOL_FINGER、MT_TOOL_PEN和MT_TOOL-PALM[2]。对于B类设备,此事件由输入核心处理;驱动程序应该改用input_mt_report_slot_state()。触点的ABS_MT_TOOL_TYPE可能会随着时间的推移而改变,同时仍在触摸设备,因为固件可能无法确定首次出现时使用的工具。
6.13 ABS_MT_BLOB_ID
 The BLOB_ID groups several packets together into one arbitrarily shaped contact. The sequence of points forms a polygon which defines the shape of the contact. This is a low-level anonymous grouping for type A devices, and should not be confused with the high-level trackingID [5]. Most type A devices do not have blob capability, so drivers can safely omit this event.
 BLOB_ID将多个数据包组合成一个任意形状的接触。点序列形成了一个多边形,它定义了接触的形状。这是A类设备的低级匿名分组,不应与高级跟踪ID混淆[5]。大多数A类设备没有blob功能,因此驱动程序可以安全地忽略此事件。
6.14 ABS_MT_TRACKING_ID
 The TRACKING_ID identifies an initiated contact throughout its life cycle [5]. The value range of the TRACKING_ID should be large enough to ensure unique identification of a contact maintained over an extended period of time. For type B devices, this event is handled by input core; drivers should instead use input_mt_report_slot_state().
 TRACKING_ID在其整个生命周期中识别发起的接触[5]。TRACKING_ID的值范围应足够大,以确保在长时间内保持的触点的唯一标识。对于B类设备,此事件由输入核心处理;驱动程序应该改用input_mt_report_slot_state()。

七、Event Computation   //事件计算
 -----------------
 The flora of different hardware unavoidably leads to some devices fitting better to the MT protocol than others. To simplify and unify the mapping, this section gives recipes for how to compute certain events.
 不同硬件的种类不可避免地导致一些设备比其他设备更适合MT协议。为了简化和统一映射,本节给出了如何计算某些事件的方法。
 For devices reporting contacts as rectangular shapes, signed orientation cannot be obtained. Assuming X and Y are the lengths of the sides of the touching rectangle, here is a simple formula that retains the most information possible:
对于报告触点为矩形的设备,无法获得带符号的方向。假设X和Y是触摸矩形边的长度,这里有一个简单的公式,可以保留尽可能多的信息:
   ABS_MT_TOUCH_MAJOR := max(X, Y)
   ABS_MT_TOUCH_MINOR := min(X, Y)
   ABS_MT_ORIENTATION := bool(X > Y)
 The range of ABS_MT_ORIENTATION should be set to [0, 1], to indicate that the device can distinguish between a finger along the Y axis (0) and a finger along the X axis (1).
 ABS_MT_ORIENTATION的范围应设置为[0,1],以指示设备可以区分沿Y轴(0)的手指和沿X轴(1)的手指。
 For win8 devices with both T and C coordinates, the position mapping is
对于同时具有T和C坐标的win8设备,位置映射为
   ABS_MT_POSITION_X := T_X
   ABS_MT_POSITION_Y := T_Y
   ABS_MT_TOOL_X := C_X
   ABS_MT_TOOL_Y := C_Y
 Unfortunately, there is not enough information to specify both the touching ellipse and the tool ellipse, so one has to resort to approximations.  One simple scheme, which is compatible with earlier usage, is:
不幸的是,没有足够的信息来指定触摸椭圆和工具椭圆,因此必须使用近似值。一个与早期用法兼容的简单方案是:
   ABS_MT_TOUCH_MAJOR := min(X, Y)
   ABS_MT_TOUCH_MINOR := <not used>
   ABS_MT_ORIENTATION := <not used>
   ABS_MT_WIDTH_MAJOR := min(X, Y) + distance(T, C)
   ABS_MT_WIDTH_MINOR := min(X, Y)
 Rationale: We have no information about the orientation of the touching ellipse, so approximate it with an inscribed circle instead. The tool ellipse should align with the vector (T - C), so the diameter must increase with distance(T, C). Finally, assume that the touch diameter is equal to the tool thickness, and we arrive at the formulas above.
 理由:我们没有关于接触椭圆方向的信息,所以用内切圆来近似。工具椭圆应与矢量(T-C)对齐,因此直径必须随距离(T,C)增加。最后,假设接触直径等于工具厚度,我们得出上述公式。
 
八、Finger Tracking 
 ---------------
 The process of finger tracking, i.e., to assign a unique trackingID to each initiated contact on the surface, is a Euclidian Bipartite Matching problem.  At each event synchronization, the set of actual contacts is matched to the set of contacts from the previous synchronization. A full implementation can be found in [3].
手指跟踪的过程,即为表面上的每个初始接触分配一个唯一的跟踪ID,是欧几里得二部分匹配问题。在每次事件同步时,实际触点的集合与上一次同步中的触点集合相匹配。完整的实现可以在[3]中找到。
 

九、Gestures 
 --------
 In the specific application of creating gesture events, the TOUCH and WIDTH parameters can be used to, e.g., approximate finger pressure or distinguish between index finger and thumb. With the addition of the MINOR parameters, one can also distinguish between a sweeping finger and a pointing finger, and with ORIENTATION, one can detect twisting of fingers.
在创建手势事件的特定应用中,TOUCH和WIDTH参数可用于例如近似手指压力或区分食指和拇指。通过添加MINOR参数,还可以区分扫指和指向指,通过ORIENTATION,可以检测手指的扭曲。


十、Notes 
 -----
 In order to stay compatible with existing applications, the data reported in a finger packet must not be recognized as single-touch events.
 为了与现有应用程序保持兼容,手指包中报告的数据不能被识别为单次触摸事件。
 For type A devices, all finger data bypasses input filtering, since subsequent events of the same type refer to different fingers.
 对于A类设备,所有手指数据都绕过输入过滤,因为相同类型的后续事件引用不同的手指。
 For example usage of the type A protocol, see the bcm5974 driver. For example usage of the type B protocol, see the hid-egalax driver.
 有关A类协议的用法示例,请参阅bcm5974驱动程序。有关B类协议的用法示例,请参阅hid-egalax驱动程序。
 [1] Also, the difference (TOOL_X - POSITION_X) can be used to model tilt.   此外,差异(TOOL_X-POSITION_X)可用于建模倾斜。
 [2] The list can of course be extended. 
 当然,这个列表可以扩展。
 [3] The mtdev project: http://bitmath.org/code/mtdev/. 
 [4] See the section on event computation.   请参阅事件计算部分。
 [5] See the section on finger tracking.   请参见手指跟踪部分。
 

相关文章:

2.输入子系统学习-multi-touch-protocol-2023.02

Documentation/input/multi-touch-protocol.txt&#xff08;百度翻译&#xff09; Multi-touch (MT) Protocol ------------------------- Copyright (C) 2009-2010 Henrik Rydberg <rydbergeuromail.se> 一、Introduction ------------ In order to utilize t…...

【靶机】vulnhub靶机pylington

靶机下载地址 Pylington: 1 ~ VulnHub kali ip&#xff1a;192.168.174.128 靶机ip&#xff1a;192.168.174.146 arp-scan -l发现靶机ip是192.168.174.146 进行靶机的端口扫描&#xff0c;这里使用的是nmap的gui 可以发现开放了21和80端口&#xff0c;80端口扫描到了robot…...

【大数据】大数据学习路线

职位选择 首先明确一点&#xff1a;大数据涉及的知识面广度还是有的&#xff0c;需要学习的组件繁多&#xff0c;想要每一项精通几乎不可能&#xff0c;所以企业在招聘的时候会进行细分&#xff0c;基于某个方向进行招聘&#xff0c;比如关键字&#xff0c;数据仓库工程师、数…...

【Python爬虫案例教学】采集某网站壁纸,实现壁纸自由

前言 (&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨 大家好&#xff0c;这里是小圆 现在开始每天都给大家 分享些关于python爬虫的案例教学 从最简单的开始 — 采集图片壁纸 今天就来扒拉这个优质的壁纸网站~ 网址 &#x1f447; 顺便瞧一眼 这里的…...

波卡2022年第四季度报告

本文将介绍Messari最新发布的波卡Polkadot 2022年第四季度报告内容。 1 Messari已经发布关于波卡Polkadot最新的报告&#xff1a;显示了2022年第四季度的日活账户增加了64%&#xff0c;新用户增长49%。 2 Messari指出&#xff0c;波卡中继链在2022第四季度的环比增长令人印象…...

第一章:初始化react项目+antd+less

初始化react项目 我们首先使用react脚手架创建一个项目 Ant Design less creact-react-app中文文档 creact-react-app demo生产环境打包运行 当我们执行了 npm run build 打包后直接访问index.html 看效果白屏 这时候就需要安装一个serve包 npm install -g serve当我们安…...

图的基本概念

1、图的概念 G(V&#xff0c;E) 图G由节点集合VV(G)和边集合EE(G)组成&#xff0c;其中V为非空有限集合。 集合V中的节点&#xff08;node&#xff09;用红色标出&#xff0c;通过集合E中黑色的边&#xff08;edge&#xff09;连接。 G的边&#xff1a;E中的每个顶点对&#x…...

MySQL必会四大函数-窗口函数

在了解窗口函数之前&#xff0c;我们必须了解聚合函数。常见的聚合函数&#xff0c;包括 AVG、COUNT、MAX、MIN、SUM 以及 GROUP_CONCAT&#xff0c;常和GROUP BY 函数一起使用。聚合函数的作用就是对一组数据行进行汇总计算&#xff0c;并且返回单个分析结果。 窗口函数和聚合…...

各CCF期刊点评网站/学术论坛的信息汇总及个人评价

CCF中文期刊投稿选择之篇章一:各CCF期刊点评网站/学术论坛的信息汇总及个人评价中文科技期刊A类&#xff08;EI检索&#xff09;中文期刊投稿点评网站整理1.小木虫学术论坛2. Letpub3. Justscience4. 发表记5. 会伴&#xff08;Conference Partner)6. ijouranl7. 掌桥科研这是以…...

深度解析 JavaScript 严格模式:利弊长远的考量

前言 ECMAScript 5首次引入严格模式的概念。严格模式用于选择以更严格的条件检查JavaScript代码错误&#xff0c;可以应用到全局&#xff0c;也可以应用到函数内部。 严格模式的好处是可以提早发现错误&#xff0c;因此可以捕获某些 ECMAScript 问题导致的编程错误。 理解严格…...

Vue.js 循环语句

Vue.js 循环语句 在Vue开发中&#xff0c;for循环是我们最常遇见的场景之一&#xff0c;我们知道常见的遍历方式有for循环&#xff0c;for of、forEach、for in.虽然在开发过程中&#xff0c;这几种方式基本上可以满足我们大多数的场景&#xff0c;但是你真的知道他们之间的区…...

家政服务小程序实战教程12-详情页

我们的家政服务小程序已经完成了首页和分类展示页面的开发&#xff0c;接下来就需要开发详情页了。在详情页里我们展示我们的各项服务内容&#xff0c;让用户可以了解每项家政服务可以提供的内容。 低码开发不像传统开发&#xff0c;如果开发详情页需要考虑每个字段的类型&…...

十四、平衡二叉树

1、看一个案例&#xff08;说明二叉排序树可能的问题&#xff09; 给你一个数列{1,2,3,4,5,6}&#xff0c;要求创建一棵二叉排序树&#xff08;BST&#xff09;&#xff0c;并分析问题所在。 上面二叉排序树存在问题分析&#xff1a; 左子树全部为空&#xff0c;从形式上看&…...

AC/DC 基础

一、概念&#xff1a; AC转换成DC的基本方法有变压器方式和开关方式&#xff0c;如下图1、2所示&#xff1b;整流的基本方法有全波整流和半波整流&#xff0c;如下图3所示。 图1 变压器方式 图2 开关方式 图3 整流方式 二、转换方式 1、变压器方式 变压器方式首先需要通过变压…...

集成电路相关书籍

注&#xff1a;从此开始&#xff0c;文中提到的书籍都会在公众号对应文章末尾给出链接&#xff0c;不需要在微信后台获取&#xff0c;当然还是可以通过在微信后台回复相关书名获取对应的电子书。 在后台看到很多人回复集成电路相关的一些书籍&#xff0c;所以本文就提供一些书籍…...

前端开发之防抖与节流

前端开发中我们经常会通过监听某些事件来完成项目需求 1.通过监听 scroll 事件&#xff0c;检测滚动位置&#xff0c;根据滚动位置显示返回顶部按钮 2.通过监听 resize 事件&#xff0c;对某些自适应页面调整DOM的渲染&#xff08;通过CSS实现的自适应不再此范围内&#xff09;…...

大公司如何用A/B测试解决增长问题?

摘要&#xff1a;上线六年&#xff0c;字节跳动的短视频产品——抖音已成为许多人记录美好生活的平台。除了抖音&#xff0c;字节跳动旗下还同时运营着数十款产品&#xff0c;从资讯、游戏&#xff0c;到房产、教育等横跨多个领域。在产品迭代速度和创新能力的快速发展下&#…...

【Airplay_BCT】Bonjour API架构

Bonjour API 架构 OS X 和 iOS 为 Bonjour 服务应用程序提供了多层应用程序编程接口 (API)&#xff1a; Foundation 框架中的 NSNetService 和 NSNetServiceBrowser 类&#xff1b; CFNetServices&#xff0c;Core Services 中 CFNetwork 框架的一部分&#xff1b; Java 的 DN…...

为什么sleeping的会话会造成阻塞(2)

背景客户反馈系统突然从11:10开始运行非常缓慢&#xff0c;在SQL专家云中看到大量的产生阻塞的活动会话&#xff0c;KILL掉阻塞的源头马上又出现新的源头&#xff0c;实在没有办法只能重启应用程序断开所有数据库连接才解决&#xff0c;请我们协助分析根本的原因。现象登录SQL专…...

从矩阵中提取对角线元素;将一维数组转换为对角线矩阵:np.diag()函数

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】从矩阵中提取对角线元素将一维数组转换为对角线矩阵np.diag()函数选择题下列说法错误的是?import numpy as npmyarray1 np.array([1,2,3])print("【显示】myarray1")print(myarray1…...

JavaSE学习day7_02 封装和构造方法

4. 封装 面向对象的三大特征&#xff1a; 封装、继承、多态 封装&#xff1a;对象代表什么&#xff0c;就得封装对应的数据&#xff0c;并提供数据对应的行为。 比如人画圆&#xff1a;”画“这个行为应该封装在圆这个类&#xff0c;为什么&#xff1f;因为”画“圆要知道圆…...

2022年FIT2CLOUD飞致云开源成绩单

2023年2月15日&#xff0c;中国领先的开源软件公司FIT2CLOUD飞致云发布《2022年开源成绩单》&#xff0c;盘点公司2022年全年在开源软件产品与社区运营方面的表现。目前&#xff0c;飞致云旗下的核心开源软件组合包括JumpServer开源堡垒机、DataEase开源数据可视化分析平台、Me…...

【Python】asyncio使用注意事项

目录协程的定义协程的运行多个协程运行关于loop.close()回调事件循环协程的定义 需要使用 async def 语句 协程可以做哪些事: 1、等待一个future结果 2、等待另一个协程(产生一个结果或引发一个异常) 3、产生一个结果给正在等它的协程 4、引发一个异常给正在等它的协程 …...

成都链安受邀参加第五届CCF中国区块链技术大会

2月10-12日&#xff0c;由中国计算机学会主办的&#xff0c;2023年国内首场大型区块链学术会议—第五届CCF中国区块链技术大会在无锡市成功举办&#xff0c;成都链安作为区块链安全头部企业受邀参加此次大会。大会上&#xff0c;成都链安创始人&CTO郭文生教授与锡东新城商务…...

验证码识别--封装版

前面我们说过了数字英文的验证码识别操作&#xff0c;本章我们对其进行完善一下&#xff0c;结合selenium来实际操作操作。import osimport timedef coding_path(path):Base_Path os.path.abspath(os.path.dirname(os.path.abspath(__file__)) /..)Base_image os.path.join(…...

创建Wails项目

项目生成​ 现在 CLI 已安装&#xff0c;您可以使用 wails init 命令生成一个新项目。 选择您最喜欢的框架&#xff1a; SvelteReactVuePreactLitVanilla 使用 JavaScript 生成一个 Vue 项目: wails init -n myproject -t vue如果您更愿意使用 TypeScript: wails init -…...

深度解析UG二次开发装配的部件事件、部件原型和部件实例

做UG二次开发快一年了&#xff0c;每次遇到装配的问题涉及到部件事件、部件原型和部件实例还是一头雾水&#xff0c;什么是实例&#xff0c;什么是原型这些专业术语等等。 针对这个问题&#xff0c;今天专门写了一篇特辑&#xff0c;结合装配实例深度剖析装配过程中的的所有参数…...

Linux安装elasticsearch-head

elasticsearch-head 是一款专门针对于 elasticsearch 的客户端工具&#xff0c;用来展示数据。 elasticsearch-head 是基于 JavaScript 语言编写的&#xff0c;可以使用 Nodejs 下的包管理器 npm 部署。 1 安装Nodejs nodejs下载地址&#xff1a; https://nodejs.org/en/dow…...

MySQL InnoDB表的碎片量化和整理(data free能否用来衡量碎片?)

网络上有很多MySQL表碎片整理的问题&#xff0c;大多数是通过demo一个表然后参考data free来进行碎片整理&#xff0c;这种方式对myisam引擎或者其他引擎可能有效&#xff08;本人没有做详细的测试&#xff09;.对Innodb引擎是不是准确的&#xff0c;或者data free是不是可以参…...

Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)

题目链接&#xff1a;https://leetcode.cn/problems/check-if-it-is-a-good-array/description/ 思路 方法&#xff1a;数论 题目意思很简单&#xff0c;让你在数组 nums中选取一些子集&#xff0c;可以不连续&#xff0c;子集中的每个数再乘以任意的数的和是否为1&#xff…...

wordpress 2012主题/福州短视频seo公司

抓取目标&#xff1a;就是我自己的博客&#xff1a;http://www.cnblogs.com/ghostwu/ 需要实现的功能&#xff1a; 抓取博客所有的文章标题&#xff0c;超链接&#xff0c;文章摘要&#xff0c;发布时间 需要用到的库&#xff1a; node.js自带的http库 第三方库:cheerio&a…...

废品网站怎么做/2345网址导航应用

148. 排序链表 思路&#xff1a; 归并排序调用过程&#xff1a; 过程&#xff1a; ①分割&#xff1a;找到链表的中间节点&#xff0c;不断的分割&#xff0c;直到金生一个节点为止。 ②合并&#xff1a;实质是多次运用 "两个有序链表合并"的过程。 链表找中间节点…...

网站建设合同是否交纳印花税/开发网站用什么软件

一、概念 1.分布式事务 分布式事务通俗来说&#xff0c;一次操作由若干分支组成&#xff0c;这些分支操作分属于不同的应用&#xff0c;分布在不同的服务器上&#xff0c;分布式事务需要保证这些操作要么全部成功&#xff0c;要么全部失败&#xff0c;分支事务与普通事务一样…...

phpcms做的网站/网络营销论文毕业论文

入口 A(fzu 1894) 普通的单调队列,trick是进队判断的符号选取(>wa , >ac). B(poj 2823) 没什么好说的 ,坑爹poj   g,tle ;c,ac. C(hdu 3415) 尝试封装了一下单调队列。。。感觉也没有方便多少. 1 #define maxn 1000102 #define INF 10000000003 int a[maxn<<1],…...

奶茶网站建设方案模板/免费外链代发

1.简述&#xff1a; api接口开发&#xff0c;其实和平时开发逻辑差不多&#xff1b;但是也有略微差异&#xff1b; 平时使用mvc开发网站的思路一般是都 由控制器 去 调用模型&#xff0c;模型返回数据&#xff0c;再由控制器把数据放到视图中&#xff0c;展现给用户&#xff1b…...

外海赌博如何做网站的推广/职业教育培训机构排名前十

求助&#xff1a;如何实现不关机SIM卡插拔(不用PUSH式卡座)kenny_nap Post at 2010/12/14 20:27:37有一个平板项目&#xff0c;SIM卡座是侧边&#xff0c;使用频率很高&#xff0c;push式卡座寿命普遍较短&#xff0c;准备使用普通抽屉式卡座&#xff0c;请教各位有什么好的办法…...