macOS 应用程序和扩展:如何将 x,y 数据从 HIDStylusDriver 发送到 StylusApp 到 Pen/Draw?

问题描述 投票:0回答:1

我正在使用 HIDStylusDriver处理手写笔输入:

Screenshot of HIDStylusDriver project in XCode

我有触摸屏,我想要:

  1. 控制屏幕。我可以成功启用扩展并控制触摸屏。
  2. 在此屏幕上绘图。为此,我需要将 X,Y 坐标发送到 StylusApp (AppKit),但我无法在 Swift 中执行此操作。

我可以使用默认代码记录 X、Y 坐标:

static void printStylus(IOHIDDigitizerStylusData *data)
{
    os_log(OS_LOG_DEFAULT, "dispatch stylus: id: %d x: %d y: %d range: %d tip: %d barrel: %d invert: %d erase: %d tp: %d tx: %d ty: %d tw: %d tc: %d pc: %d rc: %d",
           data->identifier, data->x, data->y, data->inRange, data->tip, data->barrelSwitch, data->invert, data->eraser, data->tipPressure,
           data->tiltX, data->tiltY, data->twist, data->tipChanged, data->positionChanged, data->rangeChanged);
}

但我不知道如何将其发送到AppKit to Pen。

我尝试过的:我研究了驱动程序和客户端之间的通信(source),但 HID 驱动程序似乎不支持与客户端应用程序的通信,因此我无法发送 X ,将 Stylus 应用程序 (AppKit) 的 Y 坐标设置为笔/绘图 - 因为我无法覆盖 HIDStylusDriver。

我的期望:我想将 X,Y 坐标从 HIDStylusDriver 发送到 Stylus App (AppKit) 到 Pen/Draw。

appkit hid driverkit usb-hid macos-app-extension
1个回答
0
投票

我收到了一个解决方案,我只需安装 HIDDriver,然后它就会调度DigitizerStylusEvent:dispatchDigitizerStylusEvent(timestamp, stylusData); 然后我可以从 DragGesture 获取 x、y 坐标。 但另一件事是我还需要获取触摸宽度以发送到客户端应用程序,这将是完美的。 不过我也觉得很满足了,谢谢大家。

剩下的一个问题是:我将使用客户端和应用程序之间的通信(https://developer.apple.com/documentation/driverkit/communicating_ Between_a_driverkit_extension_and_a_client_app)来发送触摸宽度(笔/铅笔)。但是这个plist不满足用户客户端连接(使用IOServicePen):

<key>IOKitPersonalities</key>
<dict>
    <key>HIDStylusDriver</key>
    <dict>
        <key>UserClientProperties</key>
        <dict>
            <key>IOUserClass</key>
            <string>NullDriverUserClient</string>
            <key>IOClass</key>
            <string>IOUserUserClient</string>
        </dict>
        <key>CFBundleIdentifier</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
        <key>IOClass</key>
        <string>AppleUserHIDEventService</string>
        <key>IOProviderClass</key>
        <string>IOHIDInterface</string>
        <key>IOResourceMatch</key>
        <string>IOKit</string>
        <key>IOUserClass</key>
        <string>HIDStylusDriver</string>
        <key>IOUserServerName</key>
        <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  <key>ProductID</key>
  <integer>8358</integer>
  <key>VendorID</key>
  <integer>1256</integer>
</dict>

如何编辑这个plist以满足IOServiceOpen,并且还可以使用AppleUserHIDEventService?

注意:我还没有请求权利,稍后我将请求分发的开发。

© www.soinside.com 2019 - 2024. All rights reserved.