| page.title=Stylus |
| @jd:body |
| |
| <!-- |
| 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 |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 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"> |
| </ol> |
| </div> |
| </div> |
| |
| <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> |
| |
| <p><pre> |
| UsagePage(Digitizer) |
| Usage(Pen) |
| Collection(Application) |
| Usage(Stylus) |
| Collection(Logical) |
| 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) |
| Usage(Invert) |
| 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) |
| EndCollection |
| EndCollection |
| |
| 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 |
| } |
| </pre></p> |
| |
| <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="http://developer.android.com/about/versions/marshmallow/android-6.0.html#bluetooth-stylus">developer.android.com</a>. |