Compatibilidad con notificaciones de eventos Bluetooth
Cuando un controlador de perfil abre una conexión a un dispositivo remoto, debe registrarse para recibir una notificación cuando se cierre la conexión o cuando se produzcan otros cambios en la conexión. Además, cuando un controlador de perfil se registra para aceptar conexiones entrantes, debe poder recibir notificaciones cuando un dispositivo remoto intenta conectarse a él.
Los controladores de perfil que usan la conexión de Connection-Oriented sincrónica (SCO) implementan y registran una función de devolución de llamada SCO. Un controlador de perfil de cliente registra la función de devolución de llamada adecuada cuando solicita una conexión a un dispositivo remoto.
Cuando un controlador de perfil sco emite un BRB_SCO_OPEN_CHANNEL BRB, especifica un puntero a su función de devolución de llamada SCO en el miembro devolución de llamada de la estructura de _BRB_SCO_OPEN_CHANNEL correspondiente del BRB. Si el dispositivo remoto acepta la solicitud de conexión SCO, la pila del controlador Bluetooth puede enviar notificaciones al controlador de perfil a través de la función de devolución de llamada cuando se produce un cambio en la conexión SCO.
Para obtener más información sobre cómo crear conexiones SCO, consulte Creación de una conexión de cliente SCO a un dispositivo remoto.
Los controladores de perfil que usan conexiones de controlador de vínculo lógico y protocolo de adaptación (L2CAP) implementan y registran una función de devolución de llamada L2CAP.
Cuando un controlador de perfil L2CAP emite un BRB_L2CA_OPEN_CHANNEL BRB, especifica un puntero a su función de devolución de llamada L2CAP en el miembro Devolución de llamada de la estructura de _BRB_L2CA_OPEN_CHANNEL correspondiente del BRB. Si el dispositivo remoto acepta la solicitud de conexión L2CAP, la pila del controlador Bluetooth puede enviar notificaciones al controlador de perfil a través de la función de devolución de llamada cuando se produce un cambio en la conexión L2CAP.
Para obtener más información sobre la creación de conexiones L2CAP, consulte Creación de una conexión de cliente L2CAP a un dispositivo remoto.
Del mismo modo, cuando un controlador de perfil se registra para aceptar solicitudes de conexión entrantes (L2CAP, SCO), debe registrar una función de devolución de llamada para recibir notificaciones cuando un dispositivo remoto intenta conectarse a él.
Los controladores de perfil que usan L2CAP especifican su función de devolución de llamada L2CAP en el miembro IndicationCallback de la estructura _BRB_L2CA_REGISTER_SERVER . A continuación, la pila de controladores Bluetooth puede llamar a la función de devolución de llamada para notificar al controlador de perfil cuando un dispositivo remoto intenta iniciar una conexión L2CAP al controlador de perfil.
Los controladores de perfil que usan SCO especifican su función de devolución de llamada SCO en el miembro IndicationCallback de la estructura _BRB_SCO_REGISTER_SERVER . A continuación, la pila de controladores Bluetooth puede llamar a la función de devolución de llamada para notificar al controlador de perfil cuando un dispositivo remoto intenta iniciar una conexión SCO al controlador de perfil.
Una vez que el controlador de perfil registra la función de devolución de llamada adecuada, la pila del controlador Bluetooth también puede notificar al controlador de perfil si y cuándo se produce un evento a través de la conexión abierta.
Nota
Un controlador de perfil puede registrar la misma función de devolución de llamada para enviar notificaciones de cambio sobre un canal abierto y sobre los dispositivos remotos que intentan conectarse a él.
Para las conexiones L2CAP, la función de devolución de llamada L2CAP acepta tres parámetros:
Contexto definido para la conexión L2CAP. En el caso de las solicitudes de BRB_L2CA_REGISTER_SERVER, este contexto es el valor pasado en el miembro IndicationCallbackContext de la estructura de _BRB_L2CA_REGISTER_SERVER pasada con la solicitud. En el caso de solicitudes BRB_L2CA_OPEN_CHANNEL o BRB_L2CA_OPEN_CHANNEL_RESPONSE , este contexto es el valor pasado en el miembro CallbackContext de la estructura _BRB_L2CA_OPEN_CHANNEL pasada con la solicitud.
Valor de la enumeración INDICATION_CODE que indica el tipo del evento de notificación del cambio de estado de enlace o conexión L2CAP entrante.
Puntero a una estructura de INDICATION_PARAMETERS que contiene los parámetros asociados al evento de notificación.
El valor pasado en el parámetro De indicación de la función de devolución de llamada L2CAP especifica qué miembro de unión de la unión Parameters del parámetro Parameters debe usar el controlador de perfil.
Si el valor del parámetro Indication es igual a... | ... use el siguiente miembro de unión del parámetro Parameters . |
---|---|
IndicationRemoteConnect | Conexión |
IndicationRemoteConfigRequest | ConfigRequest |
IndicationRemoteConfigResponse | ConfigResponse |
IndicationFreeExtraOptions | FreeExtraOptions |
IndicationRemoteDisconnect | Desconexión |
IndicationRecvPacket | RecvPacket |
Para las conexiones SCO, la función de devolución de llamada sco acepta tres argumentos:
Contexto definido para la conexión SCO. En el caso de las solicitudes de BRB_SCO_REGISTER_SERVER , este contexto es el valor pasado en el miembro IndicationCallbackContext de la estructura _BRB_SCO_REGISTER_SERVER pasada con la solicitud. En el caso de solicitudes BRB_SCO_OPEN_CHANNEL o BRB_SCO_OPEN_CHANNEL_RESPONSE , este contexto es el valor pasado en el miembro CallbackContext de the_BRB_SCO_OPEN_CHANNEL estructura pasada con la solicitud.
Valor de la enumeración SCO_INDICATION_CODE que indica el tipo de notificación del cambio de estado de enlace o conexión SCO entrante.
Puntero a una estructura SCO_INDICATION_PARAMETERS que contiene los parámetros asociados al evento de notificación.
El valor pasado en el parámetro De indicación de la función de devolución de llamada SCO especifica qué miembro de unión de la unión de parámetros del parámetro Parameters debe usar el controlador de perfil.
Si el valor del parámetro Indication es igual a... | ... use el siguiente miembro de unión del parámetro Parameters . |
---|---|
ScoIndicationRemoteConnect | Conexión |
ScoIndicationRemoteDisconnect | Desconexión |
Control de irP de eliminación de Plug and Play
Los controladores de perfil deben pasar todos los IRP de IRP_MN_SURPRISE_REMOVAL de la pila inmediatamente para que la pila del controlador Bluetooth los procese. No intente cerrar ningún canal abierto como parte del procesamiento de un IRP de eliminación sorpresa. No compile ni envíe más BRB que envíen datos a la radio subyacente después de recibir un IRP de eliminación sorpresa. Sin embargo, los controladores de perfil pueden realizar otra limpieza mientras se procesa una eliminación sorpresa IRP.
Una vez que la pila del controlador Bluetooth recibe el IRP de eliminación sorpresa, pasará ScoIndicationRemoteDisconnect a la función de devolución de llamada SCO especificada por el controlador de perfil cuando el controlador de perfil creó y envió una solicitud de BRB_SCO_OPEN_CHANNEL o BRB_SCO_OPEN_CHANNEL_RESPONSE , para cerrar los canales SCO que están abiertos actualmente. Del mismo modo, la pila del controlador Bluetooth pasará IndicationRemoteDisconnect a la función de devolución de llamada L2CAP especificada por el controlador de perfil cuando el controlador de perfil creó y envió una solicitud de BRB_L2CA_OPEN_CHANNEL o BRB_L2CA_OPEN_CHANNEL_RESPONSE , para cerrar los canales L2CAP que están abiertos actualmente.
Los controladores de perfil deben anular el registro de todos los servidores al procesar IRP_MN_REMOVE_DEVICE IRP. Para anular el registro de un servidor SCO, un controlador de perfil debe compilar y enviar una solicitud de BRB_SCO_UNREGISTER_SERVER . Para anular el registro de un servidor L2CAP, un controlador de perfil debe compilar y enviar una solicitud de BRB_L2CA_UNREGISTER_SERVER .