Поддержка уведомлений о событиях Bluetooth
Когда драйвер профиля открывает подключение к удаленному устройству, он должен зарегистрировать себя, чтобы получать уведомления о закрытии подключения или о любых других изменениях подключения. Кроме того, когда драйвер профиля регистрируется для приема входящих подключений, он должен иметь возможность получать уведомления о попытке удаленного устройства подключиться к нему.
Драйверы профилей, использующие синхронное подключение Connection-Oriented (SCO), реализуют и регистрируют функцию обратного вызова SCO. Драйвер профиля клиента регистрирует соответствующую функцию обратного вызова при запросе подключения к удаленному устройству.
Когда драйвер профиля SCO выдает BRB_SCO_OPEN_CHANNEL BRB, он указывает указатель на его функцию обратного вызова SCO в члене обратного вызова соответствующей структуры _BRB_SCO_OPEN_CHANNEL BRB. Если удаленное устройство принимает запрос на подключение SCO, стек драйверов Bluetooth может отправлять уведомления драйверу профиля через функцию обратного вызова при изменении подключения SCO .
Дополнительные сведения о создании подключений SCO см. в статье Создание клиентского подключения SCO к удаленному устройству.
Драйверы профилей, использующие подключения контроллера логических каналов и протокола адаптации (L2CAP), реализуют и регистрируют функцию обратного вызова L2CAP.
Когда драйвер профиля L2CAP выдает BRB_L2CA_OPEN_CHANNEL BRB, он указывает указатель на его функцию обратного вызова L2CAP в члене обратного вызова соответствующей структуры _BRB_L2CA_OPEN_CHANNEL BRB. Если удаленное устройство принимает запрос на подключение L2CAP, стек драйверов Bluetooth может отправлять уведомления драйверу профиля через функцию обратного вызова при изменении подключения L2CAP.
Дополнительные сведения о создании подключений L2CAP см. в статье Создание подключения клиента L2CAP к удаленному устройству.
Аналогичным образом, когда драйвер профиля регистрируется для приема входящих запросов на подключение (L2CAP, SCO), он должен зарегистрировать функцию обратного вызова, чтобы получать уведомления о попытке удаленного устройства подключиться к нему.
Драйверы профилей, использующие L2CAP, указывают функцию обратного вызова L2CAP в элементе IndicationCallback структуры _BRB_L2CA_REGISTER_SERVER . Затем стек драйверов Bluetooth может вызвать функцию обратного вызова, чтобы уведомить драйвер профиля, когда удаленное устройство пытается инициировать подключение L2CAP к драйверу профиля.
Драйверы профилей, использующие SCO, указывают свою функцию обратного вызова SCO в элементе IndicationCallback структуры _BRB_SCO_REGISTER_SERVER . Затем стек драйверов Bluetooth может вызвать функцию обратного вызова, чтобы уведомить драйвер профиля, когда удаленное устройство пытается инициировать подключение SCO к драйверу профиля.
После того как драйвер профиля регистрирует соответствующую функцию обратного вызова, стек драйверов Bluetooth также может уведомить драйвер профиля, если и когда происходит событие через открытое подключение.
Примечание
Драйвер профиля может зарегистрировать ту же функцию обратного вызова, чтобы отправлять ему уведомления об изменениях об открытом канале и об удаленных устройствах, пытающихся подключиться к нему.
Для подключений L2CAP функция обратного вызова L2CAP принимает три параметра:
Контекст, определенный для подключения L2CAP. В случае BRB_L2CA_REGISTER_SERVER запросов этот контекст представляет собой значение, передаваемое в элементе IndicationCallbackContext структуры _BRB_L2CA_REGISTER_SERVER, переданной вместе с запросом. В случае BRB_L2CA_OPEN_CHANNEL или BRB_L2CA_OPEN_CHANNEL_RESPONSE запросов этот контекст представляет собой значение, передаваемое в элементе CallbackContext структуры _BRB_L2CA_OPEN_CHANNEL, переданной вместе с запросом.
Значение из перечисления INDICATION_CODE , указывающее тип события уведомления о входящем подключении L2CAP или изменении состояния связи.
Указатель на структуру INDICATION_PARAMETERS , содержащую параметры, связанные с событием уведомления.
Значение, переданное в параметре Indicationфункции обратного вызова L2CAP, указывает, какой член объединения в объединении Parameters параметра Parameters должен использовать драйвер профиля.
Если значение параметра Индикация равно... | ... используйте следующий элемент объединения параметра Parameters |
---|---|
IndicationRemoteConnect | Подключить |
IndicationRemoteConfigRequest | ConfigRequest |
IndicationRemoteConfigResponse | ConfigResponse |
IndicationFreeExtraOptions | FreeExtraOptions |
IndicationRemoteDisconnect | Отключение |
IndicationRecvPacket | RecvPacket |
Для соединений SCO функция обратного вызова SCO принимает три аргумента:
Контекст, определенный для подключения SCO. В случае BRB_SCO_REGISTER_SERVER запросов этот контекст представляет собой значение, переданное в элементе IndicationCallbackContext структуры _BRB_SCO_REGISTER_SERVER, переданной вместе с запросом. В случае запросов BRB_SCO_OPEN_CHANNEL или BRB_SCO_OPEN_CHANNEL_RESPONSE этот контекст является значением, передаваемым в элементе CallbackContext the_BRB_SCO_OPEN_CHANNEL структуры, переданной вместе с запросом.
Значение из перечисления SCO_INDICATION_CODE , указывающее тип уведомления о входящем подключении SCO или изменении состояния связи.
Указатель на структуру SCO_INDICATION_PARAMETERS , содержащую параметры, связанные с событием уведомления.
Значение, переданное в параметре Indicationфункции обратного вызова SCO, указывает, какой член объединения в объединении Parameters параметра Parameters, который должен использовать драйвер профиля.
Если значение параметра Индикация равно... | ... используйте следующий элемент объединения параметра Parameters |
---|---|
ScoIndicationRemoteConnect | Подключить |
ScoIndicationRemoteDisconnect | Отключение |
Обработка irP Plug and Play удаления
Драйверы профиля должны немедленно передавать все IRP_MN_SURPRISE_REMOVAL IRP в стек для обработки стеком драйверов Bluetooth. Не пытайтесь закрыть открытые каналы в рамках обработки IRP неожиданного удаления. Не создавайте и не отправляйте дополнительные базы данных BRB, которые отправляют данные на базовый радиосвязь после получения неожиданного удаления IRP. Однако драйверы профилей могут выполнять другую очистку при обработке неожиданного удаления IRP.
После того как стек драйверов Bluetooth получит IRP неожиданного удаления, он передает ScoIndicationRemoteDisconnectфункции обратного вызова SCO , которая была указана драйвером профиля, когда драйвер профиля создал и отправил BRB_SCO_OPEN_CHANNEL или BRB_SCO_OPEN_CHANNEL_RESPONSE запрос, чтобы закрыть все открытые в настоящее время каналы SCO. Аналогичным образом стек драйверов Bluetooth будет передавать IndicationRemoteDisconnectфункции обратного вызова L2CAP , которая была указана драйвером профиля при сборке драйвера профиля и отправке BRB_L2CA_OPEN_CHANNEL или BRB_L2CA_OPEN_CHANNEL_RESPONSE запроса, чтобы закрыть все открытые в настоящее время каналы L2CAP.
Драйверы профилей должны отменять регистрацию всех серверов при обработке IRP_MN_REMOVE_DEVICE IRP. Чтобы отменить регистрацию сервера SCO, драйвер профиля должен создать и отправитьзапрос BRB_SCO_UNREGISTER_SERVER . Чтобы отменить регистрацию сервера L2CAP, драйвер профиля должен создать и отправить запрос BRB_L2CA_UNREGISTER_SERVER .