3

私は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 しか返されません。そのメソッドをオーバーライドする必要がありますか? または、そのパケット長をどのように処理する必要がありますか?

4

1 に答える 1

1

最後に私はそれを理解しました。問題は 2 つの部分で構成されていました。最初の問題はOBEXAddTargetHeader("LivescribeService", strlen("LivescribeService"), header);. strlen は文字列の長さであり、使用されるバイト数 (0x00 文字列ターミネータの場合は +1) ではないため、デバイスは文字列が終了することを期待しているため、エラーで応答しました。残念ながら、OBEXSession はデバイスから返されたエラーを無視しました。

2番目の問題は、受信したデータをメソッドkOBEXTransportEventTypeStatusの代わりに送信kOBEXTransportEventTypeDataReceivedしたclientHandleIncomingData:ことです。

これで、デバイスへの接続が期待どおりに機能します。

于 2012-01-20T08:18:43.157 に答える