c++ DriverKit中的异步调用结构方法不返回分配的数据

zzoitvuj  于 2023-08-09  发布在  其他
关注(0)|答案(1)|浏览(103)

我在iPadOS中使用DriverKit。
我得到了一个同步读取数据的调用,它工作得很好。
所以我试着做异步的。
为此,我调用IOConnectCallAsyncStructMethod

ret = IOConnectCallAsyncStructMethod(connection, MessageType_AsyncReadRequest, callback_port, asynRequestRef, kIOAsyncCalloutCount, nullptr, 0, output, &outputSizeT);

字符串
其中:

arraySize = 248
uint64_t output[arraySize] = {}; 
size_t outputSizeT = sizeof(uint64_t) * arraySize;


当我从USB设备获取数据时,我将其返回为AsyncCompletion
有:

uint64_t *read // This will contain the data from the device

    const uint32_t size = 32;
    
    uint64_t asyncData[size] = { };
    memcpy(asyncData, read, (sizeof(uint64_t) * size));

        AsyncCompletion(ivars->readSampleCallbackAction, kIOReturnSuccess, asyncData, size);
        ivars->readSampleCallbackAction->release();


问题是IOConnectCallAsyncStructMethod的调用何时返回。ret将为0,但output将不包含数据。
我知道asyncData中有数据,因为如果我在调试模式下检查变量,我可以看到我期望的数据。
有什么想法吗?
谢啦,谢啦

jaxagkaj

jaxagkaj1#

好吧,我这里有两个问题。
一个是在output变量中没有返回数据。数据在AsyncCallback方法中返回。
另外,我认为在调用asynccompletion时还有另一个问题
因为我传递了一个大小为32uint64_t数组,可能会产生问题,因为最大值是16(https://developer.apple.com/documentation/driverkit/3325601-arguments_array_maximum/kiouserclientasyncargumentscountmax
https://developer.apple.com/documentation/driverkit/iouserclient/3325613-asynccompletion
如果将大小从const uint32_t size = 32;更改为const uint32_t size = 8;
我会在AsyncCallback中获得呼叫

相关问题