MB 라디오 상태
개요
이 항목에서는 MB 디바이스의 무선 전원 상태를 설정하고 읽는 데 사용되는 작업에 대해 설명합니다. 이러한 상태는 소프트웨어(비행기 모드) 또는 하드웨어를 통해 제어할 수 있습니다(적절한 스위치가 있는 경우). 이 항목에서는 무선 전원 상태를 제어하는 방법, 무선 전원 상태 기능을 테스트하는 방법 및 무선 전원 상태 문제를 조사하는 방법을 설명합니다.
용어
시스템 라디오 상태 - 시스템 라디오 상태는 시스템 전체 상태입니다. 그것은 비행기 모드 상태의 가장 명백한 지표입니다. 시스템 라디오 상태는 RmSvc(라디오 관리 서비스)에서 관리됩니다.
라디오 관리자 - RmSvc는 WlanRadioManager, BlueTooth 및 WwanRadioManager와 같은 시스템에서 여러 RadioManagers(MediaManagers)를 반복합니다. WwanRadioManager(.lib)는 RmSvc.dll 호스트되며 라디오 논리의 wwan 쪽을 관리합니다. WwanRadioManager는 WWAN 서비스(WwanSvc) RPC를 사용하여 다음을 수행합니다.
- 셀룰러 라디오를 쿼리하고 설정합니다.
- 비행기 모드 전후 흐름을 제어합니다.
라디오 인스턴스 - 각 RadioManager는 여러 라디오 인스턴스를 포함할 수 있습니다. 예를 들어 WwanRadioManager는 시스템에 두 개의 셀룰러 모뎀이 있는 경우 두 개의 라디오 인스턴스를 가질 수 있습니다. 각 라디오 instance 추상 개체이며 하나의 하드웨어 라디오 모듈에 매핑되어야 합니다. 대부분의 경우 각 라디오 instance 하나의 셀룰러 모뎀에 매핑됩니다.
관련 서비스 및 드라이버
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를 통한 SET 라디오
디바이스 도착 시 초기 라디오 상태
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 구조체가 포함되어 있습니다.
매개 변수
설정 | 쿼리 | 알림 | |
---|---|---|---|
Command | MBIM_SET_RADIO_STATE | Empty | 해당 없음 |
응답 | MBIM_RADIO_STATE_INFO | MBIM_RADIO_STATE_INFO | MBIM_RADIO_STATE_INFO |
데이터 구조
설정
Offset | 크기 | 필드 | 형식 | Description |
---|---|---|---|---|
0 | 4 | RadioState | MBIM_RADIO_SWITCH_STATE | 소프트웨어 제어 라디오 상태를 설정합니다. 아래 표를 참조하세요. |
MBIM_RADIO_SWITCH_STATE
형식 | 값 |
---|---|
MBIMRadioOff | 0 |
MBIMRadioOn | 1 |
쿼리
InformationBuffer는 null 이고 InformationBufferLength는 0입니다.
응답
MBIM_RADIO_STATE_INFO
Offset | 크기 | 필드 | 형식 | Description |
---|---|---|---|---|
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 | Assert 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 test' 명령이 실행된 및 에서 TestRadioStateSoftware.htm
TestRadioStateHardware.htm
생성되어야 합니다.
로그 수집 지침인 MB 로그를 사용하여 로그를 수집하고 디코딩할 수 있습니다.
로그 분석
추적 필터링에 유용한 키워드/regexp
OID_WWAN_RADIO_STATE
CWwanRadioInstance::OnSysRadioChange
CUIRadioManager::_SetSysRadio 입력
Leaving CUIRadioManager::_SetSysRadio
CWwanRadioInstance::_SetSoftwareRadioState
[WwanRadioManager]
PostD0Entry: previousPowerState
CWwanRadioManager::OnSystemRadioStateChange(.) +sysradiostate
RMAPI(.) +OnSystemRadioStateChange
RMAPI(.) +OnSystemRadioStateChange
Wwan-svc(.) +라디오
mbbcx(.) +라디오
조사 팁
- 전역(시스템 전체) 또는 로컬(셀룰러 전용) 라디오 문제인지 식별합니다.
- 디바이스 전원 상태(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입니다.