Suporte a notificações de eventos Bluetooth
Quando um driver de perfil abre uma conexão com um dispositivo remoto, ele deve se registrar para ser notificado quando a conexão for fechada ou quando qualquer outra alteração na conexão ocorrer. Além disso, quando um driver de perfil se registra para aceitar conexões de entrada, ele deve ser notificado quando um dispositivo remoto tenta se conectar a ele.
Os drivers de perfil que usam a conexão SCO (Connection-Oriented síncrona) implementam e registram uma função de retorno de chamada SCO. Um driver de perfil de cliente registra a função de retorno de chamada apropriada quando solicita uma conexão com um dispositivo remoto.
Quando um driver de perfil SCO emite um BRB_SCO_OPEN_CHANNEL BRB, ele especifica um ponteiro para sua função de retorno de chamada SCO no membro De retorno de chamada da estrutura de _BRB_SCO_OPEN_CHANNEL correspondente do BRB. Se o dispositivo remoto aceitar a solicitação de conexão SCO, a pilha de driver Bluetooth poderá enviar notificações para o driver de perfil por meio da função de retorno de chamada quando ocorrer uma alteração na conexão SCO .
Para obter mais informações sobre como criar conexões SCO, consulte Criando uma conexão de cliente SCO com um dispositivo remoto.
Drivers de perfil que usam conexões L2CAP (Controlador de Link Lógico e Protocolo de Adaptação) implementam e registram uma função de retorno de chamada L2CAP.
Quando um driver de perfil L2CAP emite um BRB_L2CA_OPEN_CHANNEL BRB, ele especifica um ponteiro para sua função de retorno de chamada L2CAP no membro De retorno de chamada da estrutura de _BRB_L2CA_OPEN_CHANNEL correspondente do BRB. Se o dispositivo remoto aceitar a solicitação de conexão L2CAP, a pilha de driver Bluetooth poderá enviar notificações ao driver de perfil por meio da função de retorno de chamada quando ocorrer uma alteração na conexão L2CAP.
Para obter mais informações sobre como criar conexões L2CAP, consulte Criando uma conexão de cliente L2CAP com um dispositivo remoto.
Da mesma forma, quando um driver de perfil se registra para aceitar solicitações de conexão de entrada (L2CAP, SCO), ele deve registrar uma função de retorno de chamada para ser notificado quando um dispositivo remoto tenta se conectar a ela.
Os drivers de perfil que usam L2CAP especificam sua função de retorno de chamada L2CAP no membro IndicationCallback da estrutura _BRB_L2CA_REGISTER_SERVER . A pilha de driver Bluetooth pode chamar a função de retorno de chamada para notificar o driver de perfil quando um dispositivo remoto tenta iniciar uma conexão L2CAP com o driver de perfil.
Drivers de perfil que usam SCO especificam sua função de retorno de chamada SCO no membro IndicationCallback da estrutura _BRB_SCO_REGISTER_SERVER . A pilha de driver Bluetooth pode chamar a função de retorno de chamada para notificar o driver de perfil quando um dispositivo remoto tenta iniciar uma conexão SCO com o driver de perfil.
Depois que o driver de perfil registrar a função de retorno de chamada apropriada, a pilha de driver Bluetooth também poderá notificar o driver de perfil se e quando um evento ocorrer na conexão aberta.
Observação
Um driver de perfil pode registrar a mesma função de retorno de chamada para enviar notificações de alteração sobre um canal aberto e sobre dispositivos remotos que tentam se conectar a ele.
Para conexões L2CAP, a função de retorno de chamada L2CAP aceita três parâmetros:
O contexto definido para a conexão L2CAP. No caso de solicitações de BRB_L2CA_REGISTER_SERVER, esse contexto é o valor passado no membro IndicationCallbackContext da estrutura _BRB_L2CA_REGISTER_SERVER passada com a solicitação. No caso de solicitações BRB_L2CA_OPEN_CHANNEL ou BRB_L2CA_OPEN_CHANNEL_RESPONSE , esse contexto é o valor passado no membro CallbackContext da estrutura _BRB_L2CA_OPEN_CHANNEL passada com a solicitação.
Um valor da enumeração INDICATION_CODE que indica o tipo do evento de notificação da conexão L2CAP de entrada ou da alteração do estado de vinculação.
Um ponteiro para uma estrutura INDICATION_PARAMETERS que contém os parâmetros associados ao evento de notificação.
O valor passado no parâmetro Indication da função de retorno de chamada L2CAP especifica qual membro de união na união Parameters do parâmetro Parameters que o driver de perfil deve usar.
Se o valor do parâmetro Indication for igual a... | ... use o membro de união a seguir do parâmetro Parameters |
---|---|
IndicationRemoteConnect | Connect |
IndicationRemoteConfigRequest | ConfigRequest |
IndicationRemoteConfigResponse | ConfigResponse |
IndicationFreeExtraOptions | FreeExtraOptions |
IndicationRemoteDisconnect | Desconectar |
IndicationRecvPacket | RecvPacket |
Para conexões SCO, a função de retorno de chamada SCO aceita três argumentos:
O contexto definido para a conexão SCO. No caso de solicitações de BRB_SCO_REGISTER_SERVER , esse contexto é o valor passado no membro IndicationCallbackContext da estrutura _BRB_SCO_REGISTER_SERVER passada com a solicitação. No caso de solicitações de BRB_SCO_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL_RESPONSE , esse contexto é o valor passado no membro CallbackContext de the_BRB_SCO_OPEN_CHANNEL estrutura passada com a solicitação.
Um valor da enumeração SCO_INDICATION_CODE que indica o tipo da notificação da conexão SCO de entrada ou da alteração do estado de vinculação.
Um ponteiro para uma estrutura SCO_INDICATION_PARAMETERS que contém os parâmetros associados ao evento de notificação.
O valor passado no parâmetro Indication da função de retorno de chamada SCO especifica qual membro de união na união Parameters do parâmetro Parameters que o driver de perfil deve usar.
Se o valor do parâmetro Indication for igual a... | ... use o membro de união a seguir do parâmetro Parameters |
---|---|
ScoIndicationRemoteConnect | Connect |
ScoIndicationRemoteDisconnect | Desconectar |
Manipulando IRPs de remoção de Plug and Play
Os drivers de perfil devem passar todos os IRP_MN_SURPRISE_REMOVAL IRPs para baixo na pilha imediatamente para serem processados pela pilha de driver Bluetooth. Não tente fechar canais abertos como parte do processamento de um IRP de remoção surpresa. Não crie e envie mais BRBs que enviem dados para o rádio subjacente depois de receber um IRP de remoção surpresa. No entanto, os drivers de perfil podem executar outra limpeza durante o processamento de um IRP de remoção surpresa.
Depois que a pilha de driver Bluetooth receber o IRP de remoção surpresa, ele passará ScoIndicationRemoteDisconnect para a função de retorno de chamada SCO que foi especificada pelo driver de perfil quando o driver de perfil criou e enviou uma solicitação de BRB_SCO_OPEN_CHANNEL ou BRB_SCO_OPEN_CHANNEL_RESPONSE , para fechar todos os canais SCO que estão abertos no momento. Da mesma forma, a pilha de driver Bluetooth passará IndicationRemoteDisconnect para a função de retorno de chamada L2CAP que foi especificada pelo driver de perfil quando o driver de perfil criou e enviou uma solicitação de BRB_L2CA_OPEN_CHANNEL ou BRB_L2CA_OPEN_CHANNEL_RESPONSE , para fechar todos os canais L2CAP que estão abertos no momento.
Os drivers de perfil devem cancelar o registro de todos os servidores ao processar IRP_MN_REMOVE_DEVICE IRPs. Para cancelar o registro de um servidor SCO, um driver de perfil deve compilar e enviar uma solicitação de BRB_SCO_UNREGISTER_SERVER . Para cancelar o registro de um servidor L2CAP, um driver de perfil deve compilar e enviar uma solicitação de BRB_L2CA_UNREGISTER_SERVER .