Ich weiß, dass die Bluetooth-Funktionen des iPhone erst ab Version 3.0 über das SDK verfügbar sein werden, aber wie lange sollte es dauern, bis Geräte in diesem Bereich gefunden werden? Ist es abhängig von der Anzahl der Geräte in der Umgebung? Wenn sich ungefähr 5 Geräte in Reichweite befinden, sollte ein Scan alle 5 Sekunden oder & gt; 30 Sekunden dauern?
Ich weiß, dass es viele unbekannte Faktoren gibt, aber ich versuche herauszufinden, ob ich beim Start einen Bluetooth-Scan machen kann, wenn die Zeit minimal ist, oder wenn ich dem Benutzer sagen muss, dass er einen Scan durchführen soll und es könnte eine lange Verzögerung geben. Ich kann das nicht in der realen Welt testen, da die anderen Bluetooth-Geräte nicht verfügbar sind, aber ich versuche, ein Gefühl dafür zu bekommen, wie es gestaltet werden könnte.
Nicht sicher, was die API Ihnen erlauben wird, aber der zugrunde liegende Bluetooth Host Controller Interface (HCI) -Befehl ist der 'Abfragebefehl'
Damit können Sie nach Geräten entweder für eine feste Zeit und / oder eine feste Anzahl von Antworten fragen.
Ich bin ein Bluetooth-Neuling, kein Experte, aber ...
Um mindestens 1 Antwort von einem Bluetooth-Gerät zu erhalten, das sich in einem Energiesparmodus befindet, dauert es 1,28 Sekunden. Daher beträgt die Abfragezeit ein Vielfaches dieser Zeitspanne bis zu einem Maximum von 61,44 Sekunden (48 Perioden), also der Zeitbereich 1 (1,28 Sekunden) bis 48 (61,44 Sekunden).
Es könnte jedoch mehrere Geräte geben, die in einem einzigen 1,28-Sekunden-Zeitraum antworten könnten.
Sie können auch die Anzahl der Antworten angeben, die Sie akzeptieren (1..255) oder 0 für unbegrenzt, z. bis die Zeit abläuft.
Sie können eine Anfrage auch abbrechen, wenn Sie ein bestimmtes Gerät gefunden haben, nach dem Sie gesucht haben.
Unwissenschaftlicher Test von meinem Schreibtisch aus mit einem CSR-Bluetooth-Chip mit Bluetooth 2.1 + EDR-Firmware, der eine Anfrage auf dem Chip mit Debug-Ausgabe über den Chip-UART ausführt. Lief jede Anfrage 10 Mal und nahm einen Durchschnitt der Ergebnisse:
Ich sage "unique", tatsächlich wiederholen die Ergebnisse viele der gleichen Adressen immer wieder, dies kann jedoch von der Implementierung abhängig sein und die Apple API gibt nur eindeutige Adressen zurück.
Dies ist jedoch nicht repräsentativ für die "reale Welt", da die meisten Bluetooth-Geräte hier (mein Büro) nicht in einem Energiesparmodus sind. Ich denke, ich könnte PCs, Laptops und Testkits nach Geräteklasse filtern. Das würde Mobiltelefone, Headsets, die auffindbar waren usw. ...
Die Abfrage kann auch mit RSSI kombiniert werden, um die Geräte mit dem stärksten Signal zu erhalten, aber sie müssen nicht unbedingt die nächsten sein.
Für Ihr Szenario möchten Sie vielleicht eine Anfrage basierend auf Zeit und Anzahl der Geräte, z. B. 4 * 1,28 Sekunden oder 10 Geräte.
Zusammenfassend: Die kürzeste Zeit, die Sie für eine Anfrage benötigen, ist 1,28 Sekunden und das könnte 10 +/- bekommen? Geräte in der Gegend, wenn sie wach und in der Nähe sind.
Wenn Sie eine gesättigte Bluetooth-Umgebung oder einen Mikrowellenofen im selben Raum haben, kann es länger dauern, bis Sie alle Geräte in Reichweite gefunden haben.
Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich könnte etwas hinzufügen für jeden, der diese Frage später findet.
Wie Simon Peverett erwähnt, wird die Geräteerkennung durch einen zugrunde liegenden "Abfragebefehl" ausgeführt, der von Bluetooth ausgeführt wird Host-Controller-Schnittstelle. In der Bluetooth-Spezifikation V4.0, Band 2, Teil E, Abschnitt 6.1.4 heißt es in der Spezifikation:
Wenn die allgemeine Abfrage von einem Bluetooth-Gerät ausgelöst wird, wird der Status INQUIRY angezeigt dauert TGAP (100) oder länger, es sei denn, der Anfragende sammelt genügend Antworten und bestimmt, dass der INQUIRY-Status früher abgebrochen wird.
Ansonsten wird TGAP (100) mit 10,24 Sekunden erklärt und als der empfohlene Wert für die Zeitspanne beschrieben, die ein Bluetooth-Gerät die Geräteerkennung durchführt.
Mit anderen Worten, eine gute Grundlinie für die minimale Zeitspanne, um eine Anfrage durchzuführen, ist 10,24 Sekunden oder 8 der 1,28 Sekunden, in denen das Abfragekommando die Zeit misst.