Как отправлять и получать данные с внешнего аксессуара асинхронизации

Меня смущает отправка и получение данных от внешнего аксессуара асинхронным способом. Я использую MFi External Accessory, я проверял EADemo, но похоже, что отправленные и полученные данные синхронизированы способом. Любые предложения по этому поводу, заранее спасибо.

1 ответ

Решение

Прежде всего вы должны присоединить потоки ввода / вывода к runLoop:

[[session inputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[session inputStream] open];
[[session outputStream] scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[[session outputStream] open];

Станьте их делегатом:

[[session outputStream] setDelegate:self];
[[session inputStream] setDelegate:self];

Как только вы станете делегатом, вы должны реализовать этот метод:

-(void)stream:handleEvent:{};

Вот пример:

-(void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)_event {
    switch (_event)
    {
        case NSStreamEventHasBytesAvailable:
            /* This part will be executed every time your rx buffer contains at least 1 byte */
            switch(state) {
                uint8_t ch;
                /* Read byte per byte */
                [stream read:&ch maxLength:1];
                /* now ch contains a byte from your MFI device
                ** and 'read' function decrease the length of the rx buffer by -1 */
            }
            break;
    }
}

Это команда для записи данных в поток:

/* txQueue is a NSData containing data to transmit. */
[[session outputStream] write:(uint8_t *)[txQueue bytes] maxLength:[txQueue length]];
Другие вопросы по тегам