blob: 03c2e14a524014e32c068943374652b0e96eaf7a [file] [log] [blame]
Copyright 2015 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.
<div id="qv-wrapper">
<div id="qv">
<h2>In this document</h2>
<ol id="auto-toc">
<p>Android 6.0 and higher supports a standard data format for Bluetooth stylus
connections over Bluetooth (BT), Bluetooth Low Energy (BTLE), or USB. The
platform correlates timing between touch input and stylus data then provides
stylus data to render MotionEvents to the active application. The following
sections provide guidelines for OEM partners, stylus accessory creators, and
stylus application developers.</p>
<h2 id="guide-partners">Guidelines for OEM partners</h2>
<p>To enable Bluetooth stylus support, OEM partners must support Bluetooth
(and should support BTLE for wider compatibility). The platform handles data
collection, timing correlation, and rendering to the application for supported
stylus events.</p>
<p>At this time, the Android CTS <strong>does not</strong> include tests to
ensure existing APIs for touch events support default behavior. As a
workaround, we recommend creating a stylus accessory or emulator that can
simulate stylus events.</p>
<h2 id="guide-creators">Guidelines for stylus accessory creators</h2>
<p>To implement support on a stylus device, partners must use the Stylus
Human Interface Device (HID) Descriptor shown below to describe how stylus data
(pressure sensitivity, eraser, side buttons, device ID, etc.) is represented.
The stylus device sends the HID information to the Android mobile device,
enabling the platform to correlate HID data with touch data from the touchscreen
to produce stylus events via MotionEvent. Data can be sent over Bluetooth (BT),
Bluetooth Low Energy (BTLE), or USB.</p>
<h3 id="hid-descriptor">HID descriptor</h3>
Usage(Tip Pressure)
Logical Minimum(0)
Logical Maximum(1023)
Report Count(1)
Report Size(10)
Input(Data, Variable, Absolute, No Null)
Usage(Barrel Switch)
Usage(Secondary Barrel Switch)
Usage(Tip Switch)
Logical Maximum(1)
Report Count(4)
Report Size(1)
Input(Data, Variable, Absolute, No Null)
Usage(Transducer Serial Number)
Report Count(1)
Report Size(128)
Feature(Constant, Variable)
unsigned char HID_DESC[] = {
0x05, 0x0D, // UsagePage(Digitizer)
0x09, 0x02, // Usage(Pen)
0xA1, 0x01, // Collection(Application)
0x09, 0x20, // Usage(Stylus)
0xA1, 0x02, // Collection(Logical)
0x09, 0x30, // Usage(Tip Pressure)
0x15, 0x00, // Logical Minimum(0)
0x26, 0xFF, 0x03, // Logical Maximum(1023)
0x95, 0x01, // Report Count(1)
0x75, 0x0A, // Report Size(10)
0x81, 0x02, // Input(Data, Variable, Absolute, No Null)
0x09, 0x44, // Usage(Barrel Switch)
0x09, 0x5A, // Usage(Secondary Barrel Switch)
0x09, 0x42, // Usage(Tip Switch)
0x09, 0x3C, // Usage(Invert)
0x25, 0x01, // Logical Maximum(1)
0x95, 0x04, // Report Count(4)
0x75, 0x01, // Report Size(1)
0x81, 0x02, // Input(Data, Variable, Absolute, No Null)
0x09, 0x5B, // Usage(Transducer Serial Number)
0x95, 0x01, // Report Count(1)
0x75, 0x80, // Report Size(128)
0xB1, 0x03, // Feature(Constant, Variable)
0xC0, // End Collection
0xC0, // End Collection
<h2 id="guidelines-devs">Guidelines for stylus application developers</h2>
<p>The Android 6.0 platform automatically handles pairing and event correlation,
so both existing and new applications running on Android 6.0 support Bluetooth
stylus by default. For details on Bluetooth stylus APIs, refer to
<a href=""></a>.