_BRB_L2CA_OPEN_CHANNEL 結構 (bthddi.h)
_BRB_L2CA_OPEN_CHANNEL結構描述要開啟至遠端裝置的 L2CAP 通道,或從配置檔驅動程式接受或拒絕遠端裝置起始的傳入 L2CAP 連線要求回應。
語法
struct _BRB_L2CA_OPEN_CHANNEL {
BRB_HEADER Hdr;
L2CAP_CHANNEL_HANDLE ChannelHandle;
union {
struct {
USHORT Response;
USHORT ResponseStatus;
};
USHORT Psm;
};
ULONG ChannelFlags;
BTH_ADDR BtAddress;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_VALUE_RANGE FlushTO;
L2CAP_FLOWSPEC Flow;
USHORT LinkTO;
ULONG NumExtraOptions;
PL2CAP_CONFIG_OPTION ExtraOptions;
struct {
UCHAR ServiceType;
ULONG Latency;
} LocalQos;
} ConfigOut;
struct {
ULONG Flags;
L2CAP_CONFIG_VALUE_RANGE Mtu;
L2CAP_CONFIG_RANGE FlushTO;
} ConfigIn;
ULONG CallbackFlags;
PFNBTHPORT_INDICATION_CALLBACK Callback;
PVOID CallbackContext;
PVOID ReferenceObject;
CHANNEL_CONFIG_RESULTS OutResults;
CHANNEL_CONFIG_RESULTS InResults;
UCHAR IncomingQueueDepth;
};
成員
Hdr
包含目前 BRB 相關信息 的BRB_HEADER 結構。
ChannelHandle
用於在成功連接時識別連線的句柄。 傳送 BRB_L2CA_OPEN_CHANNEL時,當 BRB 完成時,就會填入此專案。 傳送 BRB_L2CA_OPEN_CHANNEL_RESPONSE時,必須先由伺服器填入此動作,才能傳送 BRB。 指派的值應該是 INDICATION_PARAMETERS::ConnectionHandle
在 IndicationRemoteConnect 期間傳入的值。
Response
只能搭配 BRB_L2CA_OPEN_CHANNEL_RESPONSE使用。 使用其中一個CONNECT_RSP_RESULT_Xxx值。
如果 BRB 傳回狀態為 STATUS_REQUEST_NOT_ACCEPTED, 則 Response 會包含來自遠端主機的負回應。
ResponseStatus
如果 Response 等於 CONNECT_RSP_RESULT_PENDING,則此欄位有效。 使用其中一個CONNECT_RSP_STATUS_XXX值。
Psm
通訊協定/服務多任務器 (PSM) 通道用來連線到遠端裝置。 搭配 BRB_L2CA_OPEN_CHANNEL 要求使用時,此成員會設定為輸入欄位。 搭配 BRB_L2CA_OPEN_CHANNEL_RESPONSE 要求使用時,此成員會當做輸出字段使用。
ChannelFlags
旗標,指定要開啟之通道的需求。 下表列出有效的旗標值:
旗標 | 描述 |
---|---|
CF_LINK_AUTHENTICATED | 必須驗證連結。 |
CF_LINK_ENCRYPTED | 必須加密連結。 設定此旗標也會設定CF_LINK_AUTHENTICATED旗標。 |
CF_LINK_SUPPRESS_PIN | 配置文件驅動程式指出使用者未提示輸入 PIN 的喜好設定。 |
BtAddress
線上預定之裝置的藍牙位址。
ConfigOut
子結構,其中包含傳送至遠端裝置 之BRB_L2CA_OPEN_CHANNEL BRB 的參數設定。
ConfigOut.Flags
旗標,指定要開啟之通道的需求。 下表列出有效的旗標值:
旗標 | 描述 |
---|---|
CF_LINK_AUTHENTICATED | 必須驗證連結。 |
CF_LINK_ENCRYPTED | 必須加密連結。 設定此旗標也會設定CF_LINK_AUTHENTICATED旗標。 |
CF_LINK_SUPPRESS_PIN | 配置文件驅動程式指出使用者未提示輸入 PIN 的喜好設定。 |
ConfigOut.Mtu
訊息傳輸單位的範圍 (MTU) ,用來交涉通道輸出的一半大小。
ConfigOut.FlushTO
要用於通道輸出一半之排清逾時的可能值範圍。
ConfigOut.Flow
保留供未來使用。 請勿使用。
ConfigOut.LinkTO
連結管理員連結逾時。
ConfigOut.NumExtraOptions
ExtraOptions 成員中包含的數位項目數目。 對大部分用戶端而言,此值應該是零。
ConfigOut.ExtraOptions
ExtraOptions 成員中包含的數位項目數目。 對大部分用戶端而言,此值應該是零。
ConfigOut.LocalQos
保留供未來使用。 請勿使用。
ConfigOut.LocalQos.ServiceType
保留供未來使用。 請勿使用。
ConfigOut.LocalQos.Latency
保留供未來使用。 請勿使用。
ConfigIn
包含參數設定的子結構,用來驗證從遠端裝置傳送的內送 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB。
ConfigIn.Flags
旗標,指定要開啟之通道的需求。 下表列出有效的旗標值:
旗標 | 描述 |
---|---|
CF_LINK_AUTHENTICATED | 必須驗證連結。 |
CF_LINK_ENCRYPTED | 必須加密連結。 設定此旗標也會設定CF_LINK_AUTHENTICATED旗標。 |
CF_LINK_SUPPRESS_PIN | 配置文件驅動程式指出使用者未提示輸入 PIN 的喜好設定。 |
ConfigIn.Mtu
訊息傳輸單位的範圍 (MTU) ,用來交涉通道輸出的一半大小。
ConfigIn.FlushTO
要用於通道輸出一半之排清逾時的可能值範圍。
CallbackFlags
旗標,指定哪些事件應該產生回呼例程,以通知配置檔驅動程式已發生事件。 下表包含有效的旗標值。
旗標 | 描述 |
---|---|
CALLBACK_CONFIG_EXTRA_IN | 如果設定,當遠端裝置的組態要求包含額外的選項時,將會呼叫回呼例程。 如果未設定,額外的組態選項將會拒絕為未知的選項。 此旗標會與 BRB_L2CA_OPEN_CHANNEL_RESPONSE BR 搭配使用。 |
CALLBACK_CONFIG_EXTRA_OUT | 如果設定,當遠端裝置拒絕來自BRB_L2CA_OPEN_CHANNEL要求的額外組態選項時,將會呼叫回呼例程。 如果未設定,且遠端裝置因為額外選項而拒絕設定要求,將會關閉連線。 |
CALLBACK_CONFIG_QOS | 如果設定,當遠端裝置傳送包含 QOS 值的組態要求時,將會呼叫回呼例程。 如果未設定此旗標,而且遠端裝置會在設定要求中傳送 QOS 參數,或拒絕配置檔驅動程式所要求的 QOS 參數,則會中斷連線。 |
CALLBACK_DISCONNECT | 如果設定,當遠端裝置與 L2CAP 通道中斷連線時,將會呼叫回呼例程。 |
CALLBACK_RECV_PACKET | 如果設定,當配置文件驅動程式收到傳入 L2CAP 封包時,將會呼叫回呼例程。 |
Callback
配置文件驅動程式所實作的 L2CAP 回呼函 式,藍牙驅動程式堆疊應該呼叫 以通知配置檔驅動程式有關 L2CAP 連線的任何變更。
CallbackContext
要傳遞至 Callback 成員中所指定回呼函式的內容。 配置檔案驅動程式會定義此值。
ReferenceObject
要傳遞至 ObReferenceObject 和 ObDereferenceObject 之物件的指標,要維護其參考計數。
OutResults
CHANNEL_CONFIG_RESULTS結構,其中包含輸出要求的組態參數。
InResults
包含輸入要求之組態參數的CHANNEL_CONFIG_RESULTS結構。
IncomingQueueDepth
指定訊息傳輸單位中的傳入佇列長度, (MTU) 。
回應
此成員會作為 BRB_L2CA_OPEN_CHANNEL_RESPONSE 要求的輸入參數,以及 BRB_L2CA_OPEN_CHANNEL 要求的輸出參數。
對於 BRB_L2CA_OPEN_CHANNEL_RESPONSE 要求,此成員會保留旗標,指出配置檔驅動程式對遠端裝置的回應。 下表包含有效的旗標值。
旗標 | 描述 |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | 配置檔驅動程序因為缺少資源而拒絕連線。 |
CONNECT_RSP_RESULT_PENDING | 配置文件驅動程式目前忙碌中,無法接受連線。 請稍後再試一次。 |
CONNECT_RSP_RESULT_PSM_NEG | 配置檔驅動程序因為不支援 PSM 而拒絕連線。 |
CONNECT_RSP_RESULT_SECURITY_BLOCK | 配置檔驅動程式基於安全性理由拒絕連線。 |
CONNECT_RSP_RESULT_SUCCESS | 配置檔驅動程式已接受連線。 |
針對 BRB_L2CA_OPEN_CHANNEL BRB,此成員包含配置檔驅動程式嘗試連線的遠端裝置回應。 下表包含有效的旗標值。
旗標 | 描述 |
---|---|
CONNECT_RSP_RESULT_NO_RESOURCES | 遠端裝置因為資源不足而拒絕連線。 |
CONNECT_RSP_RESULT_PSM_NEG | 遠端裝置拒絕連線。 |
CONNECT_RSP_RESULT_SECURITY_BLOCK | 遠端裝置基於安全性考慮拒絕連線。 |
CONNECT_RSP_RESULT_SUCCESS | 遠端裝置已接受連線。 |
ResponseStatus
如果在呼叫 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB 期間, 回應 成員會設定為 CONNECT_RSP_RESULT_PENDING
,則此成員有效且包含下列其中一個值:
- CONNECT_RSP_STATUS_AUTHENTICATION_PENDING
- CONNECT_RSP_STATUS_AUTHORIZATION_PENDING
- CONNECT_RSP_STATUS_NO_INFORMATION
備註
若要開啟 L2CAP 通道,配置檔驅動程式應該建置並傳送BRB_L2CA_OPEN_CHANNEL要求。
作為用戶端的配置檔驅動程式會指定目的地位址、PSM 和各種組態參數。
如果 BRB_L2CA_OPEN_CHANNEL 要求順利完成, 則 OutResults 和 InResults 成員中會提供新建立連線的各種資訊。 OutResults 會指定通道的輸出半部參數, InResults 會指定通道輸入半部的參數。
在此結構中傳遞的數位組態參數,例如 Mtu 成員,是用來與遠端無線電交涉的範圍。 客戶端應該盡可能提供廣泛的功能,以增加成功通道交涉的機會。 指定大於基本藍牙最小 MTU 大小的最小 MTU 大小,只有在絕對必要時才應該完成。 如果交涉失敗,連線將會失敗。
配置文件驅動程式必須配置記憶體來儲存儲存在 ExtraOptions 成員中的陣列,而且除非回 呼成員中 定義的回呼函式傳回具有 IndicationFreeExtraOptions 通知的回呼函式 ,否則 不應釋放此記憶體,INDICATION_CODE在 指示 參數中傳遞的值。
_BRB_L2CA_OPEN_CHANNEL 結構的 IncomingQueueDepth 成員會指定藍牙驅動程式堆疊在連線上接收並排入佇列的最大 MTU 數目,然後再開始捨棄它們。 將此值設定為非常小的數位會增加數據遺失的機會,而將此值設定為非常大量的可能會增加記憶體使用量。 將此成員設定為10是有效的入侵。
若要接受或拒絕遠端裝置起始的傳入 L2CAP 連線要求,配置檔驅動程式應該 建置並傳送 BRB_L2CA_OPEN_CHANNEL_RESPONSE 要求。
當藍牙驅動程式堆棧呼叫配置文件驅動程式的 L2CAP 回呼函式,並在回呼函式的指示參數中傳遞 IndicationRemoteConnect 時,配置文件驅動程式應該建置並傳送BRB_L2CA_OPEN_CHANNEL_RESPONSE要求。
根據此結構的 Response 成員值,藍牙驅動程式堆棧接著會接受或拒絕連線要求。
配置文件驅動程式會指定是否應該接受連線,方法是將此結構的 Response 成員儲存適當的值。
收到CONNECT_RSP_RESULT_PENDING回應時,連線客戶端應該重設其連線定時器,並等候更新的連線回應訊息。 呼叫 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB 的配置檔驅動程式 , 其中 回應 成員設定為 CONNECT_RSP_RESULT_PENDING 應該會立即發出具有更新連線值的額外 BRB_L2CA_OPEN_CHANNEL_RESPONSE BRB。 更新的值可以是 回應 成員中所述的任何狀態代碼,包括重新傳送CONNECT_RSP_RESULT_PENDING值。
配置文件驅動程式必須配置記憶體來儲存儲存在 ExtraOptions 成員中的陣列,而且在 Callback 成員中定義的 回 呼函式傳回時,必須先使用 IndicationFreeExtraOptions 通知傳回的回呼函式 ,INDICATION_CODE 在 指示 參數中傳遞的值。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows Vista 和更新版本中的版本:_Supported。 |
標頭 | bthddi.h (包含 Bthddi.h) |