Condividi tramite


Supporto delle notifiche degli eventi Bluetooth

Quando un driver del profilo apre una connessione a un dispositivo remoto, deve registrarsi per ricevere una notifica quando la connessione viene chiusa o quando si verificano altre modifiche alla connessione. Inoltre, quando un driver del 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 sua funzione di callback sco nel membro callback della struttura di _BRB_SCO_OPEN_CHANNEL corrispondente di BRB. Se il dispositivo remoto accetta la richiesta di connessione SCO, lo stack di driver Bluetooth può quindi 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 le connessioni Logic Link Controller e Adaptation Protocol (L2CAP) implementano e registrano una funzione di callback L2CAP.

Quando un driver del profilo L2CAP genera un BRB_L2CA_OPEN_CHANNEL BRB, specifica un puntatore alla funzione di callback L2CAP nel membro callback della struttura di _BRB_L2CA_OPEN_CHANNEL corrispondente di BRB. Se il dispositivo remoto accetta la richiesta di connessione L2CAP, lo stack di driver Bluetooth può quindi inviare notifiche al driver del profilo tramite la funzione di callback quando si verifica una modifica alla 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 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 di profilo che usano L2CAP specificano la funzione di callback L2CAP nel membro Di indicazioneCallback 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 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 nella connessione aperta.

Nota

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

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

  • Contesto definito per la connessione L2CAP. Nel caso di richieste di BRB_L2CA_REGISTER_SERVER, questo contesto è il valore passato nel membro IndicationCallbackContext della struttura _BRB_L2CA_REGISTER_SERVER passata con la richiesta. Nel caso di richieste di BRB_L2CA_OPEN_CHANNEL o di BRB_L2CA_OPEN_CHANNEL_RESPONSE , questo contesto è il valore passato nel membro CallbackContext della struttura _BRB_L2CA_OPEN_CHANNEL passata 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 contenente i parametri associati all'evento di notifica.

Il valore passato nel parametro Indicazione della funzione callback L2CAP specifica quale membro dell'unione dei parametri del parametro Parameters che deve essere usato dal driver del profilo.

Se il valore del parametro Indicazione è uguale a... ... usare il membro dell'unione seguente del parametro Parameters
IndicazioneRemoteConnect Connettere
IndicazioneRemoteConfigRequest ConfigRequest
IndicazioneRemoteConfigResponse ConfigResponse
IndicationFreeExtraOptions FreeExtraOptions
IndicazioneRemoteDisconnect Disconnetti
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 passata 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 della modifica dello stato di associazione.

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

Il valore passato nel parametro Di indicazione della funzione di callback sco specifica quale membro dell'unione dei parametri del parametro Parameters che il driver del profilo deve usare.

Se il valore del parametro Indicazione è uguale a... ... usare il membro dell'unione seguente del parametro Parameters
ScoIndicationRemoteConnect Connettere
ScoIndicationRemoteDisconnect Disconnetti

Gestione degli IRP di rimozione di Plug and Play

I driver del profilo devono passare tutti i IRP_MN_SURPRISE_REMOVAL IRP verso il basso dello stack immediatamente da elaborare dallo stack di driver Bluetooth. Non tentare di chiudere alcun canale aperto durante l'elaborazione di un'IRP di rimozione delle sorprese. Non compilare e inviare altri BRB che inviano dati alla radio sottostante dopo aver ricevuto un'IRP di rimozione a sorpresa. Tuttavia, i driver del profilo possono eseguire altre operazioni di pulizia durante l'elaborazione di un'IRP di rimozione delle sorprese.

Dopo che lo stack di driver Bluetooth riceve l'IRP di rimozione delle sorprese, passerà ScoIndicationRemoteDisconnect alla funzione di callback sco specificata dal driver del profilo quando il driver del profilo ha compilato e inviato una richiesta di BRB_SCO_OPEN_CHANNEL o 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 annullare la registrazione di tutti i server durante l'elaborazione di IRP_MN_REMOVE_DEVICE IP. Per annullare la registrazione di un server sco, un driver del profilo deve compilare e inviare una richiesta di BRB_SCO_UNREGISTER_SERVER . Per annullare la registrazione di un server L2CAP, un driver del profilo deve compilare e inviare una richiesta di BRB_L2CA_UNREGISTER_SERVER .