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_SDP_ATTRIBUTE_SEARCH
IOCTL_BTH_SDP_SERVICE_ATTRIBUTE_SEARCH
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_L2CA_OPEN_CHANNEL_RESPONSE
BRB_GET_DEVICE_INTERFACE_STRING
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.