Unterstützen von Bluetooth-Ereignisbenachrichtigungen
Wenn ein Profiltreiber eine Verbindung mit einem Remotegerät öffnet, sollte er sich selbst registrieren, um benachrichtigt zu werden, wenn die Verbindung geschlossen wird oder wenn andere Änderungen an der Verbindung auftreten. Wenn sich ein Profiltreiber selbst registriert, um eingehende Verbindungen zu akzeptieren, muss er außerdem benachrichtigt werden können, wenn ein Remotegerät versucht, eine Verbindung mit dem Gerät herzustellen.
Profiltreiber, die eine SCO-Verbindung (Synchronous Connection-Oriented) verwenden, implementieren und registrieren eine SCO-Rückruffunktion. Ein Clientprofiltreiber registriert die entsprechende Rückruffunktion, wenn er eine Verbindung mit einem Remotegerät anfordert.
Wenn ein SCO-Profiltreiber einen BRB_SCO_OPEN_CHANNEL BRB ausgibt, gibt er einen Zeiger auf seine SCO-Rückruffunktion im Rückrufelement der entsprechenden _BRB_SCO_OPEN_CHANNEL-Struktur des BRB an. Wenn das Remotegerät die SCO-Verbindungsanforderung akzeptiert, kann der Bluetooth-Treiberstapel Benachrichtigungen an den Profiltreiber über die Rückruffunktion senden, wenn eine Änderung an der SCO-Verbindung auftritt.
Weitere Informationen zum Erstellen von SCO-Verbindungen finden Sie unter Erstellen einer SCO-Clientverbindung mit einem Remotegerät.
Profiltreiber, die L2CAP-Verbindungen (Logical Link Controller und Adaptation Protocol) verwenden, implementieren und registrieren eine L2CAP-Rückruffunktion.
Wenn ein L2CAP-Profiltreiber einen BRB_L2CA_OPEN_CHANNEL BRB ausgibt, gibt er einen Zeiger auf seine L2CAP-Rückruffunktion im Rückrufelement der entsprechenden _BRB_L2CA_OPEN_CHANNEL-Struktur des BRB an. Wenn das Remotegerät die L2CAP-Verbindungsanforderung akzeptiert, kann der Bluetooth-Treiberstapel Benachrichtigungen über die Rückruffunktion an den Profiltreiber senden, wenn eine Änderung an der L2CAP-Verbindung auftritt.
Weitere Informationen zum Erstellen von L2CAP-Verbindungen finden Sie unter Erstellen einer L2CAP-Clientverbindung mit einem Remotegerät.
Wenn sich ein Profiltreiber registriert, um eingehende Verbindungsanforderungen (L2CAP, SCO) zu akzeptieren, muss er eine Rückruffunktion registrieren, um benachrichtigt zu werden, wenn ein Remotegerät versucht, eine Verbindung mit dem Gerät herzustellen.
Profiltreiber, die L2CAP verwenden, geben ihre L2CAP-Rückruffunktion im IndicationCallback-Member der _BRB_L2CA_REGISTER_SERVER-Struktur an. Der Bluetooth-Treiberstapel kann dann die Rückruffunktion aufrufen, um den Profiltreiber zu benachrichtigen, wenn ein Remotegerät versucht, eine L2CAP-Verbindung mit dem Profiltreiber zu initiieren.
Profiltreiber, die SCO verwenden, geben ihre SCO-Rückruffunktion im IndicationCallback-Member der _BRB_SCO_REGISTER_SERVER-Struktur an. Der Bluetooth-Treiberstapel kann dann die Rückruffunktion aufrufen, um den Profiltreiber zu benachrichtigen, wenn ein Remotegerät versucht, eine SCO-Verbindung mit dem Profiltreiber herzustellen.
Nachdem der Profiltreiber die entsprechende Rückruffunktion registriert hat, kann der Bluetooth-Treiberstapel auch den Profiltreiber benachrichtigen, wenn über die offene Verbindung ein Ereignis auftritt.
Hinweis
Ein Profiltreiber kann die gleiche Rückruffunktion registrieren, um Änderungsbenachrichtigungen zu einem geöffneten Kanal und zu Remotegeräten zu senden, die versuchen, eine Verbindung mit dem Kanal herzustellen.
Für L2CAP-Verbindungen akzeptiert die L2CAP-Rückruffunktion drei Parameter:
Der Kontext, der für die L2CAP-Verbindung definiert ist. Bei BRB_L2CA_REGISTER_SERVER Anforderungen ist dieser Kontext der Wert, der im IndicationCallbackContext-Member der _BRB_L2CA_REGISTER_SERVER-Struktur übergeben wird, die mit der Anforderung übergeben wird. Bei BRB_L2CA_OPEN_CHANNEL - oder BRB_L2CA_OPEN_CHANNEL_RESPONSE-Anforderungen ist dieser Kontext der Wert, der im CallbackContext-Member der _BRB_L2CA_OPEN_CHANNEL-Struktur übergeben wird, die mit der Anforderung übergeben wird.
Ein Wert aus der INDICATION_CODE-Enumeration , der den Typ des Benachrichtigungsereignisses der eingehenden L2CAP-Verbindungs- oder Bindungszustandsänderung angibt.
Ein Zeiger auf eine INDICATION_PARAMETERS-Struktur , die die Parameter enthält, die dem Benachrichtigungsereignis zugeordnet sind.
Der im Indication-Parameter der L2CAP-Rückruffunktion übergebene Wert gibt an, welcher Union-Member in der Parameterunion des Parameters-Parameters vom Profiltreiber verwendet werden soll.
Wenn der Wert des Indication-Parameters gleich ist... | ... Verwenden Sie den folgenden Union-Member des Parameters-Parameters . |
---|---|
IndicationRemoteConnect | Herstellen einer Verbindung |
IndicationRemoteConfigRequest | ConfigRequest |
IndicationRemoteConfigResponse | ConfigResponse |
IndicationFreeExtraOptions | FreeExtraOptions |
IndicationRemoteDisconnect | Disconnect (Trennen) |
IndicationRecvPacket | RecvPacket |
Für SCO-Verbindungen akzeptiert die SCO-Rückruffunktion drei Argumente:
Der Kontext, der für die SCO-Verbindung definiert ist. Bei BRB_SCO_REGISTER_SERVER Anforderungen ist dieser Kontext der Wert, der im IndicationCallbackContext-Member der _BRB_SCO_REGISTER_SERVER-Struktur übergeben wird, die mit der Anforderung übergeben wird. Bei BRB_SCO_OPEN_CHANNEL - oder BRB_SCO_OPEN_CHANNEL_RESPONSE-Anforderungen ist dieser Kontext der Wert, der im CallbackContext-Member the_BRB_SCO_OPEN_CHANNEL Struktur übergeben wird, die mit der Anforderung übergeben wird.
Ein Wert aus der SCO_INDICATION_CODE-Enumeration , der den Typ der Benachrichtigung über die änderung des eingehenden SCO-Verbindungs- oder Bindungsstatus angibt.
Ein Zeiger auf eine SCO_INDICATION_PARAMETERS-Struktur , die die Parameter enthält, die dem Benachrichtigungsereignis zugeordnet sind.
Der im Parameter Indication der SCO-Rückruffunktion übergebene Wert gibt an, welcher Union-Member in der Parameterunion des Parameters-Parameters vom Profiltreiber verwendet werden soll.
Wenn der Wert des Indication-Parameters gleich ist... | ... Verwenden Sie den folgenden Union-Member des Parameters-Parameters . |
---|---|
ScoIndicationRemoteConnect | Herstellen einer Verbindung |
ScoIndicationRemoteDisconnect | Disconnect (Trennen) |
Behandeln Plug & Play Entfernungs-IRPs
Profiltreiber sollten alle IRP_MN_SURPRISE_REMOVAL IRPs sofort über den Stapel übergeben, um vom Bluetooth-Treiberstapel verarbeitet zu werden. Versuchen Sie nicht, offene Kanäle im Rahmen der Verarbeitung eines Überraschungsentfernungs-IRP zu schließen. Erstellen und senden Sie keine weiteren BRBs, die Daten an das zugrunde liegende Funkgerät senden, nachdem Sie ein Überraschungsentfernungs-IRP erhalten haben. Profiltreiber können jedoch andere Bereinigungen durchführen, während ein Überraschungsentfernungs-IRP verarbeitet wird.
Nachdem der Bluetooth-Treiberstapel die überraschende Entfernungs-IRP erhalten hat, übergibt er ScoIndicationRemoteDisconnect an die SCO-Rückruffunktion , die vom Profiltreiber angegeben wurde, als der Profiltreiber eine BRB_SCO_OPEN_CHANNEL - oder BRB_SCO_OPEN_CHANNEL_RESPONSE-Anforderung erstellt und gesendet hat, um alle derzeit geöffneten SCO-Kanäle zu schließen. Ebenso übergibt der Bluetooth-Treiberstapel IndicationRemoteDisconnect an die L2CAP-Rückruffunktion , die vom Profiltreiber angegeben wurde, als der Profiltreiber eine BRB_L2CA_OPEN_CHANNEL - oder BRB_L2CA_OPEN_CHANNEL_RESPONSE anforderung erstellt und gesendet hat, um alle derzeit geöffneten L2CAP-Kanäle zu schließen.
Profiltreiber sollten die Registrierung aller Server aufheben, wenn IRP_MN_REMOVE_DEVICE IRPs verarbeitet werden. Um die Registrierung eines SCO-Servers aufzuheben, sollte ein Profiltreiber eine BRB_SCO_UNREGISTER_SERVER-Anforderungerstellen und senden. Um die Registrierung eines L2CAP-Servers aufzuheben, sollte ein Profiltreiber eine BRB_L2CA_UNREGISTER_SERVER-Anforderung erstellen und senden.