Question

Je suis nouveau à l'étoffe entière IOKit, donc il pourrait y avoir des solutions triviales pour mes problèmes. Je joue autour avec un stylo numérique qui fait OBEX sur USB. Jusqu'à présent, je suis une sous-classe de OBEXSession à succès se connecter au périphérique.

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

Après que error est 0 et le message openedConnection est envoyé à la cible. Les données qui sont écrites et lues à / de ma pipe USB semble ok. Maintenant, je voudrais envoyer une requête GET, mais qui ne parvient en quelque sorte.

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

Mais qui a toujours des résultats dans un kOBEXBadArgumentError et je n'ai absolument aucune idée de ce que je fais mal. J'ai essayé de jouer avec les en-têtes différents, il est toujours la même, et pour autant que je sache, cela devrait être l'en-tête correcte. Ou quel autre argument pourrait probablement tort?

peut-il avoir quelque chose à voir avec le maxPacketLength j'ai utilisé pour la connexion? J'utilisé 1024 parce que je ne savais pas quoi utiliser. J'ai essayé d'appeler -getMaxPacketLength mais retourne juste 0. Dois-je remplacer cette méthode? Ou comment dois-je faire face à cette longueur de paquet?

Était-ce utile?

La solution

Enfin, je compris. Le problème se composait de deux parties. Le premier problème a été OBEXAddTargetHeader("LivescribeService", strlen("LivescribeService"), header);. Parce que strlen est la longueur de la chaîne et non le nombre d'octets sont utilisés (+1 pour la fin de chaîne 0x00), le dispositif a répondu avec une erreur, car il attend la chaîne à mettre fin. Malheureusement, le OBEXSession simplement ignoré l'erreur qui est revenue de l'appareil.

Le deuxième problème était que j'ai envoyé les données reçues avec kOBEXTransportEventTypeStatus au lieu de kOBEXTransportEventTypeDataReceived à la méthode clientHandleIncomingData:.

Maintenant, la connexion à l'appareil fonctionne comme prévu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top