首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >支持IOKit的OBEX over USB

支持IOKit的OBEX over USB
EN

Stack Overflow用户
提问于 2012-01-12 01:26:07
回答 1查看 346关注 0票数 3

我对整个IOKit都是新手,所以我的问题可能会有一些微不足道的解决方案。我正在玩一个智能笔,它可以通过USB进行OBEX。到目前为止,我得到了OBEXSession的一个子类来成功地连接到这个设备。

代码语言:javascript
复制
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,但不知何故失败了。

代码语言:javascript
复制
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。我必须重写这个方法吗?或者我必须如何处理这样的数据包长度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-20 16:18:43

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

第二个问题是,我使用kOBEXTransportEventTypeStatus而不是kOBEXTransportEventTypeDataReceived将接收到的数据发送到clientHandleIncomingData:方法。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8823777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档