gpt4 book ai didi

macos - 使用 IOKit 通过 USB 进行 OBEX

转载 作者:行者123 更新时间:2023-12-03 16:21:35 24 4
gpt4 key购买 nike

我对整个 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];

但这总是会导致 kOBEXBadArgumentError 并且我完全不知道我做错了什么。我尝试使用不同的标题,它总是相同的,据我所知,这应该是正确的标题。或者还有什么其他论点可能是错误的?

这可能与我用于连接的 maxPacketLength 有关吗?我使用 1024 因为我不知道该用什么。我尝试调用 -getMaxPacketLength 但只返回 0。我是否必须重写该方法?或者我该如何处理该数据包长度?

最佳答案

我终于明白了。问题由两部分组成。第一个问题是OBEXAddTargetHeader("LivescribeService", strlen("LivescribeService"), header); 。因为 strlen 是字符串的长度,而不是使用了多少字节(0x00 字符串终止符为 +1),所以设备响应错误,因为它期望字符串被终止。遗憾的是 OBEXSession 忽略了从设备返回的错误。

第二个问题是我用 kOBEXTransportEventTypeStatus 发送了收到的数据而不是kOBEXTransportEventTypeDataReceivedclientHandleIncomingData:方法。

现在与设备的连接按预期工作。

关于macos - 使用 IOKit 通过 USB 进行 OBEX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8823777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com