2013-06-07 6 views
14

L'app iOS (iPhone o iPad) può disporre contemporaneamente di gestore centrale Core Bluetooth (BTLE) e oggetti gestione periferiche?iOS può fare il lavoro centrale e periferico sulla stessa app allo stesso tempo?

Possono funzionare in modo asincrono o il thread dell'app principale deve renderli condivisibili (passare avanti e indietro).

Condivisione algoritmo concettuale sarebbe: gestore periferica disabilitare, abilitare direttore centrale e fare le funzioni centrali, e poi, disabilitare mons centrale, abilitare mgr periferica e fare funzioni periferiche (vale a dire, inviare nofications automatici, e attendere e rispondere a comandi remoti caratteristici), ripetizione ...

BASSA dettagli cruenti: Abbiamo un sistema locale con più dispositivi iOS e molteplici dispositivi non iOS che devono inter-comunicare BTLE. I dispositivi non-iOS utilizzano tutti il ​​chip Bluetooth LE di Broadcom BCM20732. Ma l'hardware non è ancora pronto, quindi sto usando i dispositivi iOS per emulare il non-iOS, che richiede funzionalità simultanea centrale e periferica, ad es. 1. funge da centrale per interrogare periodicamente più dispositivi non iOS nel sistema. 2. Agire come periferica per rispondere alle richieste di dati dai dispositivi di interfaccia utente iOS.

+0

Sto progettando un'app di gioco e i due dispositivi collegati a BTLE devono passare automaticamente da centrale a periferica, quali sono i suggerimenti? –

risposta

13

Ho funzionato. Ho appena iniziato con il "BTLE central peripheral transfer" di Apple, quindi ho prima eliminato il bug -35 db che ha (cerca "-35", quindi elimina if() {return}), quindi ho combinato entrambi i file. e the peripheral.m in un singolo file UIViewController .m, aggiunto un UISwitch per selezionare uno dei due UUID di servizio, e modificato il mittente della periferica per incrementare automaticamente il campo di testo (dopo averlo avviato in ASCII '0').

Ho avuto due mini iPad continuamente ciascuno inviando il numero crescente all'altro lato. Ha ottenuto oltre 900 trasferimenti e poi si è bloccato. Ma ho visto Apple "BTLE c p transfer" che si blocca sempre dopo pochi minuti, richiedendo il riavvio di iPad per continuare. Ho terminato l'app sia con l'iPad che con il ciclo, ho riavviato l'app e hanno ottenuto fino a 1600 incrementi, quindi sono stati bloccati.

Per risolvere il problema, aggiungerò il controllo delle risorse per evitare che i responsabili di centrali e periferiche si colleghino contemporaneamente, come da raccomandazione di Abo.

+4

Aggiornamento agosto 2013: la comunicazione tra più dispositivi iOS, ognuno dei quali utilizza sia la centrale che la periferica funziona senza errori. Hanno fatto test di longevità e non si rompono dopo ore di funzionamento. SUGGERIMENTO: Faccio un breve ritardo prima di passare da centrale a periferica e viceversa, altrimenti ci possono essere problemi. –

+2

SUGGERIMENTO 2: NSLOG() e printf() nel codice Gli eventi di callback Bluetooth faranno affondare la tua nave. Creare una funzione di spooler che memorizza questi messaggi, quindi farli stampare dal thread principale. –

+4

Ho sbagliato: NSLog() e printf() vanno bene negli eventi di callback. –

5

Sì, ma se il telefono è ora in modalità periferica ed è connesso, è necessario assicurarsi che si disconnetta prima di passare alla modalità centrale e provare a connettersi con altri dispositivi e viceversa.

+0

Ma la periferica non ha un comando per disconnettersi. Solo una centrale può disconnettersi. Quindi, i centralizzatori dovrebbero sempre disconnettersi dalle periferiche che altri centrali effettueranno il polling? –

+0

Sì, è necessario in qualche modo inviare un messaggio al dispositivo centrale, per disconnettersi. – Aboelseoud