قلم

Android نسخه 6.0 و بالاتر از یک قالب داده استاندارد برای اتصالات قلم بلوتوث از طریق بلوتوث (BT)، بلوتوث کم انرژی (BTLE) یا USB پشتیبانی می کند. این پلتفرم زمان‌بندی را بین ورودی لمسی و داده‌های قلم مرتبط می‌کند و سپس داده‌های قلم را برای ارائه MotionEvents به برنامه فعال ارائه می‌دهد. بخش‌های زیر دستورالعمل‌هایی را برای اجراکنندگان دستگاه‌های OEM، سازندگان لوازم جانبی قلم و توسعه‌دهندگان اپلیکیشن‌های قلم ارائه می‌کنند.

دستورالعمل برای اجراکنندگان دستگاه های OEM

برای فعال کردن پشتیبانی از قلم بلوتوث، پیاده‌کننده‌های دستگاه OEM باید از بلوتوث پشتیبانی کنند (و برای سازگاری گسترده‌تر باید از BTLE پشتیبانی کنند). این پلتفرم جمع‌آوری داده‌ها، همبستگی زمان‌بندی و ارائه به برنامه را برای رویدادهای قلم پشتیبانی‌شده مدیریت می‌کند.

در 14 و بالاتر، StylusButtonInputEventTest رفتار یک قلم متصل را شبیه‌سازی می‌کند و آزمایش می‌کند که رویدادهای دکمه به درستی گزارش می‌شوند. به عنوان راه‌حلی برای نسخه‌های پایین‌تر، توصیه می‌کنیم یک لوازم جانبی قلم یا شبیه‌ساز ایجاد کنید که بتواند رویدادهای قلم را شبیه‌سازی کند.

رهنمودهایی برای سازندگان لوازم جانبی قلم

برای اجرای پشتیبانی در دستگاه قلم، پیاده‌کننده‌های دستگاه باید از توصیفگر دستگاه رابط انسانی Stylus (HID) که در زیر نشان داده شده است استفاده کنند تا نحوه نمایش داده‌های قلم (حساسیت فشار، پاک‌کن، دکمه‌ها، شناسه دستگاه، سطح باتری، وضعیت شارژ و غیره) را توضیح دهد. . دستگاه قلم اطلاعات HID را به دستگاه تلفن همراه Android ارسال می‌کند و پلتفرم را قادر می‌سازد تا داده‌های HID را با داده‌های لمسی از صفحه لمسی برای تولید رویدادهای قلم با استفاده از کلاس MotionEvent مرتبط کند. در اندروید 14 و بالاتر، فشار دادن دکمه روی قلم همچنین با استفاده از کلاس KeyEvent رویدادهای داخلی ایجاد می کند. داده ها را می توان از طریق بلوتوث (BT)، بلوتوث کم انرژی (BTLE) یا USB ارسال کرد.

نمونه توصیفگر HID

نمونه توصیفگر HID زیر تماس نوک، فشار، دکمه های اولیه و ثانویه، پاک کن و شماره سریال را گزارش می دهد. توصیفگر HID که وارد می‌کنید باید آنچه را که قلم از طریق بلوتوث گزارش می‌شود، دقیقاً منعکس کند، که می‌تواند زیرمجموعه‌ای از قابلیت‌های موجود باشد.
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
}

دستورالعمل هایی برای توسعه دهندگان برنامه قلم

پلتفرم اندروید به طور خودکار جفت شدن و همبستگی رویدادها را کنترل می کند، بنابراین برنامه های موجود و جدید به طور پیش فرض از قلم بلوتوث پشتیبانی می کنند. برای کسب اطلاعات بیشتر در مورد پشتیبانی از قلم در برنامه‌های Android، به مستندات برنامه‌نویس Android مراجعه کنید.