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_HEADER

BRB_L2CA_OPEN_CHANNEL

BRB_L2CA_OPEN_CHANNEL_RESPONSE

BRB_L2CA_REGISTER_SERVER

CHANNEL_CONFIG_RESULTS

INDICATION_CODE

INDICATION_PARAMETERS

Função de retorno de chamada L2CAP

L2CAP_CONFIG_OPTION

ObDereferenceObject

ObReferenceObject