質問

私は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 それ以外の kOBEXTransportEventTypeDataReceivedclientHandleIncomingData: 方法。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top