我在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
中有数据,因为如果我在调试模式下检查变量,我可以看到我期望的数据。
有什么想法吗?
谢啦,谢啦
1条答案
按热度按时间jaxagkaj1#
好吧,我这里有两个问题。
一个是在
output
变量中没有返回数据。数据在AsyncCallback
方法中返回。另外,我认为在调用
asynccompletion
时还有另一个问题因为我传递了一个大小为
32
的uint64_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
中获得呼叫