Bagikan melalui


Cara menggunakan Bluetooth Driver Stack

Setelah Windows memuat dan menginisialisasi tumpukan driver Bluetooth, tumpukan driver menemukan perangkat Bluetooth aktif yang telah dipasangkan. Tumpukan driver kemudian menghasilkan pengidentifikasi perangkat (ID perangkat) untuk semua perangkat yang dipasangkan. Selanjutnya, tumpukan driver menggunakan mekanisme Plug and Play standar (PnP) untuk memuat driver profil yang sesuai untuk setiap perangkat. Driver profil yang akan dimuat dipilih berdasarkan file INF yang menginstal driver profil dan pengidentifikasi perangkat, seperti yang dihasilkan oleh tumpukan driver Bluetooth dan dijelaskan dalam Menginstal Perangkat Bluetooth.

Driver profil berkomunikasi dengan tumpukan driver Bluetooth melalui mekanisme standar berbasis Paket Permintaan I/O (IRP) yang digunakan oleh semua driver berdasarkan arsitektur WDM. Driver profil berkomunikasi dengan perangkatnya dengan mengalokasikan dan mengirim IRP ke tumpukan driver Bluetooth ke driver port Bluetooth, Bthport.sys.

Driver profil mengalokasikan dan menginisialisasi IRP untuk diproses oleh Bthport.sys. Driver profil kemudian berkomunikasi dengan perangkat mereka dengan menggunakan permintaan IOCTL yang dikirimkan ke perangkat melalui IRP IRP_MJ_INTERNAL_DEVICE_CONTROL atau IRP_MJ_DEVICE_CONTROL . Driver profil menentukan salah satu kode kontrol I/O dalam daftar berikut di IRP.

Tumpukan driver Bluetooth mendukung IOCTL berikut untuk pemanggil mode kernel melalui 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

Tumpukan driver Bluetooth mendukung pemanggil mode kernel IOCTL dan BRB berikut (umumnya untuk komunikasi driver-ke-driver) melalui 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

Untuk informasi selengkapnya tentang cara menggunakan IOCTL yang dijelaskan dalam daftar sebelumnya, lihat IOCTL Bluetooth.

Driver profil terutama menggunakan IOCTL_INTERNAL_BTH_SUBMIT_BRB untuk berkomunikasi dan berinteraksi dengan fungsionalitas yang disediakan dalam tumpukan driver Bluetooth. Driver profil menggunakan IOCTL_INTERNAL_BTH_SUBMIT_BRB untuk mengirimkan struktur data panjang variabel yang disebut Blok Permintaan Bluetooth (BRB) ke perangkat yang dikelolanya. Driver profil menggunakan BRB untuk membuka dan menutup koneksi ke perangkat jarak jauh dan untuk melakukan sebagian besar tugas input dan output. IOCTL_INTERNAL_BTH_SUBMIT_BRB berisi BRB yang lebih lanjut menjelaskan operasi Bluetooth untuk dilakukan. Untuk mempelajari selengkapnya tentang cara membuat dan mengirim BRB ke tumpukan driver Bluetooth, lihat Membangun dan Mengirim BRB.

Setiap BRB dimulai dengan header standar yang ditentukan oleh struktur BRB_HEADER yang menentukan jenis BRB, yang menentukan struktur BRB lainnya. Anggota Jenis , yang harus sama dengan salah satu nilai yang ditemukan dalam enumerasi BRB_TYPE , menentukan jenis operasi Bluetooth yang diminta driver profil. Struktur dan ukuran BRB bervariasi sesuai dengan jenis BRB. Anggota Panjang struktur BRB_HEADER menentukan ukuran, dalam byte, dari BRB. Fungsi BthAllocateBrb, BthInitializeBrb, dan BthReuseBrb secara otomatis mengatur anggota Tipe dan Panjang .

Misalnya, untuk membuka koneksi ke perangkat jarak jauh, tentukan salah satu kode fungsi, BRB_L2CA_OPEN_CHANNEL atau BRB_SCO_OPEN_CHANNEL, untuk menunjukkan bahwa driver profil mencoba membuka L2CAP atau saluran koneksi SCO ke perangkat jarak jauh. Tumpukan driver Bluetooth menggunakan anggota Status struktur BRB untuk mengembalikan kode status khusus Bluetooth.

Untuk setiap BRB, driver profil harus mengalokasikan dan menginisialisasi struktur yang sesuai dengan informasi tentang operasi Bluetooth yang akan dilakukan.

Tabel berikut ini menjelaskan struktur yang sesuai dengan BRB tertentu yang dapat dikeluarkan driver profil:

Blok Permintaan Bluetooth (BRB) Struktur yang sesuai
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

Untuk informasi selengkapnya tentang menggunakan IOCTL dan BRB Bluetooth, lihat Membangun dan Mengirim BRB.