Frage

Ich bin neu im gesamten Iokit -Zeug, also gibt es möglicherweise einige triviale Lösungen für meine Probleme. Ich spiele mit einem Smartpen herum, der über USB untersucht. Bisher bekam ich eine Unterklasse von OBEXSession Um erfolgreich eine Verbindung zum Gerät herzustellen.

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];

Danach error IS 0 und die OpenedConnection -Nachricht wird an das Ziel gesendet. Die Daten, die geschrieben und zu/von meiner USB -Pipe gelesen werden, sieht in Ordnung aus. Jetzt möchte ich ein Get senden, aber das versagt irgendwie.

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];

Aber das führt immer zu a kOBEXBadArgumentError Und ich habe absolut keine Ahnung, was ich falsch mache. Ich habe versucht, mit verschiedenen Headern herumzuspielen, es ist immer dasselbe, und soweit ich weiß, sollte dies der richtige Kopfball sein. Oder welches andere Argument könnte wahrscheinlich falsch sein?

Könnte dies etwas mit dem zu tun haben maxPacketLength Ich habe zum Anschließen verwendet? Ich habe 1024 verwendet, weil ich keine Ahnung hatte, was ich verwenden sollte. Ich habe versucht, die GetMaxPackTLength aufzurufen, aber das gibt nur 0 zurück. Muss ich diese Methode überschreiben? Oder wie muss ich mich mit dieser Paketlänge befassen?

War es hilfreich?

Lösung

Schließlich habe ich es herausgefunden. Das Problem bestand aus zwei Teilen. Das erste Problem war OBEXAddTargetHeader("LivescribeService", strlen("LivescribeService"), header);. Da Strlen die Länge der Zeichenfolge ist und nicht wie viele Bytes verwendet werden (+1 für den 0x00 -String -Terminator), reagierte das Gerät mit einem Fehler, da es erwartet, dass die Zeichenfolge beendet wird. Leider ignorierte die Obexsession nur den Fehler, der vom Gerät zurückkam.

Das zweite Problem war, dass ich die empfangenen Daten mit gesandt habe kOBEXTransportEventTypeStatus Anstatt von kOBEXTransportEventTypeDataReceived zum clientHandleIncomingData: Methode.

Jetzt funktioniert die Verbindung zum Gerät wie erwartet.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top