Android 的 hotspot 沒有可以設 channel 的地方,找一下..
hotspot 的 daemon 是 /external/hostapd
查了一下有設定 channel 的code。
是啟動時,從 argument 給的 (當然也可以吃 config)。
... 先 JUMP OUT 一下...
在 /system 下找一下 hostap ---- /net/SoftapController.cpp
/*
* Arguments:
* argv[2] - wlan interface
* argv[3] - softap interface
* argv[4] - SSID
* argv[5] - Security
* argv[6] - Key
* argv[7] - Channel
* argv[8] - Preamble
* argv[9] - Max SCB
*/
int SoftapController::setSoftap(int argc, char *argv[]) {
這個 function 依照 argv[] 寫好 /data/wifi/hostapd.conf,然後用 prop start hostapd。
所以包含設定和啟動。
呼叫這個 function 的是..netd/CommandListener.cpp
int CommandListener::SoftapCmd::runCommand(SocketClient *cli,
int argc, char **argv) {
,,,,
} else if (!strcmp(argv[1], "set")) {
rc = sSoftapCtrl->setSoftap(argc, argv);
簡單來說,就是..如果是 set command,就把所有 argument 包好,交給 setSoftap( )
runCommand( ) 是 CommandListener,是 Android 的一種 Service。
是利用 socket 作 IPC 的 server。
這種 server 用的都是 plain text 。所以找一下 SoftapCmd 的 comand string 是...
CommandListener::SoftapCmd::SoftapCmd() :
NetdCommand("softap") {
}
所以是 "softap"
之後就是 framework 的 client 端 (呼叫端),找一下 framework...
services/java/com/android/server/NetworkManagementService.java
public void startAccessPoint(WifiConfiguration wifiConfig, String wlanIface, String softapIface)
throws IllegalStateException {
....
....
else {
/**
* softap set arg1 arg2 arg3 [arg4 arg5 arg6 arg7 arg8]
* argv1 - wlan interface
* argv2 - softap interface
* argv3 - SSID
* argv4 - Security
* argv5 - Key
* argv6 - Channel
* argv7 - Preamble
* argv8 - Max SCB
*/
String str = String.format("softap set " + wlanIface + " " + softapIface +
" %s %s %s", convertQuotedString(wifiConfig.SSID),
wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA_PSK) ?
"wpa2-psk" : "open",
convertQuotedString(wifiConfig.preSharedKey));
mConnector.doCommand(str);
}
mConnector.doCommand(String.format("softap startap"));
這段code就是從 WifiConfig 取出 參數值,包裝成 argv[]傳給 softap set
找到!!
code 只有作到參數 arg5,後面 6,7,8 都是用 default。
所以要可以設 hotspot channel,就可以把 argv6 加上去..
所以要作:
- WifiConfig 新增 softap_channel
- 設定增加一個 item 設定 softap_channel (1-11)
- 這段code,增加一個 argument,把 WifiConfig.softap_channel 拿出來