Prise en charge des notifications d’événements Bluetooth
Lorsqu’un pilote de profil ouvre une connexion à un appareil distant, il doit s’inscrire pour être averti lorsque la connexion est fermée ou quand d’autres modifications de la connexion se produisent. En outre, lorsqu’un pilote de profil s’inscrit pour accepter les connexions entrantes, il doit être en mesure d’être averti lorsqu’un appareil distant tente de s’y connecter.
Les pilotes de profil qui utilisent une connexion de Connection-Oriented synchrone (SCO) implémentent et inscrivent une fonction de rappel SCO. Un pilote de profil client inscrit la fonction de rappel appropriée lorsqu’il demande une connexion à un appareil distant.
Lorsqu’un pilote de profil SCO émet un BRB_SCO_OPEN_CHANNEL BRB, il spécifie un pointeur vers sa fonction de rappel SCO dans le membre de rappel de rappel de la structure de _BRB_SCO_OPEN_CHANNEL correspondante du BRB. Si l’appareil distant accepte la demande de connexion SCO, la pile de pilotes Bluetooth peut alors envoyer des notifications au pilote de profil par le biais de la fonction de rappel lorsqu’une modification se produit dans la connexion SCO .
Pour plus d’informations sur la création de connexions SCO, consultez Création d’une connexion cliente SCO à un appareil distant.
Les pilotes de profil qui utilisent des connexions L2CAP (Logical Link Controller and Adaptation Protocol) implémentent et inscrivent une fonction de rappel L2CAP.
Lorsqu’un pilote de profil L2CAP émet un BRB_L2CA_OPEN_CHANNEL BRB, il spécifie un pointeur vers sa fonction de rappel L2CAP dans le membre Callback de la structure de _BRB_L2CA_OPEN_CHANNEL correspondante du BRB. Si l’appareil distant accepte la demande de connexion L2CAP, la pile de pilotes Bluetooth peut alors envoyer des notifications au pilote de profil par le biais de la fonction de rappel lorsqu’une modification de la connexion L2CAP se produit.
Pour plus d’informations sur la création de connexions L2CAP, consultez Création d’une connexion cliente L2CAP à un appareil distant.
De même, lorsqu’un pilote de profil s’inscrit pour accepter les demandes de connexion entrantes (L2CAP, SCO), il doit inscrire une fonction de rappel pour être averti lorsqu’un appareil distant tente de s’y connecter.
Les pilotes de profil qui utilisent L2CAP spécifient leur fonction de rappel L2CAP dans le membre IndicationCallback de la structure _BRB_L2CA_REGISTER_SERVER . La pile de pilotes Bluetooth peut ensuite appeler la fonction de rappel pour avertir le pilote de profil lorsqu’un périphérique distant tente d’initier une connexion L2CAP au pilote de profil.
Les pilotes de profil qui utilisent SCO spécifient leur fonction de rappel SCO dans le membre IndicationCallback de la structure _BRB_SCO_REGISTER_SERVER . La pile de pilotes Bluetooth peut ensuite appeler la fonction de rappel pour avertir le pilote de profil lorsqu’un périphérique distant tente d’initier une connexion SCO au pilote de profil.
Une fois que le pilote de profil a inscrit la fonction de rappel appropriée, la pile de pilotes Bluetooth peut également avertir le pilote de profil si et quand un événement se produit dans la connexion ouverte.
Notes
Un pilote de profil peut inscrire la même fonction de rappel pour lui envoyer des notifications de modification sur un canal ouvert et sur les appareils distants qui tentent de s’y connecter.
Pour les connexions L2CAP, la fonction de rappel L2CAP accepte trois paramètres :
Contexte défini pour la connexion L2CAP. Dans le cas d’BRB_L2CA_REGISTER_SERVER demandes, ce contexte est la valeur transmise dans le membre IndicationCallbackContext de la structure _BRB_L2CA_REGISTER_SERVER passée avec la demande. Dans le cas de demandes BRB_L2CA_OPEN_CHANNEL ou BRB_L2CA_OPEN_CHANNEL_RESPONSE , ce contexte est la valeur transmise dans le membre CallbackContext de la structure _BRB_L2CA_OPEN_CHANNEL passée avec la demande.
Valeur de l’énumération INDICATION_CODE qui indique le type de l’événement de notification de la connexion L2CAP entrante ou du changement d’état de liaison.
Pointeur vers une structure de INDICATION_PARAMETERS qui contient les paramètres associés à l’événement de notification.
La valeur transmise dans le paramètre Indication de la fonction de rappel L2CAP spécifie quel membre d’union dans l’union Parameters du paramètre Parameters que le pilote de profil doit utiliser.
Si la valeur du paramètre Indication est égale à... | ... utiliser le membre d’union suivant du paramètre Parameters |
---|---|
IndicationRemoteConnect | Connexion |
IndicationRemoteConfigRequest | ConfigRequest |
IndicationRemoteConfigResponse | ConfigResponse |
IndicationFreeExtraOptions | FreeExtraOptions |
IndicationRemoteDisconnect | Déconnexion |
IndicationRecvPacket | RecvPacket |
Pour les connexions SCO, la fonction de rappel SCO accepte trois arguments :
Contexte défini pour la connexion SCO. Dans le cas de demandes BRB_SCO_REGISTER_SERVER , ce contexte est la valeur transmise dans le membre IndicationCallbackContext de la structure _BRB_SCO_REGISTER_SERVER passée avec la demande. Dans le cas de demandes BRB_SCO_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL_RESPONSE , ce contexte est la valeur transmise dans le membre CallbackContext de the_BRB_SCO_OPEN_CHANNEL structure transmise avec la demande.
Valeur de l’énumération SCO_INDICATION_CODE qui indique le type de notification de la connexion SCO entrante ou du changement d’état de liaison.
Pointeur vers une structure de SCO_INDICATION_PARAMETERS qui contient les paramètres associés à l’événement de notification.
La valeur transmise dans le paramètre Indication de la fonction de rappel SCO spécifie le membre d’union dans l’union Parameters du paramètre Parameters que le pilote de profil doit utiliser.
Si la valeur du paramètre Indication est égale à... | ... utiliser le membre d’union suivant du paramètre Parameters |
---|---|
ScoIndicationRemoteConnect | Connexion |
ScoIndicationRemoteDisconnect | Déconnexion |
Gestion des Plug-and-Play suppression des IIP
Les pilotes de profil doivent passer tous les IRP_MN_SURPRISE_REMOVAL IRP dans la pile immédiatement pour être traités par la pile de pilotes Bluetooth. N’essayez pas de fermer des canaux ouverts dans le cadre du traitement d’un IRP de suppression surprise. Ne créez pas et n’envoyez pas d’autres brbs qui envoient des données à la radio sous-jacente après avoir reçu un IRP de suppression surprise. Toutefois, les pilotes de profil peuvent effectuer d’autres opérations de nettoyage lors du traitement d’un IRP de suppression surprise.
Une fois que la pile de pilotes Bluetooth a reçu l’IRP de suppression surprise, elle transmet ScoIndicationRemoteDisconnect à la fonction de rappel SCO qui a été spécifiée par le pilote de profil lorsque le pilote de profil a créé et envoyé une demande BRB_SCO_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL_RESPONSE , pour fermer tous les canaux SCO actuellement ouverts. De même, la pile de pilotes Bluetooth transmet IndicationRemoteDisconnect à la fonction de rappel L2CAP spécifiée par le pilote de profil lorsque le pilote de profil a généré et envoyé une demande BRB_L2CA_OPEN_CHANNEL ou BRB_L2CA_OPEN_CHANNEL_RESPONSE , pour fermer tous les canaux L2CAP actuellement ouverts.
Les pilotes de profil doivent annuler l’inscription de tous les serveurs lors du traitement IRP_MN_REMOVE_DEVICE IRPs. Pour annuler l’inscription d’un serveur SCO, un pilote de profil doit générer et envoyer une requête BRB_SCO_UNREGISTER_SERVER . Pour annuler l’inscription d’un serveur L2CAP, un pilote de profil doit générer et envoyer une requête BRB_L2CA_UNREGISTER_SERVER .