Udostępnij przez


Kompilowanie i wysyłanie bloku żądań Bluetooth (BRB)

Poniższa procedura przedstawia ogólny proces, który sterownik profilu wykonuje, aby zbudować i wysłać blok żądania Bluetooth (BRB). BRB to blok danych, który opisuje operację bluetooth do wykonania.

Aby skompilować i wysłać BRB

  1. Przydziel IRP. Aby uzyskać więcej informacji na temat używania IRP, zobacz Obsługa IRP.
  2. Przydziel BRB (jeśli "BRB" odnosi się do specyficznego terminu, dodaj wyjaśnienie lub kontekst). Aby przydzielić BRBs, wywołaj funkcję BthAllocateBrb, którą stos sterowników Bluetooth eksportuje do użytku przez sterowniki profilów. Aby uzyskać wskaźnik do funkcji BthAllocateBrb , zobacz Querying for Bluetooth Interfaces (Wykonywanie zapytań dla interfejsów Bluetooth).
  3. Zainicjuj parametry BRB. Każdy BRB używa odpowiedniej struktury. Ustaw elementy struktury zgodnie z planowanym użyciem. Aby zapoznać się z listą BRB i odpowiadającymi im strukturami, zobacz Using the Bluetooth Driver Stack (Korzystanie ze stosu sterowników Bluetooth).
  4. Zainicjuj parametry IRP. Ustaw właściwość MajorFunction elementu członkowskiego IRP na IRP_MJ_INTERNAL_DEVICE_CONTROL. Ustaw element członkowski Parameters.DeviceIoControl.IoControlCode na IOCTL_INTERNAL_BTH_SUBMIT_BRB. Ustaw element członkowski Parameters.Others.Argument1, aby wskazywał na BRB.
  5. Przekaż protokół IRP w dół stosu sterowników. Wywołaj IoCallDriver, aby wysłać IRP do kolejnego niższego sterownika.

Poniższy przykład pseudokodu pokazuje, jak skonfigurować BRB dla L2CAP Ping, aby stos Bluetooth mógł go przetworzyć. W przypadku czytelności przykład nie demonstruje obsługi błędów.

#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 );