RK3399支持5G-WiFi热点

背景

  • Platform: RK3399
  • OS: Android7.1.2
  • Kernel: v4.4.103

以前用AP6356s模块,设置WIFI热点的时候有5G频段选项
后面发现没有了,在调试AP6256的时候也发现没有,但他们都是支持5G的。

解决

最原始的版本是通过判断mWifiManager.isDualBandSupported()countryCode,来确定是否添加5G频段的选项

  • mWifiManager.isDualBandSupported(),通过以下配置读取
    frameworks/base/core/res/res/values/config.xml:
    1
    <bool translatable="false" name="config_wifi_dual_band_support">true</bool>

frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiServiceImpl.java:

1
2
3
4
5
public boolean isDualBandSupported() {
//TODO: Should move towards adding a driver API that checks at runtime
return mContext.getResources().getBoolean(
com.android.internal.R.bool.config_wifi_dual_band_support);
}

  • countryCode
    通过mWifiManager.getCountryCode();函数获取
    而国家代码是根据phoneNumber去set的,但我们没用SIM
    为什么要有国家代码判断呢?
    在我们中国国内5G信道只允许使用149以上的信道,因此没设置国家是无法使用5G热点的

packages/apps/Settings/src/com/android/settings/wifi/WifiApDialog.java
onCreate中是通过checkIfSupportDualBand函数去判断是否添加5G频段的选项
checkIfSupportDualBand函数会去根据chip_type判断是否支持5G,所以需要在该判断中添加我们需要的wifi_chip_type

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public boolean checkIfSupportDualBand() {
/*zdd*/
File file = new File(/*"/sys/firmware/devicetree/base/wireless-wlan/wifi_chip_type"*/"/data/wifi_chip"); //根据chip_id获取的WiFi名,以前是根据wireless-wlan的DTS节点指定的wifi_chip_type
BufferedReader reader = null;

try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
while ((tempString = reader.readLine()) != null) {
Log.d(TAG, "Get wifi chip name: " + tempString);
if (tempString.contains("ap6234") || tempString.contains("ap6330")
|| tempString.contains("ap6335") || tempString.contains("ap6354")
|| tempString.contains("ap6441") || tempString.contains("ap6356s")
|| tempString.contains("rtl8822bs") || tempString.contains("rtl8822bu") || tempString.contains("AP6256")) {
reader.close();
return true;
}
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {}
}
}

return false;
}

/hardware/libhardware_legacy/wifi/wifi.c
save_wifi_chip_type函数保存chip_type到/data/wifi_chip文件,例如我现在用的是AP6256

frameworks/opt/net/wifi/service/java/com/android/server/wifi/util/ApConfigUtil.java

参考

https://blog.csdn.net/Mrdeath/article/details/105228294

Donate comment here