我是整个 IOKit 的新手,所以对于我的问题可能有一些简单的解决方案。我正在玩通过 USB 执行 OBEX 的 Smartpen。到目前为止,我得到了一个OBEXSession
成功连接到设备的子类。
OBEXAddTargetHeader("LivescribeService",
strlen("LivescribeService"),
header);
CFMutableDataRef headerData = OBEXHeadersToBytes(header);
OBEXError error = [session OBEXConnect:kOBEXConnectFlagNone
maxPacketLength:maxPacketLength
optionalHeaders:(void *)CFDataGetBytePtr(headerData)
optionalHeadersLength:CFDataGetLength(headerData)
eventSelector:@selector(openedConnection)
selectorTarget:target
refCon:NULL];
之后error
为 0,openedConnection 消息被发送到目标。从我的 USB 管道写入和读取的数据看起来没问题。现在我想发送一个 GET,但不知何故失败了。
UInt32 connectionIDInt = 0x1;
const char *connectionID[4] = {0x0,0x0,0x0,0x0};
memcpy(connectionID, &connectionIDInt, 4);
OBEXAddConnectionIDHeader(connectionID, 4, header);
OBEXAddNameHeader(CFSTR("ppdata?key=pp0000"), header);
headerData = OBEXHeadersToBytes(header);
error = [session OBEXGet:YES
headers:(void *)CFDataGetBytePtr(headerData)
headersLength:CFDataGetLength(headerData)
eventSelector:@selector(OBEXGetHandler:)
selectorTarget:target
refCon:nil];
但这总是导致 akOBEXBadArgumentError
我完全不知道我做错了什么。我尝试使用不同的标题,它总是相同的,据我所知,这应该是正确的标题。或者还有什么其他的论点可能是错误的?
这可能与maxPacketLength
我用于连接的有关吗?我使用 1024 是因为我不知道该使用什么。我试图调用 -getMaxPacketLength 但它只返回 0。我是否必须重写该方法?或者我该如何处理该数据包长度?