Compartir a través de


Creación y envío de un bloque de solicitud Bluetooth (BRB)

En el procedimiento siguiente se describe el proceso general que sigue un controlador de perfil para compilar y enviar un bloque de solicitud Bluetooth (BRB). Un BRB es un bloque de datos que describe la operación Bluetooth que se va a realizar.

Para compilar y enviar un BRB

  1. Asigne un IRP. Para obtener más información sobre cómo usar IRP, consulte Control de IRP.
  2. Asigne un BRB. Para asignar BRB, llame a la función BthAllocateBrb que exporta la pila del controlador Bluetooth para que la usen los controladores de perfil. Para obtener un puntero a la función BthAllocateBrb , consulte Consulta de interfaces Bluetooth.
  3. Inicialice los parámetros del BRB. Cada BRB usa una estructura correspondiente. Establezca los miembros de la estructura según el uso previsto. Para obtener una lista de BRB y sus estructuras correspondientes, consulte Uso de la pila de controladores Bluetooth.
  4. Inicialice los parámetros del IRP. Establezca el miembro MajorFunction del IRP en IRP_MJ_INTERNAL_DEVICE_CONTROL. Establezca el miembro Parameters.DeviceIoControl.IoControlCode en IOCTL_INTERNAL_BTH_SUBMIT_BRB. Establezca el miembro Parameters.Others.Argument1 para que apunte al BRB.
  5. Pase el IRP hacia abajo en la pila de controladores. Llame a IoCallDriver para enviar el IRP al controlador inferior siguiente.

En el siguiente ejemplo de pseudocódigo se muestra cómo configurar un BRB de ping L2CAP para que se procese la pila del controlador Bluetooth. Para mejorar la legibilidad, el ejemplo no muestra el control de errores.

#include <bthddi.h>

// Code for obtaining the BthInterface pointer

// Define a custom pool tag to identify your profile driver's dynamic memory allocations.
// You should change this tag to easily identify your driver's allocations from other drivers.
#define PROFILE_DRIVER_POOL_TAG '_htB'

PIRP Irp;
Irp = IoAllocateIrp( DeviceExtension->ParentDeviceObject->StackSize, FALSE );

PBRB_L2CA_PING BrbPing; // Define storage for a L2CAP Ping BRB

// Allocate the Ping BRB
BrbPing = BthInterface->BthAllocateBrb( BRB_L2CA_PING, PROFILE_DRIVER_POOL_TAG );

// Set up the next IRP stack location
PIO_STACK_LOCATION NextIrpStack;
NextIrpStack = IoGetNextIrpStackLocation( Irp );
NextIrpStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
NextIrpStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_BTH_SUBMIT_BRB;
NextIrpStack->Parameters.Others.Argument1 = BrbPing;

// Pass the IRP down the driver stack
NTSTATUS Status;
Status = IoCallDriver( DeviceExtension->NextLowerDriver, Irp );