Compartir a través de


Cómo usar la pila de controladores Bluetooth

Una vez que Windows carga e inicializa la pila de controladores Bluetooth, la pila de controladores detecta los dispositivos Bluetooth activos que ya se han emparejado. A continuación, la pila de controladores genera identificadores de dispositivo (identificadores de dispositivo) para todos los dispositivos emparejados. A continuación, la pila de controladores usa mecanismos estándar de Plug and Play (PnP) para cargar el controlador de perfil adecuado para cada dispositivo. El controlador de perfil que se va a cargar se selecciona en función del archivo INF que instala el controlador de perfil y el identificador del dispositivo, tal y como lo genera la pila de controladores Bluetooth y se describe en Instalación de un dispositivo Bluetooth.

Los controladores de perfil se comunican con la pila de controladores Bluetooth a través del mecanismo estándar basado en paquetes de solicitud de E/S (IRP) empleado por todos los controladores basados en la arquitectura de WDM. Un controlador de perfil se comunica con su dispositivo asignando y enviando IRP a la pila de controladores Bluetooth al controlador de puerto Bluetooth, Bthport.sys.

Un controlador de perfil asigna e inicializa los IRP que va a procesar Bthport.sys. A continuación, los controladores de perfil se comunican con sus dispositivos mediante solicitudes IOCTL que se entregan al dispositivo mediante una IRP_MJ_INTERNAL_DEVICE_CONTROL o IRP_MJ_DEVICE_CONTROL IRP. El controlador de perfil especifica uno de los códigos de control de E/S de la lista siguiente en irP.

La pila de controladores Bluetooth admite las siguientes E/S PORC para los autores de llamadas en modo kernel a través de IRP_MJ_DEVICE_CONTROL:

IOCTL_BTH_DISCONNECT_DEVICE

IOCTL_BTH_GET_DEVICE_INFO

IOCTL_BTH_GET_LOCAL_INFO

IOCTL_BTH_GET_RADIO_INFO

IOCTL_BTH_SDP_ATTRIBUTE_SEARCH

IOCTL_BTH_SDP_CONNECT

IOCTL_BTH_SDP_DISCONNECT

IOCTL_BTH_SDP_REMOVE_RECORD

IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH

IOCTL_BTH_SDP_SERVICE_SEARCH

IOCTL_BTH_SDP_SUBMIT_RECORD

IOCTL_BTH_SDP_SUBMIT_RECORD_WITH_INFO

La pila de controladores Bluetooth admite los siguientes ICTLs y los autores de llamadas en modo kernel de BRB (generalmente para la comunicación entre controladores) a través de IRP_MJ_INTERNAL_DEVICE_CONTROL:

BRB_HCI_GET_LOCAL_BD_ADDR

BRB_L2CA_REGISTER_SERVER

BRB_L2CA_UNREGISTER_SERVER

BRB_L2CA_OPEN_CHANNEL

BRB_L2CA_OPEN_CHANNEL_RESPONSE

BRB_L2CA_CLOSE_CHANNEL

BRB_L2CA_ACL_TRANSFER

BRB_L2CA_UPDATE_CHANNEL

BRB_L2CA_PING

BRB_REGISTER_PSM

BRB_UNREGISTER_PSM

BRB_SCO_REGISTER_SERVER

BRB_SCO_UNREGISTER_SERVER

BRB_SCO_OPEN_CHANNEL

BRB_SCO_OPEN_CHANNEL_RESPONSE

BRB_SCO_CLOSE_CHANNEL

BRB_SCO_TRANSFER

BRB_SCO_GET_CHANNEL_INFO

BRB_SCO_GET_SYSTEM_INFO

BRB_SCO_FLUSH_CHANNEL

BRB_ACL_GET_MODE

BRB_ACL_ENTER_ACTIVE_MODE

BRB_GET_DEVICE_INTERFACE_STRING

IOCTL_INTERNAL_BTH_SUBMIT_BRB

IOCTL_INTERNAL_BTHENUM_GET_DEVINFO

IOCTL_INTERNAL_BTHENUM_GET_ENUMINFO

Para obtener más información sobre cómo usar las ICTLs descritas en las listas anteriores, consulte IoCTLs de Bluetooth.

Los controladores de perfil usan principalmente IOCTL_INTERNAL_BTH_SUBMIT_BRB para comunicarse e interactuar con la funcionalidad proporcionada en la pila de controladores Bluetooth. Un controlador de perfil usa IOCTL_INTERNAL_BTH_SUBMIT_BRB para entregar una estructura de datos de longitud variable denominada bloque de solicitud Bluetooth (BRB) al dispositivo que administra. Los controladores de perfil usan BRB para abrir y cerrar conexiones a dispositivos remotos y para realizar la mayoría de las tareas de entrada y salida. IOCTL_INTERNAL_BTH_SUBMIT_BRB contiene un BRB que describe aún más la operación Bluetooth que se va a realizar. Para obtener más información sobre cómo compilar y enviar BRB a la pila de controladores Bluetooth, consulte Building and Send a BRB (Creación y envío de un BRB).

Cada BRB comienza con un encabezado estándar definido por la estructura BRB_HEADER que especifica el tipo de BRB, que determina la estructura del resto del BRB. El miembro Type , que debe ser igual a uno de los valores que se encuentran en la enumeración BRB_TYPE , determina el tipo de operación Bluetooth que solicita el controlador de perfil. La estructura y el tamaño de BRB varían según el tipo de BRB. El miembro Length de la estructura BRB_HEADER especifica el tamaño, en bytes, del BRB. Las funciones BthAllocateBrb, BthInitializeBrb y BthReuseBrb establecen automáticamente los miembros Type y Length .

Por ejemplo, para abrir una conexión a un dispositivo remoto, especifique uno de los códigos de función, BRB_L2CA_OPEN_CHANNEL o BRB_SCO_OPEN_CHANNEL, para indicar que el controlador de perfil está intentando abrir un canal de conexión L2CAP o SCO al dispositivo remoto. La pila del controlador Bluetooth usa el miembro Status de la estructura BRB para devolver un código de estado específico de Bluetooth.

Para cada BRB, el controlador de perfil debe asignar e inicializar la estructura correspondiente adecuada con información sobre la operación Bluetooth que se va a realizar.

En la tabla siguiente se describen las estructuras que corresponden a brB específicos que pueden emitir los controladores de perfil:

Bloque de solicitud Bluetooth (BRB) Estructura correspondiente
BRB_HCI_GET_LOCAL_BD_ADDR _BRB_GET_LOCAL_BD_ADDR
BRB_L2CA_REGISTER_SERVER _BRB_L2CA_REGISTER_SERVER
BRB_L2CA_UNREGISTER_SERVER _BRB_L2CA_UNREGISTER_SERVER
BRB_L2CA_OPEN_CHANNEL _BRB_L2CA_OPEN_CHANNEL
BRB_L2CA_OPEN_CHANNEL_RESPONSE _BRB_L2CA_OPEN_CHANNEL
BRB_L2CA_CLOSE_CHANNEL _BRB_L2CA_CLOSE_CHANNEL
BRB_L2CA_ACL_TRANSFER _BRB_L2CA_ACL_TRANSFER
BRB_L2CA_UPDATE_CHANNEL _BRB_L2CA_UPDATE_CHANNEL
BRB_L2CA_PING _BRB_L2CA_PING
BRB_REGISTER_PSM _BRB_PSM
BRB_UNREGISTER_PSM _BRB_PSM
BRB_SCO_REGISTER_SERVER _BRB_SCO_REGISTER_SERVER
BRB_SCO_UNREGISTER_SERVER _BRB_SCO_UNREGISTER_SERVER
BRB_SCO_OPEN_CHANNEL _BRB_SCO_OPEN_CHANNEL
BRB_SCO_OPEN_CHANNEL_RESPONSE _BRB_SCO_OPEN_CHANNEL
BRB_SCO_CLOSE_CHANNEL _BRB_SCO_CLOSE_CHANNEL
BRB_SCO_TRANSFER _BRB_SCO_TRANSFER
BRB_SCO_GET_CHANNEL_INFO _BRB_SCO_GET_CHANNEL_INFO
BRB_SCO_GET_SYSTEM_INFO _BRB_SCO_GET_SYSTEM_INFO
BRB_SCO_FLUSH_CHANNEL _BRB_SCO_FLUSH_CHANNEL
BRB_ACL_GET_MODE _BRB_ACL_GET_MODE
BRB_ACL_ENTER_ACTIVE_MODE _BRB_ACL_ENTER_ACTIVE_MODE
BRB_GET_DEVICE_INTERFACE_STRING _BRB_GET_DEVICE_INTERFACE_STRING

Para obtener más información sobre el uso de IOCTLs y BRB de Bluetooth, consulte Creación y envío de un BRB.