私はIOKit全体に不慣れなので、私の問題に対するいくつかの簡単な解決策があるかもしれません. USB経由でOBEXを行うスマートペンで遊んでいます。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 しか返されません。そのメソッドをオーバーライドする必要がありますか? または、そのパケット長をどのように処理する必要がありますか?