私は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を返します。そのメソッドをオーバーライドする必要はありますか?または、どのようにパケットの長さに対処する必要がありますか?
これはデバイスによって異なる可能性があります...デバイスのリンク/オンラインドキュメントが役立つ可能性があります... – Yahia