Я новичок во всем материале IOKit, поэтому могут возникнуть некоторые тривиальные решения для моих проблем. Я играю с Smartpen, который делает OBEX через USB. До сих пор я получил подкласс OBEXSession
, чтобы успешно подключиться к устройству.OBEX через USB с IOKit
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, и сообщение посылается 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. Нужно ли переопределять этот метод? Или как мне нужно иметь дело с этой длиной пакета?
Я подозреваю, что это может быть зависимым от устройства ... любая ссылка/документация на устройство может помочь ... – Yahia