2012-01-11 4 views
3

私はIOKitのすべてのものを初めて使いました。そのため、私の問題にはほんのわずかな解決策があるかもしれません。私はUSB経由でOBEXを行うSmartpenで遊んでいます。これまでは、OBEXSessionのサブクラスを取得して、デバイスに正常に接続しました。IOKitを使用したUSB経由のOBEX

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

+0

これはデバイスによって異なる可能性があります...デバイスのリンク/オンラインドキュメントが役立つ可能性があります... – Yahia

答えて

1

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

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

今すぐデバイスへの接続が正常に機能します。

関連する問題