• Android 4.4

  • 流程
  • 问题

1  流程

打开设置里的ap热点

.packages/apps/TvSettings/Settings/src/com/android/settings/TetherSettings.Java

    public boolean onPreferenceChange(Preference preference, Object value) {boolean enable = (Boolean) value;if (enable) {startProvisioningIfNecessary(WIFI_TETHERING);} else {mWifiApEnabler.setSoftapEnabled(false);}return false;}

然后 startProvisioningIfNecessary(WIFI_TETHERING);

接着startTethering();

接着mWifiApEnabler.setSoftapEnabled(true);

进入

packages/apps/TvSettings/Settingssrc/com/android/settings/wifi/WifiApEnabler.java

setSoftapEnabled

转向frameworks的frameworks/base/wifi/java/android/net/wifi/WiFiManager.java

    public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {try {mService.setWifiApEnabled(wifiConfig, enabled);return true;} catch (RemoteException e) {return false;}}

调用Service

frameworks/base/services/java/com/android/server/wifi/WifiService.java

    public void setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {enforceChangePermission();// null wifiConfig is a meaningful input for CMD_SET_APif (wifiConfig == null || wifiConfig.isValid()) {mWifiController.obtainMessage(CMD_SET_AP, enabled ? 1 : 0, 0, wifiConfig).sendToTarget();} else {Slog.e(TAG, "Invalid WifiConfiguration");}}

后边转到loaddriver

                    if (mWifiNative.loadDriver()) {setWifiApState(WIFI_AP_STATE_ENABLING);transitionTo(mSoftApStartingState);} else {loge("Failed to load driver for softap");}

下载驱动(我这边是错在这里)

  public void wifiFirmwareReload(String wlanIface, String mode) {mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);try {mConnector.execute("softap", "fwreload", wlanIface, mode);} catch (NativeDaemonConnectorException e) {throw e.rethrowAsParcelableException();}}
  public void wifiFirmwareReload(String wlanIface, String mode) {mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);try {mConnector.execute("softap", "fwreload", wlanIface, mode);} catch (NativeDaemonConnectorException e) {throw e.rethrowAsParcelableException();}}

报错是

/WifiStateMachine( 1802): Failed to reload STA firmware java.lang.IllegalArgumentException: command '8 softap fwreload wlan0 STA' failed with '501 8 SoftAP command has failed'

下载不到固件

继续看下去

system/netd/SoftapController.cpp:        ALOGE("SoftAP fwreload is missing arguments. Please use: softap <wlan iface> <AP|P2P|STA>");

int SoftapController::fwReloadSoftap(int argc, char *argv[])
{char *fwpath = NULL;if (argc < 4) {ALOGE("SoftAP fwreload is missing arguments. Please use: softap <wlan iface> <AP|P2P|STA>");return ResponseCode::CommandSyntaxError;}if (strcmp(argv[3], "AP") == 0) {fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_AP);} else if (strcmp(argv[3], "P2P") == 0) {fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_P2P);} else if (strcmp(argv[3], "STA") == 0) {fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_STA);}if (!fwpath)return ResponseCode::CommandParameterError;if (wifi_change_fw_path((const char *)fwpath)) {ALOGE("Softap fwReload failed");return ResponseCode::OperationFailed;}else {ALOGD("Softap fwReload - Ok");}return ResponseCode::SoftapStatusResult;
}

这部分wlan 的sta与 ap是分开的,但是现在用的驱动是合在一起的,在串口用hostap可以起来

hostapd -B hostapd.conf

hostapd.conf如下

现在问题在于要把原生的下载两个驱动的方式改为一种

继续看获取驱动的方式

const char *wifi_get_fw_path(int fw_type)
{switch (fw_type) {case WIFI_GET_FW_PATH_STA:return WIFI_DRIVER_FW_PATH_STA;case WIFI_GET_FW_PATH_AP:return WIFI_DRIVER_FW_PATH_AP;case WIFI_GET_FW_PATH_P2P:return WIFI_DRIVER_FW_PATH_P2P;}return NULL;
}

把 ap 的path改为sta 的path

const char *wifi_get_fw_path(int fw_type)
{switch (fw_type) {case WIFI_GET_FW_PATH_STA:return WIFI_DRIVER_FW_PATH_STA;case WIFI_GET_FW_PATH_AP:return WIFI_DRIVER_FW_PATH_STA;case WIFI_GET_FW_PATH_P2P:return WIFI_DRIVER_FW_PATH_P2P;}return NULL;
}

问题解决

softAP调试过程相关推荐

  1. 单片机驱动DM9000网卡芯片(详细调试过程)【下】

    http://hi.baidu.com/mcu8031/blog/item/c95903138671c625dc540171.html 单片机驱动DM9000网卡芯片(详细调试过程)[下] 4.验证初 ...

  2. stm32--FatFs调试过程(SPIFlash)

    移植方法参见我的另一篇博客:<stm32--FatFs移植(SPIFlash)>. 本文仅记录在初次移植完成后,遇到的问题,和解决的过程. 调试记录: 问题1:f_open返回3,即磁盘没 ...

  3. linux下jtag命令,[转载]LINUX内核调试过程(使用OpenJtag + OpenOCD)

    [转载]LINUX内核调试过程(使用OpenJtag + OpenOCD) (2012-04-12 02:02:27) 标签: 杂谈 [转载]LINUX内核调试过程(使用OpenJtag + Open ...

  4. [VN2020 公开赛]simpleHeap-记录一次gef调试过程

    [V&N2020 公开赛]simpleHeap 安全机制: IDA反汇编 main: Add: Edit: 可以看到get_input_content函数包含一个off_by_one漏洞. S ...

  5. c语言调试过程中的错误,C语言调试过程中duplicate symbol错误分析

    说明:在我们调试C语言的过程中,经常会遇到duplicate symbol错误(在Mac平台下利用Xcode集成开发环境).如下图: 一.简单分析一下C语言程序的开发步骤. 由上图我们可以看出C语言由 ...

  6. PIXHAWK上安装PX4Flow光流传感器及调试过程

    摘自:https://blog.csdn.net/wlrh253250/article/details/90146561 PIXHAWK上安装PX4Flow光流传感器及调试过程 置顶 wang-rh ...

  7. STM32调试过程中出现的问题1:

    STM32调试过程中出现的问题1: -\HARDWARE\KEY\key.c(47): error: #29: expected an expression if(key_up&&(K ...

  8. 百度云PCS调试过程

    其实整个调试过程按照百度的开发指南做就可以了,只是现在百度云平台又改版,而开发文档在一些地方没有同步更新.所以写下我的调试过程供大家参考. 1.当然首先是注册成为百度开发者 2.任意创建一个应用,我选 ...

  9. 腾讯在线教育互动课堂——Demo调试过程记录

    官方文档地址:https://cloud.tencent.com/document/product/680/17888 "Demo调试"不像集成使用,不需要完全按照文档一步步处理, ...

最新文章

  1. 无盘服务器 双镜像盘,镜像(无盘柜)-双活集群解决方案
  2. php截取数组中的字符串,PHP 中使用explode()函数切割字符串为数组的示例
  3. Flutter 底部向上弹出的动画按钮
  4. ORACLE坏块检查
  5. 深入理解Java8 Lambda表达式
  6. C语言-基础例题55道
  7. 2021爱分析・区域性银行数字化厂商全景报告
  8. 电子科技大学软件工程大一到大二课程
  9. TeamViewer设备数量受限的解决办法
  10. 异域公主连接iOS怎么修改服务器,公主连结ios账号在电脑端登录方法 模拟器使用技巧分享...
  11. 【翻译】揭开HTML5的神秘面纱
  12. mt4服务器文件夹,MT4服务器地址在哪个文件
  13. 【数据结构-K】基数排序
  14. android Menu菜单组键
  15. RPG游戏-刷怪系统
  16. 工业大数据在铅粉机的应用(一)
  17. [分享] 给铭文商人一个草药→草渣→墨水的列表[希望大家有用]
  18. Ruby和其它类似语言的比较
  19. ca证书如何保证非对称加密安全?
  20. 如何自动聚焦到表单的某个input标签(autofocus)

热门文章

  1. 好的产品需要「显而易见」,而其本质就是简单
  2. 改变声音的方法有很多,推荐这三种
  3. GPS坐标WGS84到东北天坐标系ENU
  4. 猿人学平台练习题第九题(sojson+混淆)
  5. 物联网需要什么样的UI交互方式?
  6. cv2.seamlessClone遇到的问题(没有解决,只是记录用emmm)
  7. 多维数据表达式MDX笔记
  8. Termux在Andriod安装centos
  9. MTK6735 camera 闪光灯Flashlight驱动调试流程学习
  10. 吸金500亿后的O2O,到底该如何变现?