Udostępnij za pośrednictwem


Jak używać stosu sterowników Bluetooth

Po załadowaniu i zainicjowaniu stosu sterowników Bluetooth stos sterowników odnajduje aktywne urządzenia Bluetooth, które zostały już sparowane. Następnie stos sterowników generuje identyfikatory urządzeń dla wszystkich sparowanych urządzeń. Następnie stos sterowników używa standardowych mechanizmów Plug and Play (PnP), aby załadować odpowiedni sterownik profilu dla każdego urządzenia. Na podstawie pliku INF, który instaluje sterownik profilu, oraz identyfikatora urządzenia, wybierany jest sterownik profilu do załadowania, zgodnie z opisem w Instalowanie urządzenia Bluetooth.

Sterowniki profilów komunikują się ze stosem sterowników Bluetooth za pośrednictwem standardowego mechanizmu żądania we/wy (IRP) stosowanego przez wszystkie sterowniki oparte na architekturze WDM. Sterownik profilu komunikuje się z urządzeniem, przydzielając i wysyłając IRP-y w dół stosu sterowników Bluetooth do sterownika portu Bluetooth, Bthport.sys.

Sterownik profilu przydziela i inicjuje IRP do przetworzenia przez Bthport.sys. Następnie sterowniki profilów komunikują się ze swoimi urządzeniami przy użyciu żądań IOCTL dostarczanych do urządzenia za pomocą IRP_MJ_INTERNAL_DEVICE_CONTROL lub IRP_MJ_DEVICE_CONTROL IRP. Sterownik profilu określa jeden z kodów kontrolek we/wy na poniższej liście w IRP.

Stos sterowników Bluetooth obsługuje następujące polecenia IOCTL dla wywołań trybu jądra za pośrednictwem 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

Stos sterowników Bluetooth obsługuje następujące IOCTL oraz BRB wywołania w trybie jądra (zazwyczaj w przypadku komunikacji między sterownikami) za pośrednictwem 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

Aby uzyskać więcej informacji na temat użycia IOCTL opisanych na poprzednich listach IOCTL, zobacz Bluetooth IOCTLs.

Sterowniki profilów używają przede wszystkim IOCTL_INTERNAL_BTH_SUBMIT_BRB do komunikowania się i interakcji z funkcjami udostępnianymi w stosie sterowników Bluetooth. Sterownik profilu używa IOCTL_INTERNAL_BTH_SUBMIT_BRB do dostarczania do zarządzanego urządzenia struktury danych o zmiennej długości nazywanego blokiem żądań Bluetooth (BRB). Sterowniki profili używają BRB do otwierania i zamykania połączeń z urządzeniami zdalnymi oraz wykonywania większości zadań związanych z wejściem i wyjściem danych. IOCTL_INTERNAL_BTH_SUBMIT_BRB zawiera BRB, który dodatkowo opisuje operację Bluetooth do wykonania. Aby dowiedzieć się więcej o sposobie budowania i wysyłania BRB w stosie sterowników Bluetooth, zobacz Budowanie i wysyłanie BRB.

Każda BRB zaczyna się od standardowego nagłówka zdefiniowanego przez strukturę BRB_HEADER, która określa typ BRB, który określa strukturę pozostałej części BRB. Element członkowski typu, który musi być równy jednej z wartości znalezionych w wyliczeniu BRB_TYPE, określa typ operacji Bluetooth, której wymaga sterownik profilu. Struktura i rozmiar BRB różnią się w zależności od jego typu. Składowa Length struktury BRB_HEADER określa rozmiar BRB w bajtach. Funkcje BthAllocateBrb, BthInitializeBrbi BthReuseBrb automatycznie ustawiają typ i długość elementów członkowskich.

Aby na przykład otworzyć połączenie z urządzeniem zdalnym, określ jeden z kodów funkcji, BRB_L2CA_OPEN_CHANNEL lub BRB_SCO_OPEN_CHANNEL, aby wskazać, że sterownik profilu próbuje otworzyć L2CAP lub kanał połączenia SCO z urządzeniem zdalnym. Stos sterowników Bluetooth używa statusu elementu członkowskiego struktury BRB, aby zwrócić kod stanu specyficzny dla połączenia Bluetooth.

Dla każdego BRB sterownik profilu musi przydzielić i zainicjować odpowiednią strukturę z informacjami o operacji Bluetooth do wykonania.

W poniższej tabeli opisano struktury, które odpowiadają określonym BRBs, które sterowniki profilu mogą wydać:

Blok żądań Bluetooth (BRB) Odpowiednia struktura
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

Aby uzyskać więcej informacji na temat korzystania z funkcji IOCTL Bluetooth i BRB, zobacz Kompilowanie i wysyłanie BRB.