MB 无线电状态
概述
本主题介绍用于设置和读取 MB 设备的无线电电源状态的操作 () 。 如果) 存在相应的开关,则可以通过软件 (飞行模式) 或硬件 (控制这些状态。 本主题说明如何控制无线电电源状态、如何测试无线电电源状态功能以及如何调查无线电电源状态问题。
术语
系统无线电状态 - 系统无线电状态是系统范围的状态。 它是飞行模式状态的最明显指标。 系统无线电状态由无线电管理服务 (RmSvc) 进行管理。
无线电管理器 - RmSvc 在 WlanRadioManager、BlueTooth 和 WwanRadioManager 等系统中) 循环访问多个 RadioManagers (MediaManagers。 WwanRadioManager (.lib) 托管在 RmSvc.dll 中,并管理无线电逻辑的 wwan 端。 WwanRadioManager 使用 WWAN 服务 (WwanSvc) RPC 来:
- 查询和设置手机网络无线电。
- 控制飞行模式前后的流。
单选实例 - 每个 RadioManager 可以包含多个单选实例。 例如,如果系统中有两个手机网络调制解调器,WwanRadioManager 可以有两个无线电实例。 每个无线电实例都是一个抽象对象,应映射到一个硬件无线电模块。 在大多数情况下,每个无线电实例映射到一个手机网络调制解调器。
相关服务和驱动程序
RmSvc.dll - 管理系统范围的无线电事件,如飞行模式。 它还托管所有无线电管理器,包括WwanRadioManager。
WwanSvc.dll - 手机网络调制解调器由 WwanSvc 管理。 因此, (OID/CID) 的命令通过 WwanSvc 发出。 来自 RmSvc 或其他组件 (UI 的外部请求) 通过 WwanSvc RPC 进行查询或设置手机网络无线电状态。
MbbCx.sys - 内核模式驱动程序,用于管理设备电源状态,尤其是在 D0 和 Dx 转换之间。 在某些系统设置中,允许设备转换到 Dx 状态,并仅在需要时恢复到 D0。 MbbCx.sys 在 D0 和 Dx 之前管理无线电状态恢复的逻辑和控制。
体系结构/流
从 WwanSvc 到调制解调器硬件的无线电控制
通过 WwanSvc API 设置无线电
设备到达时的初始无线电状态
MBIM_CID_RADIO_STATE
如上图所示,飞行模式操作中使用的 CID MBIM_CID_RADIO_STATE。 此 CID 设置或返回有关 MB 设备的无线电电源状态的信息。
查询
不使用MBIM_COMMAND_MSG上的 InformationBuffer。 MBIM_RADIO_STATE_INFO在 MBIM_COMMAND_DONE 的 InformationBuffer 中返回。
设置
MBIM_COMMAND_MSG 上的 InformationBuffer 包含MBIM_SET_RADIO_STATE。 MBIM_RADIO_STATE_INFO在 MBIM_COMMAND_DONE 的 InformationBuffer 中返回。
未经请求的事件
事件信息缓冲区包含MBIM_RADIO_STATE_INFO结构。
参数
设置 | 查询 | 通知 | |
---|---|---|---|
命令 | MBIM_SET_RADIO_STATE | Empty | 不可用 |
响应 | MBIM_RADIO_STATE_INFO | MBIM_RADIO_STATE_INFO | MBIM_RADIO_STATE_INFO |
数据结构
设置
Offset | 大小 | 字段 | 类型 | 说明 |
---|---|---|---|---|
0 | 4 | RadioState | MBIM_RADIO_SWITCH_STATE | 设置软件控制的无线电状态。 请参阅下表。 |
MBIM_RADIO_SWITCH_STATE
类型 | 值 |
---|---|
MBIMRadioOff | 0 |
MBIMRadioOn | 1 |
查询
InformationBuffer 将为 null ,InformationBufferLength 将为 零。
响应
MBIM_RADIO_STATE_INFO
Offset | 大小 | 字段 | 类型 | 说明 |
---|---|---|---|---|
0 | 4 | HwRadioState | MBIM_RADIO_SWITCH_STATE | W_DISABLE开关的状态。 如果设备没有W_DISABLE开关,则函数必须在此字段中返回 MBIMRadioOn。 |
4 | 4 | SwRadioState | MBIM_RADIO_SWITCH_STATE | 软件配置的无线电状态。 |
通知
请参阅上 表MBIM_RADIO_STATE_INFO 。
状态代码
此 CID 仅使用泛型状态代码。
测试
手机网络无线电测试
函数名称 | 说明 |
---|---|
CellularRadioWinrtTest::VerifyCellularModemExistence | 断言 winrt API 可以查询手机网络调制解调器和无线电状态 |
CellularRadioWinrtTest::VerifyCellularRadioToggle | 断言 winrt api 可以在每个 wwan 适配器上切换单选状态 |
CellularRadioRecoveryTest::VerifyCellularRadioRecoveryToOnAfterAPM | 断言手机无线电状态在离开飞行模式时恢复到“开” |
CellularRadioRecoveryTest::VerifyCellularRadioRecoveryToOffAfterAPM | 断言手机无线电状态在离开飞行模式时保持关闭 |
CellularRadioRecoveryTest::VerifyCellularRadioAcrossSvcRestart | 断言手机无线电状态在 WwanSvc 重启中保持一致 |
CellularRadioRecoveryTest::VerifyCellularRadioAcrossDevNodePnp | 断言手机无线电状态在设备到达/删除期间保持一致 |
CellularRadioTest.dll 包含这些测试。
硬件实验室工具包 (HLK) 测试
请参阅 安装 HLK 的步骤。
在 HLK Studio 中,连接到设备手机网络调制解调器驱动程序并运行以下测试:
或者,可以通过 netsh-mbn 和 netsh-mbn-test-installation 运行 TestRadioStateHardware 和 TestRadioStateSoftware HLK 测试列表。
netsh mbn test feature=radio testpath="C:\data\test\bin" taefpath="C:\data\test\bin" param="AccessString=internet"
显示 HLK 测试结果的两个文件应在运行“netsh mbn 测试”命令的目录中生成: TestRadioStateSoftware.htm
和 TestRadioStateHardware.htm
。
可以使用以下说明收集和解码日志: MB 收集日志。
分析日志
用于筛选跟踪的有用关键字/正则表达式
OID_WWAN_RADIO_STATE
CWwanRadioInstance::OnSysRadioChange
输入 CUIRadioManager::_SetSysRadio
离开 CUIRadioManager::_SetSysRadio
CWwanRadioInstance::_SetSoftwareRadioState
[WwanRadioManager]
PostD0Entry:previousPowerState
CWwanRadioManager::OnSystemRadioStateChange (.) +sysradiostate
RMAPI (.) +OnSystemRadioStateChange
RMAPI (.) +OnSystemRadioStateChange
Wwan-svc (.) +radio
mbbcx (.) +radio
调查提示
- 确定这是全局 (系统范围的) 还是本地 (仅限手机网络) 无线电问题。
- 将设备电源状态 (D0-Dx) 与无线电状态区分开来。 它们是不同的概念,但高度相关。
- 确保日志中包含必要的 ETW 提供程序。
- 使用 方案缩小区域范围。 例如:
- 如果它与飞行模式相关,请关注 RmSvc 和 WwanRadioManager。
- 如果它与 D0-Dx<>、休眠或睡眠转换相关,请关注 MBBCx。
- 如果它与 UI 显示或状态不同步相关,请从 WwanSvc 开始。
WinRT API
Windows.Devices.Radios
Windows.Devices.Radios 归无线电管理服务所有,该服务管理所有无线电管理器和实例。 对于 WWAN 端,RadioKind 为 RadioKind::MobileBroadband。
- GetRadiosAsync ( )
- SetStateAsync ( )
Windows.Networking.NetworkOperators
Windows.Networking.NetworkOperators 文档页
此命名空间下用于无线电管理的唯一有用实用工具是 MobileBroadbandDeviceInformation.CurrentRadioState。