Condividi tramite


Supporto delle notifiche degli eventi Bluetooth

Quando un driver di profilo apre una connessione a un dispositivo remoto, deve essere registrato per ricevere una notifica quando la connessione viene chiusa o quando si verificano altre modifiche alla connessione. Inoltre, quando un driver di profilo si registra per accettare connessioni in ingresso, deve essere in grado di ricevere una notifica quando un dispositivo remoto tenta di connettersi.

I driver del profilo che usano la connessione sincrona Connection-Oriented (SCO) implementano e registrano una funzione di callback SCO . Un driver del profilo client registra la funzione di callback appropriata quando richiede una connessione a un dispositivo remoto.

Quando un driver del profilo SCO genera un BRB_SCO_OPEN_CHANNEL BRB, specifica un puntatore alla funzione di Callback SCO nel Callback membro della struttura _BRB_SCO_OPEN_CHANNEL corrispondente di BRB. Se il dispositivo remoto accetta la richiesta di connessione SCO, lo stack di driver Bluetooth può inviare notifiche al driver del profilo tramite la funzione di callback quando si verifica una modifica alla connessione SCO.

Per altre informazioni sulla creazione di connessioni SCO, vedere Creazione di una connessione client SCO a un dispositivo remoto.

I driver di profilo che usano connessioni L2CAP (Logical Link Controller e Adaptation Protocol) implementano e registrano una funzione di callback L2CAP .

Quando un driver di profilo L2CAP genera un BRB_L2CA_OPEN_CHANNEL BRB, specifica un puntatore alla funzione di callback L2CAP nel membro del callback della struttura _BRB_L2CA_OPEN_CHANNEL corrispondente di BRB. Se il dispositivo remoto accetta la richiesta di connessione L2CAP, lo stack dei driver Bluetooth può quindi inviare notifiche al driver del profilo attraverso la funzione di callback in caso di modifica della connessione L2CAP.

Per altre informazioni sulla creazione di connessioni L2CAP, vedere Creazione di una connessione client L2CAP a un dispositivo remoto.

Analogamente, quando un driver del profilo si registra per accettare le richieste di connessione in ingresso (L2CAP, SCO), deve registrare una funzione di callback per ricevere una notifica quando un dispositivo remoto tenta di connettersi.

I driver che utilizzano i profili L2CAP specificano la loro funzione di callback L2CAP nel membro IndicationCallback della struttura _BRB_L2CA_REGISTER_SERVER . Lo stack di driver Bluetooth può quindi chiamare la funzione di callback per notificare al driver del profilo quando un dispositivo remoto tenta di avviare una connessione L2CAP al driver del profilo.

I driver di profilo che usano SCO specificano la loro funzione di callback SCO nel membro IndicationCallback della struttura _BRB_SCO_REGISTER_SERVER. Lo stack di driver Bluetooth può quindi chiamare la funzione di callback per notificare al driver del profilo quando un dispositivo remoto tenta di avviare una connessione SCO al driver del profilo.

Dopo che il driver del profilo registra la funzione di callback appropriata, lo stack di driver Bluetooth può anche notificare al driver del profilo se e quando si verifica un evento attraverso la connessione aperta.

Nota

Un driver di profilo può registrare la stessa funzione di callback per inviare notifiche di modifica su un canale aperto e sui dispositivi remoti che tentano di connettersi.

Per le connessioni L2CAP, la funzione di callback L2CAPaccetta tre parametri:

  • Il contesto definito per la connessione L2CAP. Nel caso di richieste BRB_L2CA_REGISTER_SERVER, il contesto è il valore passato nel membro IndicationCallbackContext della struttura _BRB_L2CA_REGISTER_SERVER inclusa nella richiesta. Nel caso di richieste BRB_L2CA_OPEN_CHANNEL o BRB_L2CA_OPEN_CHANNEL_RESPONSE, il contesto è il valore passato nel membro CallbackContext della struttura _BRB_L2CA_OPEN_CHANNEL fornita con la richiesta.

  • Valore dell'enumerazione INDICATION_CODE che indica il tipo dell'evento di notifica della connessione L2CAP in ingresso o della modifica dello stato di associazione.

  • Puntatore a una struttura INDICATION_PARAMETERS che contiene i parametri associati all'evento di notifica.

Il valore passato nella funzione di callback L2CAP nel parametro Indication specifica quale membro dell'unione nel parametro Parameters dell'unione Parameters deve essere usato dal driver del profilo.

Se il valore del parametro Indicazione è uguale a... ...utilizzare il seguente membro di unione del parametro nei parametri
Indicazione Connessione Remota Connetti
RichiestaConfigurazioneRemotaIndicazione Richiesta di Configurazione
RispostaConfigurazioneRemotaIndication ConfigResponse
Opzioni Extra Senza Indicazione FreeExtraOptions
IndicazioneDiDisconnessioneRemota Disconnettere
IndicationRecvPacket RecvPacket

Per le connessioni SCO, la funzione di callback SCO accetta tre argomenti:

  • Contesto definito per la connessione SCO. Nel caso di richieste di BRB_SCO_REGISTER_SERVER, questo contesto è il valore passato nel membro IndicationCallbackContext della struttura _BRB_SCO_REGISTER_SERVER fornita con la richiesta. Nel caso di richieste di BRB_SCO_OPEN_CHANNEL o di BRB_SCO_OPEN_CHANNEL_RESPONSE, questo contesto è il valore passato nel membro CallbackContext della struttura the_BRB_SCO_OPEN_CHANNEL passata con la richiesta.

  • Valore dell'enumerazione SCO_INDICATION_CODE che indica il tipo di notifica della connessione SCO in ingresso o modifica dello stato di associazione.

  • Puntatore a una struttura SCO_INDICATION_PARAMETERS che contiene i parametri associati all'evento di notifica.

Il valore passato nella funzione di callback SCO , nel parametro di indicazione , specifica quale membro dell'unione nei parametri del parametro Parameters deve essere usato dal driver del profilo.

Se il valore del parametro di indicazione è uguale a... ... utilizzare il seguente membro dell'unione del parametro dei parametri
ScoIndicationRemoteConnect Connetti
IndicationeDisconnessioneRemotaSco Disconnettere

Gestione dei pacchetti di richiesta I/O per la rimozione di Plug and Play

I driver di profilo devono passare tutti gli IRP IRP_MN_SURPRISE_REMOVAL giù nello stack immediatamente per essere elaborati dallo stack di driver Bluetooth. Non tentare di chiudere i canali aperti durante l'elaborazione di un IRP di rimozione a sorpresa. Non compilare e inviare ulteriori BRB che inviano dati alla radio sottostante dopo aver ricevuto un IRP di rimozione a sorpresa. Tuttavia, i driver dei profili software possono eseguire altre operazioni di pulizia durante l'elaborazione di un IRP di rimozione improvvisa.

Dopo che lo stack di driver Bluetooth riceve l'IRP per la rimozione a sorpresa, passerà ScoIndicationRemoteDisconnect alla funzione di callback SCO specificata dal driver del profilo quando il driver del profilo ha costruito e inviato una richiesta BRB_SCO_OPEN_CHANNEL o una richiesta BRB_SCO_OPEN_CHANNEL_RESPONSE , per chiudere tutti i canali SCO attualmente aperti. Analogamente, lo stack di driver Bluetooth passerà IndicationRemoteDisconnect alla funzione di callback L2CAP specificata dal driver del profilo quando il driver del profilo ha compilato e inviato una richiesta di BRB_L2CA_OPEN_CHANNEL o BRB_L2CA_OPEN_CHANNEL_RESPONSE, per chiudere tutti i canali L2CAP attualmente aperti.

I driver di profilo devono disregistrare tutti i server quando elaborano le IRP IRP_MN_REMOVE_DEVICE. Per annullare la registrazione di un server SCO, un driver di profilo deve compilare e inviare una richiesta di BRB_SCO_UNREGISTER_SERVER. Per annullare la registrazione di un server L2CAP, un driver di profilo deve compilare e inviare una richiesta di BRB_L2CA_UNREGISTER_SERVER.