Bagikan melalui


Panduan Implementasi Haptic Pen

Dokumen ini merinci implementasi protokol untuk perangkat Haptic Pen yang terhubung ke host Windows 11 yang kompatibel. Ini tidak termasuk panduan tentang batasan mekanis, batasan listrik, atau pemilihan komponen untuk menghasilkan respons haptik dalam transduser pena. Panduan implementasi ini adalah agnostik protokol pena yang digunakan antara transduser pena dan digitizer pena, namun implementasi dapat memilih untuk menggunakan protokol pena dengan kemampuan uplink yang memungkinkan digitizer pena untuk memberikan parameter tambahan ke transduser pena untuk tujuan modulasi respons haptik.

Kelas Perangkat

Haptic Pen adalah ekstensi dari kelas Pen Device di Windows. Panduan implementasi ini menambah Panduan Implementasi Pena dan berfokus pada penerapan haptik dalam transduser pena, sehingga pena haptik harus memenuhi persyaratan dalam Panduan Implementasi Pena selain yang terkandung di sini.

Koneksi ivitas Bus Perangkat

Pena Haptic harus menggunakan driver kotak masuk yang disediakan Microsoft untuk terhubung ke host Windows menggunakan HID melalui Bluetooth.

Implementasi Protokol Pena Haptic

Pemahaman yang baik tentang protokol HID diperlukan untuk dapat memahami informasi yang disajikan di sini. Lihat sumber daya berikut untuk informasi tentang protokol HID:

Windows mencakup driver kelas HID dan driver miniport yang mendukung HiD Bluetooth yang sesuai, oleh karena itu tidak perlu driver port mini pihak ketiga. Firmware perangkat pena haptic hanya perlu melaporkan penggunaan yang dijelaskan dalam topik ini. Windows akan menggunakan firmware dan driver HID-nya sendiri untuk mengaktifkan perangkat dan memberi aplikasi Windows akses ke perangkat.

Contoh deskriptor disediakan di bagian Contoh Deskriptor Laporan di bawah ini.

Koleksi HID Tingkat Atas yang Diperlukan

Koleksi HID tingkat atas yang diperlukan untuk pena haptic

Perangkat Haptic Pen harus menggunakan protokol HID pada sistem Windows 10 sedaya sehingga perangkat menyediakan koleksi tingkat atas yang muncul sebagai digitizer/stylus (Halaman 0x0D, Penggunaan 0x20).

Laporan Input Digitizer Pena

Koleksi digitizer pena harus melaporkan pengidentifikasi stylus yang terdiri dari nomor seri transduser dan ID Vendor transduser dalam laporan input yang dilaporkan ke OS. Pengidentifikasi stylus yang sama harus dilaporkan melalui koleksi stylus. Ini memungkinkan OS untuk menghubungkan input pena yang dihasilkan oleh digitizer ke stylus. Detail tentang panduan implementasi pena dapat ditemukan di sini: Implementasi Protokol Pena.

Nomor Seri Transduser

Nomor Seri Transduser adalah pengidentifikasi persisten unik untuk transduser yang digunakan dalam aksesori pena yang berkomunikasi dengan digitizer pena. Ini diperlukan untuk menjadi 32-bit dan didefinisikan oleh vendor atau entitas yang diidentifikasi oleh ID vendor transduser. Dalam keadaan di mana Nomor Seri Transduser tidak diketahui oleh digitizer baik karena aksesori pena tidak mendukung pengiriman nilai ini atau bahwa transmisi belum diterima secara penuh, digitizer harus melaporkan 0 ke host. Posisi null tidak didukung oleh host.

Nomor Seri Transduser – Bagian 2

Nomor Seri Transduser – Bagian 2 memungkinkan 32-bit tambahan ditentukan sebagai bagian dari pengidentifikasi persisten unik untuk transduser yang digunakan dalam aksesori pena. Dalam keadaan di mana Nomor Seri Transduser - Bagian 2 tidak diketahui oleh digitizer baik karena aksesori pena tidak mendukung pengiriman nilai ini atau bahwa transmisi belum diterima secara penuh, digitizer akan melaporkan 0 ke host. Posisi null tidak didukung oleh host.

Halaman ID Catatan
0xD 0x5B Wajib untuk fitur tergantung pada identifikasi pena unik (lihat di bawah)
0xD 0x6E Ekstensi opsional dari nomor seri dengan tambahan 32 bit

ID Vendor Transduser

ID Vendor Transduser adalah bidang untuk mengkomunikasikan produsen transduser yang digunakan dalam aksesori pena yang berkomunikasi dengan digitizer pena. Ini diperlukan untuk menjadi ID vendor 2-byte USB-IF yang ditetapkan salah satu produsen atau IHV/OEM yang mengotorisasi penggunaan ID vendor USB-IF mereka untuk tujuan ini.

Halaman ID Catatan
0xD 0x91 Wajib untuk fitur tergantung pada identifikasi pena unik (lihat di bawah)

Fitur Tergantung Pada Identifikasi Pena Unik

Melaporkan PenID wajib mengaktifkan skenario seperti haptik pena (diperlukan untuk fitur haptik dalam panduan ini).

Ini juga wajib untuk skenario yang menggunakan beberapa pena untuk penintaan. Contohnya:

  • Aplikasi papan tulis di windows mendukung beberapa penggunaan pena di mana setiap pena dapat dipetakan ke alat penintaan tertentu
  • Secara umum, aplikasi yang ingin menetapkan atribut atau perilaku ke pena fisik yang berbeda, meskipun digitizer hanya dapat mendukung satu pena di layar pada saat itu
  • Aplikasi yang ingin melacak beberapa pena simultan pada digitizer yang didukung

Laporan Output Haptic

Jika perangkat pena mendukung umpan balik haptik, itu dapat memungkinkan sistem dan aplikasi untuk memanfaatkannya dengan menyertakan koleksi umpan balik haptik (Halaman 0x0E, Penggunaan 0x01) dalam TLC stylus. Untuk informasi selengkapnya tentang bagaimana spesifikasi HID mendukung umpan balik haptik, silakan lihat ratifikasi halaman Haptics ke spesifikasi HID.

Host menggunakan penggunaan berikut dalam laporan output (melalui pengumpulan umpan balik haptik) untuk memungkinkan host mengeluarkan peristiwa umpan balik haptik ke perangkat pena haptic. Jika perangkat memilih untuk mengekspos koleksi umpan balik haptik, beberapa penggunaan wajib untuk memungkinkan umpan balik haptik yang dimulai host didukung.

Anggota Deskripsi Halaman ID Wajib/Opsional
Daftar Bentuk Gelombang Daftar bentuk gelombang haptik yang diurutkan yang didukung oleh perangkat 0x0E 0x10 Wajib
Daftar Durasi Daftar durasi yang diurutkan untuk bentuk gelombang dalam Daftar Bentuk Gelombang 0x0E 0x11 Wajib
Pemicu Otomatis Bentuk gelombang untuk diaktifkan secara otomatis atas kebijaksanaan perangkat 0x0E 0x20 Wajib
Kontrol Terkait Pemicu Otomatis Penggunaan HID kontrol yang terkait dengan umpan balik haptik 0x0E 0x22 Wajib
Intensitas Output - Intensitas bentuk gelombang Pemicu Manual sebagai persentase 0x0E 0x23 Opsional
Jumlah Ulangi Output - Jumlah waktu untuk memutar bentuk gelombang Pemicu Manual setelah pemutaran awal 0x0E 0x24 Opsional
Periode Pengambilan Output - Durasi waktu untuk menunggu sebelum memicu ulang Pemicu Manual saat mengulangi 0x0E 0x25 Opsional
Waktu Cutoff Bentuk Gelombang Waktu maksimum bentuk gelombang Pemicu Manual dapat diputar sebelum diputus 0x0E 0x28 Opsional

Daftar Bentuk Gelombang

Penggunaan Waveform List mewakili kumpulan penggunaan HID dari bentuk gelombang yang didukung, diurutkan menggunakan ordinal. Bentuk gelombang haptik yang telah ditentukan sebelumnya didefinisikan dalam spesifikasi HID. Untuk perangkat haptik pena, bentuk gelombang ini dapat diklasifikasikan sebagai dua segmen yang sesuai dengan skenario yang berbeda:

  • WAVEFORM_*CONTINOUS - Umpan balik berbasis tinta untuk mensimulasikan berbagai tekstur saat pengguna secara aktif inking dengan alat yang berbeda seperti pena, pensil dll.
  • WAVEFORM_* - Umpan balik berbasis interaksi diskrit dan tidak berkelanjutan saat pengguna melakukan beberapa tugas berbasis input seperti mengarahkan kumparan ke tombol, mengklik tombol yang dinonaktifkan, dan pengenalan bentuk tinta yang berhasil.

Daftar lengkap bentuk gelombang yang didukung untuk perangkat haptik pena di bawah ini:

Gelombang Deskripsi Halaman ID Wajib/Opsional
WAVEFORM_NONE No-op. Seharusnya tidak berdampak pada status bermain bentuk gelombang yang sedang berlangsung 0x0E 0x1001 Wajib
WAVEFORM_STOP Menghentikan pemutaran bentuk gelombang yang sedang berlangsung 0x0E 0x1002 Wajib
WAVEFORM_CLICK Membuat umpan balik "klik" singkat. Fallback default saat bentuk gelombang umpan balik interaksi yang dipilih oleh aplikasi tidak didukung oleh pena haptic 0x0E 0x1003 Wajib
WAVEFORM_INKCONTINUOUS Mensimulasikan nuansa penintaan dengan pena titik bola fisik. Mundur default saat bentuk gelombang penintaan tidak didukung oleh pena haptic 0x0E 0x100B Wajib
WAVEFORM_SUCCESS Sinyal haptik yang kuat untuk memberi tahu pengguna bahwa tindakan telah berhasil 0x0E 0x1009 Opsional
WAVEFORM_ERROR Sinyal haptik yang kuat untuk memberi tahu pengguna bahwa tindakan telah gagal, atau terjadi kesalahan 0x0E 0x100A Opsional
WAVEFORM_HOVER Sinyal haptik saat pengguna mengarahkan kursor ke elemen UI interaktif dengan pena haptic 0x0E 0x1008 Opsional
WAVEFORM_PRESS Sinyal haptik ketika pengguna menekan elemen UI interaktif dalam tindakan bertahap (lihat Rilis) 0x0E 0x1006 Opsional
WAVEFORM_RELEASE Sinyal haptik saat pengguna merilis elemen UI interaktif dalam tindakan bertahap (lihat Tekan) 0x0E 0x1007 Opsional
WAVEFORM_PENCILCONTINUOUS Sinyal haptik berkelanjutan saat pengguna memilih pensil sebagai alat penintaan 0x0E 0x100C Opsional
WAVEFORM_MARKERCONTINUOUS Sinyal haptik berkelanjutan saat pengguna memilih penanda sebagai alat penintaan 0x0E 0x100D Opsional
WAVEFORM_CHISELMARKERCONTINUOUS Sinyal haptik berkelanjutan saat pengguna memilih penanda/penyorot pahat sebagai alat penintaan 0x0E 0x100E Opsional
WAVEFORM_BRUSHCONTINUOUS Sinyal haptik berkelanjutan saat pengguna memilih sikat sebagai alat penintaan 0x0E 0x100F Opsional
WAVEFORM_ERASERCONTINUOUS Sinyal haptik berkelanjutan saat pengguna memilih penghapus sebagai alat penintaan 0x0E 0x1010 Opsional
WAVEFORM_SPARKLECONTINUOUS Sinyal haptik berkelanjutan untuk alat tinta khusus, seperti kuas multi-warna 0x0E 0x1011 Opsional

Catatan

Meskipun tidak diperlukan, didorong untuk juga menerapkan bentuk gelombang enumerasi lainnya untuk memberikan pengalaman pengguna yang lebih lengkap. Secara khusus, WAVEFORM_PRESS dan WAVEFORM_RELEASE sangat disarankan karena mereka memberikan umpan balik interaksi yang berharga.

Baik WAVEFORM_NONE maupun WAVEFORM_STOP diperlukan untuk semua perangkat haptik yang mematuhi HID. Ordinal 1 dan 2 secara implisit diatur ke WAVEFORM_NONE dan WAVEFORM_STOP. Mereka tidak perlu dideklarasikan dalam Daftar Bentuk Gelombang atau Daftar Durasi. Daftar Bentuk Gelombang mendeklarasikan bentuk gelombang yang didukung dengan minimum fisik dan maksimum setiap ordinal dalam daftar.

Daftar Durasi

Penggunaan Daftar Durasi mewakili kumpulan durasi untuk bentuk gelombang yang didukung dalam daftar Bentuk Gelombang, diurutkan menggunakan ordinal. Unit untuk durasi bentuk gelombang adalah milidetik, dan durasi harus berupa nilai non-nol positif untuk bentuk gelombang yang tidak berkelanjutan. Jika bentuk gelombang berkelanjutan (akan diputar sampai dihentikan oleh host atau Waktu Cutoff Bentuk Gelombang terlampaui), maka durasinya didefinisikan sebagai nol.

WAVEFORM_NONE dan WAVEFORM_STOP diasumsikan memiliki durasi nol. Mereka tidak perlu dideklarasikan dalam Daftar Durasi.

Intensitas

Penggunaan Intensitas mewakili persentase intensitas maksimum untuk diterapkan pada bentuk gelombang. Nilai ini harus bervariasi antara 0 dan 100 persen. 100 persen menunjukkan bentuk gelombang akan dipicu oleh perangkat pada kekuatan maksimumnya, dan 0 persen menunjukkan transduser haptik tidak diaktifkan.

Jumlah Ulangi

Penggunaan Jumlah Berulang menunjukkan berapa kali untuk mengulangi bentuk gelombang. Jumlah Ulangi nol menunjukkan bentuk gelombang Pemicu Manual hanya boleh diputar satu kali (tidak ada pengulangan). Jika Waktu Cutoff Bentuk Gelombang telah terlampaui, diharapkan pengulangan yang tidak lengkap akan diabaikan.

Periode Pengambilan

Penggunaan Periode Pengambilan mewakili jumlah waktu perangkat untuk menunggu sebelum mengulangi bentuk gelombang Pemicu Manual dalam laporan output, sesuai nilai yang ditentukan oleh Jumlah Berulang. Unit untuk nilai ini adalah milidetik. Jika Periode Pengambilan lebih kecil dari durasi bentuk gelombang yang dimainkan, bentuk gelombang harus dihentikan dan dimulai ulang pada periode waktu yang ditunjukkan oleh periode pengambilan.

Waktu Cutoff Bentuk Gelombang

Penggunaan Waveform Cutoff Time mewakili jumlah waktu maksimum perangkat akan memungkinkan bentuk gelombang Pemicu Manual diulang sebelum mengakhiri pemutaran. Ini adalah nilai konstan untuk perangkat dan mencakup bentuk gelombang berkelanjutan tanpa durasi yang ditetapkan, dan bentuk gelombang dengan durasi diskrit yang diatur untuk diulang berkali-kali. Unit untuk nilai ini adalah milidetik.

Laporan Output Haptic

Host menggunakan penggunaan berikut dalam laporan output untuk mengeluarkan peristiwa umpan balik haptik ke perangkat Haptic Pen. Beberapa penggunaan wajib untuk kompatibilitas dengan implementasi host Windows.

Anggota Deskripsi Halaman ID Wajib/Opsional
Pemicu Manual Bentuk gelombang untuk diaktifkan sebagai perintah eksplisit dari host 0x0E 0x21 Wajib
Intensitas Intensitas bentuk gelombang Pemicu Manual sebagai persentase 0x0E 0x23 Wajib
Jumlah Ulangi Frekuensi memutar bentuk gelombang Pemicu Manual setelah pemutaran awal 0x0E 0x24 Opsional
Periode Pengambilan Durasi waktu untuk menunggu sebelum mengambil Kembali Pemicu Manual saat mengulangi 0x0E 0x25 Opsional

Pemicu Manual

Penggunaan Pemicu Manual mewakili penggunaan bentuk gelombang yang didukung dari daftar bentuk gelombang yang telah diminta untuk dimainkan oleh host. Ketika laporan output yang berisi Pemicu Manual selain WAVEFORM_NONE dikirim ke perangkat, laporan tersebut harus segera mulai memutar bentuk gelombang yang ditentukan dengan properti tambahan yang disertakan dalam laporan output (Intensitas, Jumlah Ulang, Periode Pengambilan). Saat laporan output berisi Pemicu Manual WAVEFORM_STOP, pemutaran bentuk gelombang yang sedang berlangsung harus dihentikan.

Untuk penggunaan Intensitas, Jumlah Ulang, dan Periode Pengambilan, silakan lihat bagian sebelumnya sehubungan dengan laporan fitur output.

Memulai dan Menghentikan Haptik

Diagram alur di bawah ini menjelaskan kapan sinyal haptik pena harus dikonfigurasi, dibersihkan, dimulai, dan dihentikan.

Berbagai status haptik yang dijelaskan di bawah ini adalah:

  • Bermain: Pena secara aktif memainkan bentuk gelombang haptik
  • Dijeda: Pena dikonfigurasi dengan bentuk gelombang, tetapi tidak secara aktif memutarnya
  • Dihentikan: Pena tidak dikonfigurasi dengan bentuk gelombang dan tidak secara aktif memutar apa pun

Untuk status pena sehubungan dengan digitzer, silakan merujuk ke Windows Pen States.

Catatan

Ketika pena keluar dari jangkauan, disarankan, tetapi tidak diperlukan, untuk menghapus konfigurasi haptik. Ini disampaikan dalam diagram di bawah ini oleh dua jalur alternatif yang keluar dari "Pena: Dalam rentang; Haptics: Jeda" status ketika pena keluar dari jangkauan.

Catatan

Host kapan saja dapat meminta bentuk gelombang non-berkelanjutan untuk dimainkan. Dalam peristiwa itu, pena harus memutarnya dan kemudian kembali ke status sebelumnya.

Catatan

Host hanya akan mengonfigurasi bentuk gelombang berkelanjutan. Bentuk gelombang diskrit/non-berkelanjutan hanya akan dipicu secara manual.

Diagram status pena haptik

Koleksi Keyboard (Opsional)

Fitur opsional untuk mengaktifkan pelaporan klik tombol tail-end ke host melalui laporan keyboard HID.

Perangkat yang kompatibel akan melaporkan 3 kombinasi keyboard berbeda yang sesuai dengan 3 tindakan tombol yang berbeda melalui perangkat keyboard Bluetooth HID yang diekspos ke host. Tindakan dan kombinasi keyboard yang sesuai diuraikan di bawah ini:

Tindakan Tombol Kombinasi Kunci
Klik Tunggal WIN+F20
Klik Ganda WIN+F19
Tekan dan Tahan Win+F18

Implementasi Tombol Bluetooth

Untuk mengimplementasikan tombol Bluetooth tail-end, perangkat akan melaporkan 3 kombinasi keyboard berbeda yang sesuai dengan 3 tindakan tombol yang berbeda melalui perangkat keyboard HID Bluetooth LE yang terekspos ke host. Tindakan dan kombinasi keyboard yang sesuai diuraikan di bawah ini:

Tindakan Tombol Bluetooth Kombinasi Kunci untuk Laporan
Klik tunggal WIN+F20
Klik dua kali WIN+F19
Tekan dan tahan WIN+F18

Pena Stowage

Dimulai dengan Windows 10, versi 1903, Windows mendukung pemberitahuan untuk perangkat yang menggabungkan pen stowage yang kompatibel. Mekanisme ini bergantung pada perangkat keras yang mendeteksi pena dihapus atau diganti dan menghasilkan laporan keyboard HID yang sesuai untuk sepasang kombinasi pintasan. Untuk memberi sinyal dok (pena diganti dalam stowage), laporkan WIN+CTRL+F20 dan untuk memberi sinyal undock (pena dihapus dari stowage), laporkan WIN+CTRL+F19. Ini dapat diimplementasikan dengan firmware atau driver.

Peristiwa undock/dock ini memunculkan/menutup menu ruang kerja tinta Shell. Dimulai dengan Windows 10, Office versi 2004 juga bereaksi terhadap peristiwa ini dengan menggunakan API platform yang memungkinkan pengembang untuk memperluas aplikasi mereka untuk kesadaran tentang peristiwa stowage. Tidak ada dukungan untuk mengkueri apakah pena ada di dok, aplikasi hanya diberi tahu tentang penghapusan dan mengembalikan peristiwa jika berada di latar depan.

Contoh Deskriptor Laporan HID

05,0D,                      // Usage Page (Digitizers)
09,20,                      // Usage (Stylus)
A1,01,                      // Collection (Application)
85,40,                      //   Report ID (64)
95,01,                      //   Report Count (1)
75,20,                      //   Report Size (32)
17,00,00,00,80,             //   Logical Minimum (-2147483648)
27,FF,FF,FF,7F,             //   Logical Maximum (2147483647)
09,5B,                      //   Transducer Serial Number
81,02,                      //   Input (Data,Var,Abs)
75,10,                      //   Report Size (16)
15,01,                      //   Logical Minimum (1)
27,FF,FF,00,00,             //   Logical Maximum (65535)
09,91,                      //   Transducer Vendor ID
81,02,                      //   Input (Data,Var,Abs)
05,0E,                      //   Usage Page (Haptics)
09,01,                      //   Usage (0x01)
A1,02,                      //   Collection (Logical)
85,41,                      //     Report ID (65)
95,01,                      //     Report Count (1)
75,08,                      //     Report Size (8)
15,01,                      //     Logical Minimum (1)
26,FF,00,                   //     Logical Maximum (255)
09,24,                      //     Usage (0x24)
B1,02,                      //     Feature (Data,Var,Abs)
09,24,                      //     Usage (0x24)
91,02,                      //     Output (Data,Var,Abs)
09,23,                      //     Usage (0x23)
B1,02,                      //     Feature (Data,Var,Abs)
09,23,                      //     Usage (0x23)
91,02,                      //     Output (Data,Var,Abs)
15,01,                      //     Logical Minimum (1)
25,12,                      //     Logical Maximum (18)
09,20,                      //     Usage (0x20)
B1,02,                      //     Feature (Data,Var,Abs)
09,21,                      //     Usage (0x21)
91,02,                      //     Output (Data,Var,Abs)
15,00,                      //     Logical Minimum (0)
26,FE,00,                   //     Logical Maximum (254)
66,01,10,                   //     Unit (SI Linear)
55,FD,                      //     Unit Exponent (253)
35,00,                      //     Physical Minimum (0)
46,EC,09,                   //     Physical Maximum (2540)
09,28,                      //     Usage (0x28)
91,02,                      //     Output (Data,Var,Abs)
75,10,                      //     Report Size (16)
26,D0,07,                   //     Logical Maximum (2000)
46,D0,07,                   //     Physical Maximum (2000)
09,25,                      //     Usage (0x25)
91,02,                      //     Output (Data,Var,Abs)
09,25,                      //     Usage (0x25)
B1,02,                      //     Feature (Data,Var,Abs)
45,00,                      //     Physical Maximum (0)
85,42,                      //     Report ID (66)
75,20,                      //     Report Size (32)
17,42,00,0D,00,             //     Logical Minimum (852034)
27,42,00,0D,00,             //     Logical Maximum (852034)
09,22,                      //     Usage (0x22)
B1,02,                      //     Feature (Data,Var,Abs)
09,11,                      //     Usage (0x11)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
75,10,                      //       Report Size (16)
95,10,                      //       Report Count (16)
15,01,                      //       Logical Minimum (1)
27,FF,FF,00,00,             //       Logical Maximum (65535)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
05,0E,                      //     Usage Page (Haptics)
09,10,                      //     Usage (0x10)
A1,02,                      //     Collection (Logical)
05,0A,                      //       Usage Page (Ordinal)
16,03,10,                   //       Logical Minimum (4099)
26,FF,2F,                   //       Logical Maximum (12287)
19,03,                      //       Usage Minimum (0x03)
29,12,                      //       Usage Maximum (0x12)
B1,02,                      //       Feature (Data,Var,Abs)
C0,                         //     End Collection ()
C0,                         //   End Collection ()
C0                          // End Collection ()