iokitを使用してUSBを介してOBEX
質問
私は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
IS 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に戻ります。その方法をオーバーライドする必要がありますか?または、そのパケットの長さに対処するにはどうすればよいですか?
解決
最後に私はそれを理解しました。問題は2つの部分で構成されていました。最初の問題はでした OBEXAddTargetHeader("LivescribeService", strlen("LivescribeService"), header);
. 。 Strlenは文字列の長さであり、使用されるバイトの数(0x00文字列ターミネーターの+1)ではなく、文字列が終了すると予想されるため、デバイスはエラーで応答したためです。悲しいことに、Obsessionはデバイスから戻ったエラーを無視しました。
2番目の問題は、受信したデータをで送信したことでした kOBEXTransportEventTypeStatus
それ以外の kOBEXTransportEventTypeDataReceived
に clientHandleIncomingData:
方法。
これで、デバイスへの接続が期待どおりに機能します。