estrutura _BRB_L2CA_OPEN_CHANNEL (bthddi.h)
A estrutura _BRB_L2CA_OPEN_CHANNEL descreve um canal L2CAP para abrir em um dispositivo remoto ou uma resposta do driver de perfil aceitando ou rejeitando uma solicitação de conexão L2CAP de entrada iniciada por um dispositivo remoto.
Sintaxe
struct _BRB_L2CA_OPEN_CHANNEL {
BRB_HEADER Hdr;
L2CAP_CHANNEL_HANDLE ChannelHandle;
union {
struct {
USHORT Response;
USHORT ResponseStatus;
};
USHORT Psm;
};
ULONG ChannelFlags;
BTH_ADDR BtAddress;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_VALUE_RANGE FlushTO;
L2CAP_FLOWSPEC Flow;
USHORT LinkTO;
ULONG NumExtraOptions;
PL2CAP_CONFIG_OPTION ExtraOptions;
struct {
UCHAR ServiceType;
ULONG Latency;
} LocalQos;
} ConfigOut;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_RANGE FlushTO;
} ConfigIn;
ULONG CallbackFlags;
PFNBTHPORT_INDICATION_CALLBACK Callback;
PVOID CallbackContext;
PVOID ReferenceObject;
CHANNEL_CONFIG_RESULTS OutResults;
CHANNEL_CONFIG_RESULTS InResults;
UCHAR IncomingQueueDepth;
};
Membros
Hdr
Uma estrutura BRB_HEADER que contém informações sobre o BRB atual.
ChannelHandle
Identificador usado para identificar a conexão em uma conexão bem-sucedida. Ao enviar um BRB_L2CA_OPEN_CHANNEL, isso será preenchido quando o BRB for concluído. Ao enviar um BRB_L2CA_OPEN_CHANNEL_RESPONSE, isso deve ser preenchido pelo servidor antes de enviar o BRB. O valor atribuído deve ser INDICATION_PARAMETERS::ConnectionHandle
passado durante IndicationRemoteConnect.
Response
Usado somente com BRB_L2CA_OPEN_CHANNEL_RESPONSE. Um dos valores de CONNECT_RSP_RESULT_Xxx é usado.
Se o BRB retornar com uma status de STATUS_REQUEST_NOT_ACCEPTED, a Resposta conterá a resposta negativa do host remoto.
ResponseStatus
Se Response for igual a CONNECT_RSP_RESULT_PENDING, esse campo será válido. Um dos valores de CONNECT_RSP_STATUS_XXX é usado.
Psm
O Protocolo/Multiplexer de Serviço (PSM) que o canal usa para se conectar ao dispositivo remoto. Quando usado com uma solicitação BRB_L2CA_OPEN_CHANNEL , esse membro é definido como um campo de entrada. Quando usado com uma solicitação de BRB_L2CA_OPEN_CHANNEL_RESPONSE , esse membro é usado como um campo de saída.
ChannelFlags
Sinalizadores que especificam os requisitos para o canal a ser aberto. Os valores de sinalizador válidos são listados na tabela a seguir:
Sinalizador | Descrição |
---|---|
CF_LINK_AUTHENTICATED | O link deve ser autenticado. |
CF_LINK_ENCRYPTED | O link deve ser criptografado. Definir esse sinalizador também define o sinalizador CF_LINK_AUTHENTICATED. |
CF_LINK_SUPPRESS_PIN | O driver de perfil indica sua preferência de que os usuários não sejam solicitados a fornecer um PIN. |
BtAddress
O endereço Bluetooth do dispositivo para o qual a conexão se destina.
ConfigOut
A subestrutura que contém as configurações de parâmetro para uma BRB_L2CA_OPEN_CHANNEL BRB enviada a um dispositivo remoto.
ConfigOut.Flags
Sinalizadores que especificam os requisitos para o canal a ser aberto. Os valores de sinalizador válidos são listados na tabela a seguir:
Sinalizador | Descrição |
---|---|
CF_LINK_AUTHENTICATED | O link deve ser autenticado. |
CF_LINK_ENCRYPTED | O link deve ser criptografado. Definir esse sinalizador também define o sinalizador CF_LINK_AUTHENTICATED. |
CF_LINK_SUPPRESS_PIN | O driver de perfil indica sua preferência de que os usuários não sejam solicitados a fornecer um PIN. |
ConfigOut.Mtu
O intervalo de MTUs (unidades de transferência de mensagens) que é usado para negociar o tamanho da metade de saída do canal.
ConfigOut.FlushTO
O intervalo de valores possíveis a serem usados para o tempo limite de liberação para a metade de saída do canal.
ConfigOut.Flow
Reservado para uso futuro. Não use.
ConfigOut.LinkTO
O tempo limite do link do Gerenciador de Link.
ConfigOut.NumExtraOptions
O número de itens de matriz contidos no membro ExtraOptions . Esse valor deve ser zero para a maioria dos clientes.
ConfigOut.ExtraOptions
O número de itens de matriz contidos no membro ExtraOptions . Esse valor deve ser zero para a maioria dos clientes.
ConfigOut.LocalQos
Reservado para uso futuro. Não use.
ConfigOut.LocalQos.ServiceType
Reservado para uso futuro. Não use.
ConfigOut.LocalQos.Latency
Reservado para uso futuro. Não use.
ConfigIn
A substrutura que contém as configurações de parâmetro para validar os BRBs de entrada BRB_L2CA_OPEN_CHANNEL_RESPONSE que são enviados de um dispositivo remoto.
ConfigIn.Flags
Sinalizadores que especificam os requisitos para o canal a ser aberto. Os valores de sinalizador válidos são listados na tabela a seguir:
Sinalizador | Descrição |
---|---|
CF_LINK_AUTHENTICATED | O link deve ser autenticado. |
CF_LINK_ENCRYPTED | O link deve ser criptografado. Definir esse sinalizador também define o sinalizador CF_LINK_AUTHENTICATED. |
CF_LINK_SUPPRESS_PIN | O driver de perfil indica sua preferência de que os usuários não sejam solicitados a fornecer um PIN. |
ConfigIn.Mtu
O intervalo de MTUs (unidades de transferência de mensagens) que é usado para negociar o tamanho da metade de saída do canal.
ConfigIn.FlushTO
O intervalo de valores possíveis a serem usados para o tempo limite de liberação para a metade de saída do canal.
CallbackFlags
Um sinalizador que especifica quais eventos devem gerar uma rotina de retorno de chamada para notificar o driver de perfil de que o evento ocorreu. Os valores de sinalizador válidos estão contidos na tabela a seguir.
Sinalizador | Descrição |
---|---|
CALLBACK_CONFIG_EXTRA_IN | Se definida, a rotina de retorno de chamada será chamada quando a solicitação de configuração do dispositivo remoto contiver opções extras. Se não estiver definido, as opções de configuração extras serão rejeitadas como opções desconhecidas. Esse sinalizador é usado com brbs BRB_L2CA_OPEN_CHANNEL_RESPONSE. |
CALLBACK_CONFIG_EXTRA_OUT | Se definida, a rotina de retorno de chamada será chamada quando o dispositivo remoto rejeitar uma opção de configuração extra de uma solicitação de BRB_L2CA_OPEN_CHANNEL. Se não estiver definido e o dispositivo remoto rejeitar a solicitação de configuração devido a uma opção extra, a conexão será fechada. |
CALLBACK_CONFIG_QOS | Se definida, a rotina de retorno de chamada será chamada quando um dispositivo remoto enviar uma solicitação de configuração que contenha um valor QOS. Se esse sinalizador não estiver definido e o dispositivo remoto enviar parâmetros QOS em uma solicitação de configuração ou rejeitar os parâmetros de QOS solicitados do driver de perfil, a conexão será desconectada. |
CALLBACK_DISCONNECT | Se definida, a rotina de retorno de chamada será chamada quando um dispositivo remoto se desconectar do canal L2CAP. |
CALLBACK_RECV_PACKET | Se definida, a rotina de retorno de chamada será chamada quando o driver de perfil receber um pacote L2CAP de entrada. |
Callback
A Função de Retorno de Chamada L2CAP implementada pelo driver de perfil, que a pilha de driver bluetooth deve chamar para notificar o driver de perfil sobre quaisquer alterações na conexão L2CAP.
CallbackContext
O contexto a ser passado para a função de retorno de chamada especificada no membro de retorno de chamada. O driver de perfil define esse valor.
ReferenceObject
Um ponteiro para um objeto a ser passado para ObReferenceObject e ObDereferenceObject para o qual manter uma contagem de referência.
OutResults
Uma estrutura CHANNEL_CONFIG_RESULTS que contém parâmetros de configuração para a solicitação de saída.
InResults
Uma estrutura CHANNEL_CONFIG_RESULTS que contém parâmetros de configuração para a solicitação de entrada.
IncomingQueueDepth
Especifica o comprimento da fila de entrada em MTUs (unidades de transferência de mensagens).
Resposta
Esse membro é usado como um parâmetro de entrada para uma solicitação de BRB_L2CA_OPEN_CHANNEL_RESPONSE e um parâmetro de saída para a solicitação BRB_L2CA_OPEN_CHANNEL .
Para uma solicitação de BRB_L2CA_OPEN_CHANNEL_RESPONSE , esse membro contém um sinalizador que indica a resposta do driver de perfil ao dispositivo remoto. Os valores de sinalizador válidos estão contidos na tabela a seguir.
Sinalizador | Descrição |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | O driver de perfil recusou a conexão devido à falta de recursos. |
CONNECT_RSP_RESULT_PENDING | O driver de perfil está ocupado no momento e não pode aceitar a conexão. Tente novamente depois. |
CONNECT_RSP_RESULT_PSM_NEG | O driver de perfil recusou a conexão porque o PSM não tem suporte. |
CONNECT_RSP_RESULT_SECURITY_BLOCK | O driver de perfil recusou a conexão por motivos de segurança. |
CONNECT_RSP_RESULT_SUCCESS | O driver de perfil aceitou a conexão. |
Para a BRB_L2CA_OPEN_CHANNEL BRB, esse membro contém a resposta do dispositivo remoto ao qual o driver de perfil tentou se conectar. Os valores de sinalizador válidos estão contidos na tabela a seguir.
Sinalizador | Descrição |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | O dispositivo remoto recusou a conexão devido à falta de recursos. |
CONNECT_RSP_RESULT_PSM_NEG | O dispositivo remoto recusou a conexão. |
CONNECT_RSP_RESULT_SECURITY_BLOCK | O dispositivo remoto recusou a conexão por motivos de segurança. |
CONNECT_RSP_RESULT_SUCCESS | O dispositivo remoto aceitou a conexão. |
ResponseStatus
Se durante uma chamada para o BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB o membro Response for definido como CONNECT_RSP_RESULT_PENDING
, esse membro será válido e conterá um dos seguintes valores:
- CONNECT_RSP_STATUS_AUTHENTICATION_PENDING
- CONNECT_RSP_STATUS_AUTHORIZATION_PENDING
- CONNECT_RSP_STATUS_NO_INFORMATION
Comentários
Para abrir um canal L2CAP, os drivers de perfil devem criar e enviar uma solicitação de BRB_L2CA_OPEN_CHANNEL .
Os drivers de perfil que atuam como clientes especificam um endereço de destino, um PSM e uma variedade de parâmetros de configuração.
Se a solicitação BRB_L2CA_OPEN_CHANNEL for concluída com êxito, uma variedade de informações sobre a conexão recém-criada estará disponível nos membros OutResults e InResults . OutResults especifica os parâmetros para a metade de saída do canal e InResults especifica os parâmetros para a metade de entrada do canal.
Vários dos parâmetros de configuração passados nessa estrutura, como o membro Mtu , são intervalos usados para negociação com o rádio remoto. Os clientes devem fornecer o maior intervalo possível para aumentar as chances de uma negociação de canal bem-sucedida. Especificar um tamanho mínimo de MTU maior que o tamanho mínimo de MTU do Bluetooth básico só deve ser feito quando absolutamente necessário. Se a negociação falhar, a conexão falhará.
Os drivers de perfil devem alocar a memória para armazenar a matriz armazenada no membro ExtraOptions e não devem liberar essa memória até que a função de retorno de chamada definida no membro callback retorne com uma notificação IndicationFreeExtraOptionsINDICATION_CODE valor passado em seu parâmetro Indication .
O membro IncomingQueueDepth da estrutura _BRB_L2CA_OPEN_CHANNEL especifica o número máximo de MTUs que a pilha de driver bluetooth receberá e enfileirará na conexão antes de começar a descartá-las. Definir esse valor como um número muito pequeno aumenta as chances de perda de dados, enquanto defini-lo como um número muito grande pode aumentar o uso de memória. Definir esse membro como 10 é um comprometimento efetivo.
Para aceitar ou rejeitar uma solicitação de conexão L2CAP de entrada iniciada por um dispositivo remoto, os drivers de perfil devem criar e enviar uma solicitação de BRB_L2CA_OPEN_CHANNEL_RESPONSE .
Um driver de perfil deve criar e enviar uma solicitação de BRB_L2CA_OPEN_CHANNEL_RESPONSE quando a pilha de driver Bluetooth chamar a Função de Retorno de Chamada L2CAP do driver de perfil e passar IndicationRemoteConnect no parâmetro Indication da função de retorno de chamada.
Com base no valor do membro Response dessa estrutura, a pilha de driver bluetooth aceitará ou rejeitará a solicitação de conexão.
O driver de perfil especifica se a conexão deve ser aceita armazenando um valor apropriado no membro Response dessa estrutura.
Ao receber a resposta CONNECT_RSP_RESULT_PENDING, o cliente de conexão deve redefinir o temporizador de conexão e aguardar uma mensagem de resposta de conexão atualizada. Os drivers de perfil que chamam a BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB em que o membro Response está definido como CONNECT_RSP_RESULT_PENDING devem emitir imediatamente um brb de BRB_L2CA_OPEN_CHANNEL_RESPONSE adicional com um valor de conexão atualizado. O valor atualizado pode ser qualquer um dos códigos de status descritos no membro Response, incluindo reenviar um valor CONNECT_RSP_RESULT_PENDING.
Os drivers de perfil devem alocar a memória para armazenar a matriz armazenada no membro ExtraOptions e não devem liberar essa memória até que a função de retorno de chamada definida no membro callback retorne com uma notificação IndicationFreeExtraOptionsINDICATION_CODE valor passado em seu parâmetro Indication .
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Versões:_Supported no Windows Vista e posteriores. |
Cabeçalho | bthddi.h (inclua Bthddi.h) |
Confira também
BRB_L2CA_OPEN_CHANNEL_RESPONSE