MB - 多 SIM 卡作業
桌面多模數據機多執行器支援
傳統上,非手機 Windows 裝置尚未針對多 SIM 數據機設定,因為它們的實體空間限制比手機少。 這可讓他們同時真正利用多個主動無線電,而不是像手機一樣擁有一個具有多個 SIM 卡的數據機:不過,由於 eSIM 和企業中的案例增加,非手機裝置上對多 SIM 卡/數據機支援的需求有所增加。
大多數典型的多 SIM 卡裝置都有雙 SIM 卡插槽,但僅限於支持數據的一個主要 SIM 卡,而另一個主要的 SIM 卡則只支援語音功能。 這類限制不存在於非手機計算機模型中,因為所有 SIM 卡都用於數據連線。
雖然此規範中定義的架構理論上可以支援無限數量的數據機和 SIM 卡,但 Windows 10 版本 1703 及更高版本僅完整支援 雙 SIM 卡/單一啟用(DSSA) 案例。
NDIS 數據機介面規格
現有介面與功能缺口
可以支援具有多個獨立數據機的雙 SIM/雙主動功能,其中每個數據機都是個別的裝置,且完全獨立運作。 不過,這不在這份檔的範圍之內,而是著重於 WWAN miniport 數據機,該數據機能夠向主機呈現多重且同時的行動數據堆疊。 本節會定義各種物件,並建立與多重 SIM 功能相關的所有 MB 檔中所使用的術語。
硬體的進步導致裝置可以同時與多個行動數據網路進行註冊。 在這類裝置中,假設有「多個行動數據堆疊實例」平行執行,每個實例都能夠維護註冊、監視訊號強度、執行交接並接聽傳入頁面。 本檔其餘部分的每個「細胞堆疊」實例都會稱為 執行者。 例如,在能夠同時維護兩個網路註冊的裝置中,數據機硬體會被視為有兩個執行程式。
執行器是硬體的邏輯表示法,事實上可能是一個單一硬體轉接器進行多路復用。 確切的硬體細節會被視為廠商實作詳細數據,而且此規格的範圍不足。 對於 NDIS 迷你埠驅動程式,執行單元被作為 WWAN 小型埠介面卡的多個實例來展示。 針對 MBIM 數據機,執行程式會以列舉複合裝置上的多個 MBIM 函式表示。
下列兩個影像說明雙 SIM 數據機的邏輯檢視。 每個都顯示執行程式和UICC的可能組合。
執行器內的蜂窩堆疊大多數情況下是自包的,除非在雙重待命數據機實作中,負責處理流量(語音和/或數據)的執行器可能會阻止另一組件維持註冊。
下圖說明雙待命數據機的邏輯視圖。 執行器 0 上的通訊量,包括一次電話通話,會導致執行器 1 失去註冊。
NDIS 6.7 中的 Windows Desktop 數據機介面模型無法容納這類架構,因為它是以數個隱含假設為基礎:
- 此模型假設數據機內有單一執行程式。
- 此模型假設有一個與數據機硬體直接相關聯的單一 UICC 記憶卡。
- UICC 會被視為單一應用程式 SIM 卡。
相較之下,Windows Mobile 上的Microsoft無線電介面層 (RIL) 介面會明確公開這些假設的多重性。 Windows Mobile 中的行動寬頻介面會公開透過個別迷你埠獨立註冊的能力,並假設已透過 RIL 介面完成裝置的一些基本設定。 若要提供對等功能,Windows Desktop 必須提供機制來探索執行程式和位置數目、獨立存取執行程式、定義執行程式與位置之間的對應,以及定義每個執行程式將使用之對應 UICC 記憶卡內的應用程式。
如需行動資料架構的詳細資訊,以及 Windows 10 行動裝置版與桌面電腦之間的差異,請參閱 行動數據架構和實作。
主要物件和作業
下圖顯示數據機的抽象模型。
每個數據機都是由全域唯一識別碼 (GUID) 來識別,並包含一組或多個執行程式,每一個執行程式都能在行動數據網路上獨立註冊。 每個執行程式都有相關聯的執行程式索引,這是一個整數,從第一個執行程式的 0 開始。 此外,數據機提供一個或多個插槽,可能包含UICC卡。 假設資源槽的數目是大於或等於執行器數目的。 每個槽位都有一個相關聯的索引,也從 0 開始,以及目前的狀態,這些狀態與槽位的電源狀態和卡片(如果有的話)的可用性狀態相關。
為了維持與現有數據機的相容性,每個執行程式都會以單一位置的 UICC 記憶卡所提供的資訊運作。 執行器與槽位之間的關聯是由槽位映射所定義,它將每個執行器對應到一個槽位。
卡槽可能包含 UICC 記憶卡,每張卡片都包含一或多個 UICC 應用程式,例如 USIM、CSIM、ISIM,或可能是其他電信和非電信應用程式,例如 PKCS#15 或 NFC 安全元素的 Global Platform 應用程式。 這些個別 UICC 應用程式的尋址和使用是本文件未來規格和範圍外的主題。
數據機的 Windows Desktop NDIS 介面的特點是交換 OID 和 NDIS 通知。 在大部分情況下,這些 OID 會導向個別執行程式;不過,一些命令和通知的範圍是數據機。
針對非 Windows Mobile 作業系統,多執行者數據機會顯示為一個裝置,具有多個實體 WWAN 迷你埠實例。 每個實體迷你埠實例都代表一個執行元件,能夠維持註冊為 NDIS 實例。 您可以在運行時間建立其他虛擬實例,以管理內容特定的封包數據和裝置服務會話。 執行程式特定的命令和通知會透過代表該執行程式的 WWAN 迷你埠 NDIS 實體實例交換。 數據機特定命令(換句話說,不是執行程式特定的命令)及其對應的通知可能會傳送至或來自任何實體迷你埠實例。
下圖顯示執行程式特定命令和通知的差異(第一個圖表),其中命令和通知會通過並來自相同的執行程式,以及數據機特定的命令和通知(第二個圖表),其中命令可能會經歷任何執行程式,並來自任何執行程式。
所有發出至迷你埠實例的 OID 集合或查詢要求,都會針對與迷你埠實例相關聯的數據機和執行程序執行。 同樣地,從迷你埠實例傳送的所有未請求通知和未經請求的裝置服務事件都適用於數據機和迷你埠實例相關聯的執行程式。 例如,來自迷你埠的未經請求NDIS_STATUS_WWAN_REGISTER_STATE或NDIS_STATUS_WWAN_PACKET_SERVICE通知,表示相關聯數據機和執行程序的註冊(或封包服務狀態),且與其他數據機或其他執行程式的狀態無關。
當裝置中有多個數據機和/或多個執行程式時,與該數據機和執行程式組合相關聯的實體迷你埠適配卡會發出與特定數據機和執行程式組合相關的非內容特定未請求通知。
同樣地,如果裝置有多個數據機和/或多個執行程式,與特定數據機和執行程式組合相關聯的實體迷你埠適配卡實例可以接收與該數據機和執行程式相關的非內容特定 OID 查詢要求。 接收這類查詢要求的配接器會根據 OID 定義來處理它。 如果迷你埠驅動程式選擇,此查詢要求可以與與該數據機和執行程式相關聯的任何配接器實例中的其他任何同進程 OID 集合或查詢要求同時處理。 與相同數據機和執行程式相關聯的迷你埠配接器的所有實例都會報告該行動數據機和執行程式相同的狀態資訊(例如無線電電源狀態、註冊狀態、封包服務狀態等等)。
對於具有多個數據機和/或多個執行程式的裝置,與數據機和執行程式組合相關聯的實體迷你埠適配卡實例可以接收非內容特定的 OID 集合要求。 迷你埠驅動程式應追蹤此類要求的進度。 如果任何配接器中有一個這類集合要求正在進行中,且尚未完成,則第二個這類集合要求嘗試(與相同數據機和執行程式相關聯的任何配接器實例)應在先前的要求完成之後排入佇列並處理。
Windows 10 桌面 WMBCLASS 驅動程式遵循上一段所述的規格來處理此設定請求導致的競爭條件,但如果在數據機層發生競爭狀況,數據機應該遵從相同的指引,在 MBIM 函式上佇列有衝突的全裝置指令,如果它還在處理與相同基礎裝置關聯的其他函式。
設定和查詢要求的 OID
若要查詢數據機中的裝置數目(執行程式)和插槽,以及可能同時作用中的執行程式數目,主機會使用 OID_WWAN_SYS_CAPS。
若要查詢執行程式的功能,主機會使用 OID_WWAN_DEVICE_CAPS_EX。
若要定義與每個執行器綁定的插槽或查詢目前的映射,主機會使用 OID_WWAN_DEVICE_SLOT_MAPPINGS。
若要查詢數據機上特定插槽的狀態,主機會使用 OID_WWAN_SLOT_INFO_STATUS。
個別裝置和個別執行程式命令
將執行緒概念新增至 Windows 10 版本 1703 及更新版本的非 Windows Mobile 裝置後,OID 現在分成兩個類別:每部裝置 OID 和每個執行緒 OID。 下表說明哪些 OID 屬於哪個類別。
個別裝置或個別執行程式 | OID 名稱 |
---|---|
每部裝置 | OID_WWAN_DRIVER_CAPS |
OID_WWAN_ENUMERATE_DEVICE_SERVICE_COMMANDS | |
OID_WWAN_ENUMERATE_DEVICE_SERVICES | |
OID_WWAN_PRESHUTDOWN | |
OID_WWAN_VENDOR_SPECIFIC | |
OID_WWAN_SYS_CAPS | |
OID_WWAN_DEVICE_SLOT_MAPPINGS | |
個別執行程式 | OID_WWAN_AUTH_CHALLENGE |
OID_WWAN_CONNECT | |
OID_WWAN_DEVICE_CAPS | |
OID_WWAN_DEVICE_CAPS_EX | |
OID_WWAN_DEVICE_SERVICE_COMMAND | |
OID_WWAN_DEVICE_SERVICE_SESSION | |
OID_WWAN_DEVICE_SERVICE_SESSION_WRITE | |
OID_WWAN_DEVICE_SERVICES | |
OID_WWAN_HOME_PROVIDER | |
OID_WWAN_NETWORK_IDLE_HINT (網路閒置提示) | |
OID_WWAN_PACKET_SERVICE | |
OID_WWAN_PIN | |
OID_WWAN_PIN_EX | |
OID_WWAN_PIN_LIST | |
OID_WWAN_PREFERRED_MULTICARRIER_PROVIDERS | |
OID_WWAN_PREFERRED_PROVIDERS | |
OID_WWAN_PROVISIONED_CONTEXTS | |
OID_WWAN_RADIO_STATE | |
OID_WWAN_READY_INFO | |
OID_WWAN_REGISTER_STATE(OID行動寬頻註冊狀態) | |
OID_WWAN_SERVICE_ACTIVATION | |
OID_WWAN_SIGNAL_STATE | |
OID_WWAN_SMS_CONFIGURATION | |
OID_WWAN_SMS_DELETE | |
OID_WWAN_SMS_READ | |
OID_WWAN_SMS_SEND | |
OID_WWAN_SMS_STATUS | |
OID_WWAN_SUBSCRIBE_DEVICE_SERVICE_EVENTS | |
OID_WWAN_USSD | |
OID_WWAN_VISIBLE_PROVIDERS | |
OID_WWAN_SLOT_INFO_STATUS |
注意
OID_WWAN_RADIO_STATE 也已針對 Windows 10 版本 1703 進行更新。 如需詳細資訊,請參閱OID_WWAN_RADIO_STATE。
MBIM 介面更新以支援多卡操作
對於非 Windows Mobile 作業系統,多執行緒數據機會顯示為具有多個 MBIM 功能的 USB 複合裝置。 每個 MBIM 函式都代表可以維護註冊的執行程式。 執行程式特定的命令和通知會透過代表該執行程式的 MBIM 函式交換,而數據機特定命令(換句話說,不是執行程式特定的命令)及其對應的通知可能會傳送至或來自屬於相同基礎 USB 複合裝置的任何 MBIM 函式。
所有發出至 MBIM 函式的 CID 集合或查詢要求,都會針對與迷你埠實例相關聯的數據機和執行程式執行;同樣地,從 MBIM 函式傳送的所有未請求通知都適用於數據機和與 MBIM 函式相關聯的執行程式。 同樣地,從迷你埠實例傳送的所有未請求裝置服務事件都適用於數據機和與 MBIM 函式相關聯的執行程式。 例如,來自 MBIM 函式的未經請求MBIM_CID_REGISTER_STATE或MBIM_CID_PACKET_SERVICE通知只會指出相關聯數據機/執行程式的註冊或封包服務狀態,且與其他數據機或其他執行程式的狀態無關。
當裝置中有多個數據機和/或多個執行程式時,與特定數據機和執行程式組合相關的非內容特定未請求通知,應從與上述數據機和執行程式相關聯的 MBIM 函式發出。
在具有多個數據機和/或多個執行程式的裝置中,與特定數據機和執行程式相關的非內容特定 CID 查詢要求可能會發出給與該數據機和執行程式組合相關聯的 MBIM 函式。 接收這類查詢要求的函式應根據 CID 定義來處理它。 如果是由數據機韌體選擇,則這類查詢要求可能會與任何其他 CID 集合或查詢要求同時處理,或由與該數據機和執行程式相關聯的任何 MBIM 函式處理。 與相同數據機相關聯的所有 MBIM 函式,除了它們所代表的執行程式之外,也應報告該行動電話數據機的相同狀態資訊。
當裝置中有多個數據機和/或多個執行程式時,可能會對與該數據機和執行程式相關聯的 MBIM 函式發出非執行程式特定的 CID 集合要求。 數據機應追蹤整體要求的進展。 如果任何配接器中有這類設置請求正在進行且尚未完成,則對相同數據機和執行程序相關聯的任何配接器實例的第二次設置請求應在先前的請求完成後排入佇列並處理。
下圖說明兩個不同的數據機中 WWANSVC 與 MBIM 函式之間的資訊流程。
本節包含所定義裝置服務的詳細數據機範圍和個別執行程式 CID 描述。 定義會參考回現有的公用 MBIM1.0 規格。 MBIM 相容的裝置會在CID_MBIM_DEVICE_SERVICES查詢時,實作並報告下列裝置服務。 現有的已知服務定義於USB NCM MBIM 1.0 規格的第10.1節中。 Microsoft會擴充此專案,以定義下列服務。
服務名稱 = Basic Connect 延伸模組
UUID = UUID 基本連接擴展
UUID 值 = 3d01dcc5-fef5-4d05-0d3abef7058e9aaf
下列 CID 是針對 UUID_MS_BasicConnect所定義:
CID | 命令碼 | 最低OS版本 |
---|---|---|
MBIM_CID_MS_SYS_CAPS | 5 | Windows 10 版本 1703 |
MBIM_CID_MS_DEVICE_CAPS_V2 | 6 | Windows 10 版本 1703 |
MBIM_CID_MS_DEVICE_SLOT_MAPPINGS | 7 | Windows 10 版本 1703 |
MBIM_CID_MS_SLOT_INFO_STATUS | 8 | Windows 10 版本 1703 |
下列 CID 區段中的所有偏移量都是從 InformationBuffer MBIM_COMMAND_MSG 開頭計算。
MBIM_CID_MS_SYS_CAPS
描述
此 CID 會擷取數據機的相關信息。 這可以在作為 USB 功能公開的任何 MB 實例上發送。
查詢
MBIM_COMMAND_MSG上的 InformationBuffer 包含作為 MBIM_MS_SYS_CAPS_INFO 的響應數據。
設定
不適用。
未請求的事件
不適用。
參數
操作 | 設定 | 查詢 | 通知 |
---|---|---|---|
指令 | 不適用 | 不適用 | 不適用 |
回應 | 不適用 | MBIM_MS_SYS_CAPS_INFO | 不適用 |
數據結構
查詢
InformationBuffer 應為 null,InformationBufferLength 為零。
設定
不適用。
回應
下列MBIM_SYS_CAPS_INFO結構應用於 InformationBuffer。
抵消 | 大小 | 領域 | 類型 | 描述 |
---|---|---|---|---|
0 | 4 | NumberOfExecutors | UINT32 | 此數據機所報告的 MBB 實例數目 |
4 | 4 | 插槽數量 | UINT32 | 此數據機上可用的實體UICC插槽數目 |
8 | 4 | 並行性 | UINT32 | 可能同時作用中的 MBB 實例數目 |
12 | 8 | ModemId | UINT64 | 每個數據機的唯一64位標識碼 |
NumberOfExecutors 字段代表數據機目前組態中支援的 執行 程式數目。 這會直接對應到數據機支援的「子電話」堆疊數目。
NumberofSlots 欄位代表數據機上實際存在的插槽數目。 每個回報的插槽都必須能夠接收 UICC 卡(如果需要,插槽本身可以是異質混合:mini SIM、micro SIM、nano SIM 或任何 ETSI 所定義的標準)。 插槽數目必須等於或大於支援的執行緒數目。 「大於」條款允許使用非電話用途的 UICC,例如安全性、NFC 等。
[並行] 字段代表可能同時作用中的執行程式 (MBB 實例) 數目。 範圍必須是 1 ≤ 並行性 ≤ 執行器數量 (NumberOfExecutors)。 例如,雙待命數據機的並行度會是1,而雙主動數據機的並行度為2
數據機識別碼 欄位代表指定數據機硬體的唯一 64 位識別碼。 IHV 可以實作自己的邏輯,為每個數據機產生唯一的64位值;例如,哈希其中一個 IMEI 數位、隨機產生 64 位數位等等。產生64位標識碼之後,它應該會在重新啟動和SIM卡移除/插入之間保存。
狀態代碼
此 CID 使用通用狀態代碼(請參閱公用 USB MBIM 標準第 9.4.5 節中的狀態代碼使用 )。
MBIM_CID_MS_DEVICE_CAPS_V2
描述
此 CID 會擷取與執行程式相關的功能資訊。 由於此 CID 是MBIM_CID_DEVICE_CAPS的延伸模組,因此此處只會顯示公用 USB MBIM 標準第 10.5.1 節中所述MBIM_CID_DEVICE_CAPS的變更。
此 CID 會繼續為僅限查詢,且會傳回 MBIM_MS_DEVICE_CAPS_INFO_V2 結構,以回應 MBIM 服務 MSUUID_BASIC_CONNECT 及 CID MBIM_CID_MS_DEVICE_CAPS_V2 的 MBIM_COMMAND_MSG。
參數
操作 | 設定 | 查詢 | 通知 |
---|---|---|---|
命令 | 不適用 | 不適用 | 不適用 |
回應 | 不適用 | MBIM_MS_DEVICE_CAPS_INFO_V2 | 不適用 |
數據結構
查詢
與公用 USB MBIM 標準的第 10.5.1.4 節相同。
設定
不適用。
回應
下列MBIM_DEVICE_CAPS_INFO_V2結構應用於 InformationBuffer。 相較於公用 USB MBIM 標準第 10.5.1 節中所定義的 MBIM_CID_DEVICE_CAPS 結構,下列結構具有 名為 "deviceIndex"的新欄位。 除非此處所述,否則公用USB MBIM標準表10-14中的欄位描述適用於此處。
抵消 | 大小 | 田 | 類型 | 描述 |
---|---|---|---|---|
0 | 4 | 裝置類型 | MBIM設備類型 | |
4 | 4 | CellularClass | MBIM_CELLULAR_CLASS | |
8 | 4 | VoiceClass | MBIM_VOICE_CLASS | |
12 | 4 | SimClass | MBIM_SIM_CLASS | 對於支援此 CID 的 MBIM 數據機,SimClass 皆會回報為 MBIMSimClassSimRemovable。 |
16 | 4 | DataClass | MBIM_DATA_CLASS | |
20 | 4 | SmsCaps | MBIM_SMS_CAPS | |
24 | 4 | ControlCaps | MBIM_CTRL_CAPS | |
28 | 4 | MaxSessions | UINT32 | |
32 | 4 | 自訂資料類別偏移量 | 抵消 | |
36 | 4 | CustomDataClassSize(自定資料類別大小) | 尺寸(0..22) | |
40 | 4 | 設備ID偏移 | 抵消 | |
44 | 4 | 裝置ID大小 | SIZE(0..26) | |
48 | 4 | 韌體資訊偏移量 | 抵消 | |
52 | 4 | FirmwareInfoSize | 大小(0到60) | |
56 | 4 | 硬體資訊偏移 | 抵消 | |
60 | 4 | 硬體資訊大小 | SIZE(0..60) | |
64 | 4 | 執行者索引 | UINT32 | 執行程式索引。 範圍從 0 到 n-1,其中 n 是 MBIM 數據機中包含的 MBB 實例數目。 其值一律是常數且與列舉順序無關。 |
68 | 資料緩衝區 (DataBuffer) | DATABUFFER | 包含 CustomDataClass、DeviceId、FirmwareInfo和 HardwareInfo 成員的數據緩衝區。 |
狀態代碼
此 CID 使用一般狀態代碼(請參閱公用 USB MBIM 標準第 9.4.5 節中的狀態代碼使用)。
MBIM_CID_MS_DEVICE_SLOT_MAPPINGS
描述
此 CID 會設定或傳回裝置位置對應(換句話說,即執行程式位置對應)。
查詢
MBIM_COMMAND_MSG 上的 InformationBuffer 未被使用。 MBIM_MS_DEVICE_SLOT_MAPPING_INFO會在 MBIM_COMMAND_DONE 的 InformationBuffer 中傳回。
設定
MBIM_COMMAND_MSG的 InformationBuffer 包含MBIM_MS_DEVICE_SLOT_MAPPING_INFO。 MBIM_MS_DEVICE_SLOT_MAPPING_INFO會在 MBIM_COMMAND_DONE 的 InformationBuffer 中傳回。 無論 Set CID 成功還是失敗,回應中包含的MBIM_MS_DEVICE_SLOT_MAPPING_INFO都代表目前的裝置位置對應。
未請求的事件
不適用。
參數
操作 | 設定 | 查詢 | 通知 |
---|---|---|---|
命令 | MBIM_MS_DEVICE_SLOT_MAPPING_INFO | 不適用 | 不適用 |
回應 | MBIM_MS_DEVICE_SLOT_MAPPING_INFO | MBIM_MS_DEVICE_SLOT_MAPPING_INFO | 不適用 |
數據結構
查詢
InformationBuffer 應為 null,InformationBufferLength 為零。
設置
下列MBIM_MS_DEVICE_SLOT_MAPPING_INFO結構應用於 InformationBuffer。
抵消 | 大小 | 領域 | 類型 | 描述 |
---|---|---|---|---|
0 | 4 | MapCount (MC) | UINT32 | 對應數目,一律等於裝置/執行程式的數目。 |
4 | 8 * MC | SlotMapList | OL_PAIR_LIST | 此清單中的第 個 配對,在 (0 <= i <= (MC-1)) 的範圍內,記錄目前對應至第 個 裝置/執行器的插槽索引。 配對中的第一個元素是一個 4 位元組欄位,其 Offset 是從 MBIM_MS_DEVICE_SLOT_MAPPINGS_INFO 結構的開頭 (offset 0) 計算至 DataBuffer 的 UINT32。 這對中的第二個元素是記錄元素的 4 位元組大小。 由於位置索引的類型為 UINT32,因此配對中的第二個元素一律為 4。 |
4 + (8 * MC) | 4 * MC | 資料緩衝區 | 資料緩衝器 | 包含 SlotMapList的數據緩衝區。 由於位置的大小是 4 個字節,而 MC 等於位置索引的數目,因此 DataBuffer 的總大小為 4 * MC。 |
回應
在 Set 中使用的 MBIM_MS_DEVICE_SLOT_MAPPING_INFO 也會用於 Response 的 InformationBuffer 中。
狀態代碼
狀態代碼 | 描述 |
---|---|
MBIM_STATUS_BUSY | 作業失敗,因為裝置忙碌中。 如果函式中沒有任何明確資訊可清除此條件,主機可以使用函式的後續動作(例如通知或命令完成),作為重試失敗作業的提示。 |
MBIM_STATUS_FAILURE | 作業失敗(泛型失敗)。 |
MBIM_語音通話正在進行中 | 作業失敗,因為語音通話正在進行中。 |
MBIM_STATUS_INVALID_PARAMETERS(無效參數) | 操作因為無效的參數而失敗(例如,插槽編號超出範圍或映射中有重複的值)。 |
MBIM_CID_MS_SLOT_INFO_STATUS
描述
此 CID 會擷取指定 UICC 位置的高階匯總狀態及其內的卡片(如果有的話)。 當其中一個位置的狀態變更時,它也可以用來傳遞未經請求的通知。
查詢
MBIM_COMMAND_MSG的InformationBuffer包含MBIM_MS_SLOT_INFO_REQ結構。 MBIM_COMMAND_DONE訊息的 InformationBuffer 包含MBIM_MS_SLOT_INFO結構。
設定
不適用。
未請求的事件
事件資訊Buffer 包含MBIM_MS_SLOT_INFO結構。 函式會在複合位置/卡片狀態變更時傳送此事件。
參數
操作 | 設定 | 查詢 | 通知 |
---|---|---|---|
指令 | 不適用 | MBIM_MS_SLOT_INFO_REQ | 不適用 |
回應 | 不適用 | MBIM_MS_SLOT_INFO | MBIM_MS_SLOT_INFO |
數據結構
查詢
下列MBIM_MS_SLOT_INFO_REQ結構應用於 InformationBuffer。
抵消 | 大小 | 田 | 類型 | 描述 |
---|---|---|---|---|
0 | 4 | SlotIndex | UINT32 | 用來查詢的槽位索引。 |
設定
不適用。
回應
下列MBIM_MS_SLOT_INFO結構應用於 InformationBuffer。
抵消 | 大小 | 田 | 類型 | 描述 |
---|---|---|---|---|
0 | 4 | SlotIndex | UINT32 | 槽位的索引。 |
4 | 4 | 州 | MBIM_MS_UICC_SLOT_STATE | 插槽和卡片的狀態(如果適用的話)。 |
下列MBIM_MS_UICCSLOT_STATE結構描述位置的可能狀態。
國家 | 價值 | 描述 |
---|---|---|
UICC插槽狀態未知 | 0 | 數據機仍在初始化過程中,因此 SIM 插槽狀態不具決定性。 |
UICC插槽狀態關閉或空置 (UICCSlotStateOffEmpty) | 1 | UICC 插槽已關閉電源,且沒有卡片存在。 若實作無法判斷卡片在已關閉電源的插槽中是否存在,則其狀態會被回報為UICCSlotStateOff。 |
UICCSlotStateOff | 2 | UICC 插槽已關閉電源。 |
UICC卡槽狀態空置 | 3 | UICC 插槽是空的(其中沒有卡片)。 |
UICCSlotStateNotReady | 4 | UICC 插槽已佔用並開啟電源,但其中卡片尚未就緒。 |
UICCSlotStateActive | 5 | UICC 插槽已佔用,且其內的卡片已就緒。 |
UICCSlotStateError | 6 | UICC 插槽已佔用並開啟電源,但卡片處於錯誤狀態,且無法在下次重設之前使用。 |
UICC卡槽狀態啟用eSIM | 7 | 插槽中的卡片是具有啟用配置檔的 eSIM,且已準備好接受命令。 |
UICC插槽狀態啟用Esim無配置檔案 | 8 | 插槽中的卡片是 eSIM,沒有配置檔(或沒有使用中的配置檔),且已準備好接受命令。 |
多 sim 卡裝置的MBIM_MS_UICCSLOT_STATE轉換指引
符合正確的 UICC 插槽狀態轉換可確保作業系統正確處理所有變更,並向使用者顯示正確的彈出通知。
針對插入 快顯通知 SIM 卡,OS 預期會選取內嵌插槽 (SIM2/Slot 1),並在實體插槽 (SIM1/Slot 0) 插入 SIM 卡時發生下列狀態轉換。
SIM 卡插入前插槽 0 的可能值 | SIM 插入後槽 0 的可能值 |
---|---|
UICC卡槽狀態空置 | UICC 插槽狀態:活動 |
UICCSlotStateOffEmpty |
|
針對 SIM 卡被移除的 快顯通知,OS 預期在插入 SIM 卡時會選擇實體插槽(SIM1/Slot 0),並在從實體插槽(SIM1/Slot 0)移除 SIM 卡時發生以下狀態轉換。
SIM 移除前插槽 0 的可能值 | SIM 移除後位置 0 的可能值 |
---|---|
UICCSlotStateActive | UICCSlotStateEmpty |
|
UICC 插槽狀態關閉或空置 |
狀態代碼
此 CID 使用一般狀態代碼(請參閱公用 USB MBIM 標準第 9.4.5 節中的狀態代碼使用)。
個別執行程式和每一數據機 MBIM CID 的非 NDIS 對應
大部分的 MBIM CID 對應或與 NDIS OID 相關,但 Windows WMB 類別驅動程式會使用一些沒有 NDIS 對應項的命令。 本節清楚說明這些命令是針對每個數據機還是每個執行者。
個別裝置或個別執行程式 | CID 名稱 |
---|---|
每部裝置 | CID_MBIM_MSEMERGENCYMODE |
CID_MBIM_MSHOSTSHUTDOWN | |
每個執行器 | CID_MBIM_MSIPADDRESSINFO |
CID_MBIM_MSNETWORKIDLEHINT | |
CID_MBIM_MULTICARRIER_CURRENT_CID_LIST |
雙 SIM 卡單一有效
雙 SIM 卡單一主動式 (DSSA) 是唯一在 Windows 10 中完全支援的多重 SIM 作業形式。 DSSA 允許兩張 SIM 卡與數據機搭配使用,並限制在任何指定時間只能使用一張 SIM 卡。
架構/流程
槽位切換行為
如果裝置上支援 DSSA,在某些情況下,會自動執行或透過通知快顯訊息提示使用者進行槽位切換。
開箱體驗 (OOBE)
- 在 OOBE 期間,WwanSvc 可能根據實體卡槽的狀態進行卡槽重新映射。 如果實體位置是空的,則會選取內嵌位置。 如果實體插槽有 SIM 卡,則會選取實體插槽。
SIM 卡移除
- 如果 SIM 已從實體插槽中移除,而實體插槽是目前選取的插槽,則會顯示提示通知,詢問使用者是否要切換至內建插槽。
- 如果用戶選取 [是],則插槽會被切換。
SIM 插入
- 如果透過 regkey 啟用自動切換:
- 如果當選取的插槽為嵌入式插槽時將 SIM 插入實體插槽,系統會自動轉換到實體插槽,並顯示通知告知使用者有關切換的資訊。
- 該提示訊息有一個按鈕,可以開啟設定頁面。
- 如果透過 regkey 停用自動切換
- 如果在所選插槽為內嵌插槽時將 SIM 卡插入實體插槽,則會顯示快顯通知,詢問使用者是否要切換至實體插槽。
- 如果用戶選擇「是」,則會切換插槽位置。
使用此登錄機碼來設定自動切換。 它預設不存在。
位置: HKLM\Software\Microsoft\Cellular\MVSettings\DeviceSpecific\CellUX
金鑰: EnableAutoSlotSwitch
類型: REG_DWORD
值: 1 |0 (預設值,已停用)
硬體實驗室套件(HLK)測試
請參閱安裝 HLK 的步驟。
在 HLK Studio 中,連線到行動數據機驅動程式並執行測試:Win6_4.MB.GSM.Data.TestSlot。 此測試包含下列四項測試:
測試名稱 | 描述 |
---|---|
QuerySlotMapping | 此測試會驗證測試可以成功查詢 devcie 位置對應。 |
SetSlotMapping | 此測試會驗證測試能成功設定裝置插槽對應。 |
QuerySlotInfo | 此測試驗證能否成功查詢裝置插槽資訊。 |
驗證槽位資訊狀態 | 此測試會驗證 UICC 槽狀態是否符合 ReadyInfoState。 |
或者,您可以執行 TestSlot HLK 測試清單,方法是 netsh-mbn,netsh-mbn-test-installation。
netsh mbn test feature=dssa testpath="C:\data\test\bin" taefpath="C:\data\test\bin" param="AccessString=internet"
此檔案顯示 HLK 測試結果應該已在執行 'netsh mbn test' 命令的目錄中產生:TestSlot.htm
。
記錄分析
- 您可以使用以下說明來收集和解碼日誌:MB 收集日誌
- 在 TextAnalysisTool 中開啟 .txt 檔案
- 載入 DSSA 篩選條件
以下是查詢和設定槽位對應的範例日誌:
1619 [5]6C6C.0824::01/09/2020-10:57:17.118 [WwanDimCommon]QUERY OID_WWAN_DEVICE_CAPS_EX (e01012e), RequestId 11, Status 340001
1673 [5]6C6C.0824::01/09/2020-10:57:17.118 [WwanDimCommon]QUERY OID_WWAN_SYS_CAPS (e01012d), RequestId 21, Status 340001
2488 [5]6C6C.2738::01/09/2020-10:57:17.120 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_DEVICE_CAPS_EX (0x4004103f)
2520 [5]6C6C.2738::01/09/2020-10:57:17.120 [WwanDimCommon] SSERVICE_CAPS_MULTI_SIM : Supported
2669 [2]6C6C.2738::01/09/2020-10:57:17.121 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SYS_CAPS_INFO (0x4004102c)
2679 [2]6C6C.2738::01/09/2020-10:57:17.121 [WwanDimCommon] NumberOfExecutors 0x1
2680 [2]6C6C.2738::01/09/2020-10:57:17.121 [WwanDimCommon] NumberOfSlots 0x2
3497 [5]6C6C.0824::01/09/2020-10:57:17.125 [WwanDimCommon]QUERY OID_WWAN_SLOT_INFO_STATUS (e010130), RequestId 42, Status 340001
3502 [5]6C6C.0824::01/09/2020-10:57:17.125 [WwanDimCommon] Slot Index : 0
3531 [5]6C6C.0824::01/09/2020-10:57:17.126 [WwanDimCommon]QUERY OID_WWAN_SLOT_INFO_STATUS (e010130), RequestId 32, Status 340001
3536 [5]6C6C.0824::01/09/2020-10:57:17.126 [WwanDimCommon] Slot Index : 1
6356 [4]6C6C.2738::01/09/2020-10:57:17.133 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
6890 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
6912 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
6926 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
6934 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] SlotIndex : 0x0
6935 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] SlotState : WwanUiccSlotStateActive (0x5)
6955 [4]6C6C.2738::01/09/2020-10:57:17.134 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
7060 [7]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
7100 [6]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
7108 [6]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] SlotIndex : 0x1
7109 [6]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] SlotState : WwanUiccSlotStateActiveEsimNoProfile (0x8)
7140 [6]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
7177 [6]6C6C.2738::01/09/2020-10:57:17.135 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
8424 [4]6C6C.2738::01/09/2020-10:57:17.137 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
10616 [6]6C6C.2738::01/09/2020-10:57:17.145 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
12731 [4]6C6C.2738::01/09/2020-10:57:17.149 [WwanDimCommon]QUERY OID_WWAN_SYS_SLOTMAPPINGS (e01012f), RequestId 1e1, Status 340001
12991 [2]6C6C.2738::01/09/2020-10:57:17.150 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_DEVICE_SLOT_MAPPING_INFO (0x4004102d)
13003 [2]6C6C.2738::01/09/2020-10:57:17.150 [WwanDimCommon] Executor Index 0 is mapped to Uicc Slot Index 0
123489 [4]6C6C.2738::01/09/2020-10:57:24.048 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
128251 [2]6C6C.2738::01/09/2020-10:57:24.064 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
128317 [2]6C6C.2738::01/09/2020-10:57:24.064 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
128407 [7]6C6C.2738::01/09/2020-10:57:24.064 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
128445 [7]6C6C.2738::01/09/2020-10:57:24.065 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
129265 [5]6C6C.2738::01/09/2020-10:57:24.067 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
129292 [5]6C6C.2738::01/09/2020-10:57:24.067 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
130122 [7]6C6C.2738::01/09/2020-10:57:24.069 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
155583 [2]6C6C.2738::01/09/2020-10:57:26.637 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
159010 [7]6C6C.2738::01/09/2020-10:57:26.644 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
159034 [7]6C6C.2738::01/09/2020-10:57:26.644 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
161963 [7]6C6C.2738::01/09/2020-10:57:26.655 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
161986 [7]6C6C.2738::01/09/2020-10:57:26.655 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
162110 [2]6C6C.2738::01/09/2020-10:57:26.655 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
162355 [4]6C6C.2738::01/09/2020-10:57:26.656 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
162381 [6]6C6C.2738::01/09/2020-10:57:26.656 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
162441 [4]6C6C.2738::01/09/2020-10:57:26.656 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
194294 [6]6C6C.2738::01/09/2020-10:57:28.722 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200029 [0]6C6C.2738::01/09/2020-10:57:28.738 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200131 [4]6C6C.2738::01/09/2020-10:57:28.738 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200354 [7]6C6C.2738::01/09/2020-10:57:28.739 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200671 [6]6C6C.2738::01/09/2020-10:57:28.739 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200729 [7]6C6C.2738::01/09/2020-10:57:28.739 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
200864 [1]6C6C.2738::01/09/2020-10:57:28.740 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
201464 [0]6C6C.2738::01/09/2020-10:57:28.741 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
265128 [1]6C6C.2218::01/09/2020-10:57:32.150 [WwanDimCommon]SET OID_WWAN_SYS_SLOTMAPPINGS (e01012f), RequestId a6, Len 10, Status 340001
265133 [1]6C6C.2218::01/09/2020-10:57:32.150 [WwanDimCommon] SlotMapListHeader.ElementType : 0xe
265134 [1]6C6C.2218::01/09/2020-10:57:32.150 [WwanDimCommon] SlotMapListHeader.ElementCount : 0x1
265135 [1]6C6C.2218::01/09/2020-10:57:32.150 [WwanDimCommon] Executor Index 0 is mapped to Uicc Slot Index 1
265523 [6]6C6C.2738::01/09/2020-10:57:32.152 [WwanDimCommon] ReadyState : WwanReadyStateOff (0x0)
270760 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_DEVICE_SLOT_MAPPING_INFO (0x4004102d)
270770 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] Executor Index 0 is mapped to Uicc Slot Index 1
270799 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
270807 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] SlotIndex : 0x0
270808 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] SlotState : WwanUiccSlotStateEmpty (0x3)
270827 [5]6C6C.2738::01/09/2020-10:57:32.171 [WwanDimCommon] ReadyState : WwanReadyStateFailure (0x4)
271044 [5]6C6C.2738::01/09/2020-10:57:32.172 [WwanDimCommon] ReadyState : WwanReadyStateFailure (0x4)
271089 [5]6C6C.2738::01/09/2020-10:57:32.172 [WwanDimCommon] ReadyState : WwanReadyStateFailure (0x4)
271130 [5]6C6C.2738::01/09/2020-10:57:32.172 [WwanDimCommon] ReadyState : WwanReadyStateSimNotInserted (0x2)
274729 [7]6C6C.2738::01/09/2020-10:57:32.188 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
283027 [6]6C6C.2738::01/09/2020-10:57:32.211 [WwanDimCommon] ReadyState : WwanReadyStateSimNotInserted (0x2)
323130 [5]6C6C.2738::01/09/2020-10:57:32.352 [WwanDimCommon] ReadyState : WwanReadyStateNoEsimProfile (0x7)
403200 [0]6C6C.2738::01/09/2020-10:57:33.748 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
403208 [0]6C6C.2738::01/09/2020-10:57:33.748 [WwanDimCommon] SlotIndex : 0x0
403209 [0]6C6C.2738::01/09/2020-10:57:33.748 [WwanDimCommon] SlotState : WwanUiccSlotStateActive (0x5)
407008 [5]6C6C.33A8::01/09/2020-10:57:40.355 [WwanDimCommon]SET OID_WWAN_SYS_SLOTMAPPINGS (e01012f), RequestId 18f, Len 10, Status 340001
407015 [5]6C6C.33A8::01/09/2020-10:57:40.355 [WwanDimCommon] SlotMapListHeader.ElementType : 0xe
407017 [5]6C6C.33A8::01/09/2020-10:57:40.355 [WwanDimCommon] SlotMapListHeader.ElementCount : 0x1
407018 [5]6C6C.33A8::01/09/2020-10:57:40.355 [WwanDimCommon] Executor Index 0 is mapped to Uicc Slot Index 0
407079 [4]6C6C.2738::01/09/2020-10:57:40.355 [WwanDimCommon] ReadyState : WwanReadyStateOff (0x0)
409570 [2]6C6C.2738::01/09/2020-10:57:40.371 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_DEVICE_SLOT_MAPPING_INFO (0x4004102d)
409580 [2]6C6C.2738::01/09/2020-10:57:40.371 [WwanDimCommon] Executor Index 0 is mapped to Uicc Slot Index 0
409591 [5]6C6C.2738::01/09/2020-10:57:40.371 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
409600 [5]6C6C.2738::01/09/2020-10:57:40.371 [WwanDimCommon] SlotIndex : 0x1
409601 [5]6C6C.2738::01/09/2020-10:57:40.371 [WwanDimCommon] SlotState : WwanUiccSlotStateEmpty (0x3)
411302 [7]6C6C.2738::01/09/2020-10:57:40.385 [WwanDimCommon] ReadyState : WwanReadyStateSimNotInserted (0x2)
416851 [4]6C6C.2738::01/09/2020-10:57:40.510 [WwanDimCommon] StatusCode : NDIS_STATUS_WWAN_SLOT_INFO (0x4004102e)
416859 [4]6C6C.2738::01/09/2020-10:57:40.510 [WwanDimCommon] SlotIndex : 0x1
416860 [4]6C6C.2738::01/09/2020-10:57:40.510 [WwanDimCommon] SlotState : WwanUiccSlotStateActiveEsimNoProfile (0x8)
418613 [0]6C6C.2738::01/09/2020-10:57:42.632 [WwanDimCommon] ReadyState : WwanReadyStateOff (0x0)
434410 [4]6C6C.2738::01/09/2020-10:57:44.558 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
443914 [7]6C6C.2738::01/09/2020-10:57:44.593 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)
529138 [4]6C6C.2738::01/09/2020-10:57:45.270 [WwanDimCommon] ReadyState : WwanReadyStateInitialized (0x1)