Android平台上如何实现无线网卡开关怎么开启的自动开启

Android系统的移动设备如何通过无线路由器实现无线投影?
请选择产品型号
Android系统的移动设备如何通过无线路由器实现无线投影?
(文档编号:370017)
(本文以CB-1975W投影机、Android 5.1.1操作系统、iProjection 1.4.0应用软件为例进行说明)
一、连接方式
通过无线路由器连接(如,图1或图2)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图1
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &图2
二、准备工作
1.Android设备的准备工作:
&1.1 移动设备必须使用Android 2.3及更高版本的操作系统,且设备的屏幕分辨率不低于800&480;
&1.2 Android设备的无线网卡已开启,并与无线路由器建立了正确的连接;
&1.3 Android设备上已***了&EPSON iProjection&应用软件(可点击下载EPSON iProjection软件)。
2.投影机的准备工作:
&2.1 建议您使用EPSON专用的无线网卡(若投影机包装内没有标配,需要另行购买)。将专用无线网卡***到正确的接口上(可参考投影机随机光盘上的用户指南),(注:个别机型的无线网卡是投影机内置的,无需***),且投影机开机后无线网卡上的指示灯状态正常(绿色指示灯常亮或闪烁);
2.2 若您未购买EPSON专用的无线网卡或您的投影机不支持使用无线网卡,并且您的投影机带有LAN接口(RJ45接口),也可以使用网线将投影机的LAN接口与无线路由器的LAN接口连接起来(注意:不要连接在路由器的WAN接口上)。
三、设置步骤
1.投影机***了EPSON专用网卡的情况:
1.1在投影机上通过遥控器上的&Menu&按键进入菜单,找到并进入&网络配置&菜单,进入&无线LAN&标签页;
1.2将&连接模式&选择为&高级&,将&SSID&修改为与无线路由器相同的SSID(即路由器在网络中的名称,注意:英文字母的大小写要一致),在&IP设定&中将&DHCP&设置为&开&(也可以根据实际需要将DHCP设置为关,并手动分配投影机的IP地址);(如,图3)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图3
1.3若无线路由器有加密,则需要进入投影机网络配置菜单中的&安全&标签页,选择加密类型并输入正确的密码(如,图4);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &图4
注意:若您不知道或忘记了无线路由器的连接密码,请向您的网络管理员确认或重置无线路由器。
2.投影机通过网线连接无线路由器的情况:
& 2.1通过投影机遥控器上的&Menu&按键进入菜单,找到并进入&网络配置&菜单,进入&有线LAN&标签页。在&IP设定&中将&DHCP&设置为&开&,由路由器为投影机分配IP地址。当然也可以根据实际需要将DHCP设置为关,并手动分配投影机的IP地址;(如,图5)
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 图5
3. 在Android设备中运行EPSON iProjection应用软件。软件会搜索的目标投影机的名称及IP地址,将其选中并点击&Connect&(如,图6)。软件会提示&Connect to the projector?&,点击&OK&。成功连接后软件会提示&Connection successful.&,点击&OK&即可;&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&图6
4. EPSON iProjection软件与投影机正常连接后,点击软件界面左上角的
选项。这时可通过下拉菜单中的选项进行投影和控制(如,图7);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&& 图7
1.通过&Other Apps&选项进行Android移动设备的屏幕复制投影时,采用ELPAP07或ELPAP03无线网卡的投影机会出现较明显的延迟现象;采用ELPAP10无线网卡的投影机效果较好;
2.通过&Other Apps&和&Camera&选项投影视频(动态)画面时,即使采用ELPAP10无线网卡的投影机也会有延迟现象,因此这种无线连接方式不适合投影视频画面。若您需要投影视频画面,建议您采用有线连接的方式。
更新时间:
您的问题是否解决?
请详细写出您的意见建议,以供我们对该文章进行改进。在改进过程中我们可能联系您征求您的意见,建议您留下联系方式,您的联系方式不会用于商业用途。谢谢配合!
如果您的问题未能解决,请点击联系在线工程师进行咨询。非工作时间,
联系我们。安卓 wifi 用无线网卡ralink rt3070开发记录
程序员 工程师们你们看看吧
android wifi ralink rt3070开发记录&&
分类: 数据库/ MySQL/ 文章
一,WIFI的基本架构
& & 1,开源代码移植部分(的外部目录下)
& && &&&wireless_tools,使用wpa_supplicant,wpa_supplicant_6(后两项已经移植过)
& && &&&生成库libwpaclient.so和守护进程使用wpa_supplicant及的iwconfig,iwlist等相关的测试程序
& & 2,硬件/ libhardware_legary / WIFI / wifi.c是无线管理库
& && &&&生成libnetutils.so
& && &&&同时会和使用wpa_supplicant守护进程通信
& & 3,JNI部分的框架/基/核心/ JNI / android_net_wifi_Wifi.cpp这个是无线连接,扫描方面的调用
& && && && && &框架/基/核心/ JNI / android_net_NetUtils.cpp这个是管理网络方面的工具,如DHCP,路由,净EN /不能等
& & 4、J***A部分
& && &&&frameworks/base/services/java/com/android/server/
& && &&&frameworks/base/wifi/java/android/net/wifi/& &
& && &&&框架/基/核心/ J***A /机器人/净这个是管理网络的工具,调用第三条的第二个JNI
& & 5,WIFI设置位于包/应用程序/设置/ SRC / COM /的机器人/设置/ WIFI /
& && && &&&6,WIFI驱动模块 & && &&&使用wpa_supplicant通过wireless_ext接口和驱动通信
& & 7,WIFI硬件模块
& && &&&D-LINK DWA-125芯片:雷凌&&RT3070
二,无线开发记录
& && &&&1,5370驱动编译***及使用过程
& && && && &&&设置“MODE = STA”在Makefile中选择了Linux的目标,集“TARGET = LINUX”
& && && && &&&集“HAS_WPA_SUPPLICANT = y'和'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT = Y'
& && && && &&&#使用wpa_supplicant Dwext iwlan0-C wpa_supplicant.conf来完成的-D(-C**系列,需要指定下wpa_supplicant.conf来完成的路径)
& && && && &&&wpa_supplicant.conf来完成的内容:
& && && && && && &&&GROUP =轮
& && && && && && &&&网络ctrl_interface = DIR = / var /运行/使用wpa_supplicant = {
& && && && && && && && && & ssid的“家”
& && && && && && && && && & scan_ssid = 1
& && && && && && && && && & key_mgmt这WPA-PSK
& && && && && && && && && & PSK =“非常秘密口令”
& && && && && && & } / /这个地方的大括号中的内容可在设置中点击选择某个AP后自动生成
& && && && &&&#sudo的苏(机器人平台需要自己添加暂未添加脚本compile-,和**系列,写的有差异)
& && && && && && & #清洁
& && && && && && & #
& && && && && && & #make install的
& && && && && && & #modprobe的rt5370sta
& && && && && && & #ifconfig命令WLAN0
& && && && && && & #iwconfig的WLAN0
& && && && && && & #的iwlist WLAN0扫描这时候已经可以扫描的Wi-Fi网络了
& && && && && && & 下面是dhcpcd的WLAN0即可。
& && &&&2、几个可执行程序:wpa_supplicant,wpa_cli等。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,可以使用wpa_cli来搜索、设置、和连接网络等,这两个可执行程序很重要
& && && &&&在android中主要是Settings这个属于system的进程调用的libhardware_legecy库中的wifi.c文件和wpa_supplicant通信,同时也调用了wpa_supplicant中提供的libwpa_client.so库,这两个进程间通过socket通信收发数据来得到当前状态,同时也是通过wifi.c来启动和停止init.rc中的wpa_supplicant进程。
& && && &&&dhcpcd的用来自动获取IP地址。
& && && &&&IW的iwconfig的 iwpriv的iwspy这几个是测试命令,可用来测试无线当前的情况,以及扫描鸭等。
& && &3,以上是命令测试过程,下面进行代码的修改部分说明博通(Broadcom BCM7231)
& && && && &使用wpa_supplicant和wpa_cli原生的Andr​​oid2.3已经移植,但是没有无线工具工具,需要将工具移植进来,
不过这些工具相对都比较容易移植,不再详述,下载源码位置如下
& &&&然后从驱动开始修改起
& && && && && &1)修改5370驱动
& && && && && && && & 设备名包括/ rtmp_def.h修改两个宏定义从RA0修改为WLAN0;
& && && && && && && & LINUX_SRC = ... (机器人的核心位置)& && && && &
& && && && && && && & ifeq($(PLATFORM),BCM7431)
& && && && && && && & LINUX_SRC = $的{ANDROID_PATH} /内核#修改路径为你的机器人目录
& && && && && && && & ENDIF
& && && && && && && && && &&&驱动编译后会生成两个文件:RT5370STA.ko和RT2870STA.dat,后面
& && && && && && && & 会看到需要拷贝这两个文件到系统中。
& && && && && && && && && & ioctl的驱动代码接口在OS / linux / sta_ioctl.c中及STA / sta_cfg.c的中,如果遇到一些错误,一般在这里都能查找到。
& && && && && & 2)把rt5370sta.ko拷贝到..。/ lib目录/模块目录中
[普通] 查看纯副本
01.$(CLEAR_VARS)&&
02.LOCAL_MODULE:= rt5370sta.ko下&&
03.LOCAL_MODULE_TAGS:=用户&&
04.LOCAL_MODULE_CLASS:SHARED_LIBRARIES&&
05.LOCAL_MODULE_PATH:=的$(TARGET_OUT_SHARED_LIBRARIES)/模块&&
06.LOCAL_SRC_FILES:= $的{RT5370_PATH} / rt5370sta.ko#PATH&&
07.包括$(BUILD_PREBUILT)&&
& && && && && &3)查看wifi.c文件阁路径及名字是否正确,若不正确需要修改正确
& && && && && & 4)修改ini​​t.rc文件
& && && && && && && &搭配chmod 0771 /系统/ etc / WIFI WIFI无线上网
& && && && && && && &搭配chmod 0660 /系统/ etc / WIFI / wpa_supplicant.conf来
& && && && && && && &乔恩WIFI WIFI /系统的/ etc / WIFI / wpa_supplicant.conf来
& && && && && && && &MKDIR /数据/ MISC /无线0771 WIFI WIFI
& && && && && && && &MKDIR /数据/ MISC / WIFI WIFI WIFI /插座0771
& && && && && && &&&#使用wpa_supplicant插座
& && && && && && &&&MKDIR /数据/系统/ 0771系统的系统
& && && && && && &&&MKDIR /数据/系统/ WIFI WIFI使用wpa_supplicant 0771
& && && && && && &&&MKDIR /数据/ MISC / DHCP 0771系统系统
& && && && && && &&&chmod为0777 /系统/ etc / dhcpcd程式/ dhcpcd的经营钩
& && && && && && &&&chmod为0777 /数据/ MISC / DHCP /
& && && && && && &&&mountyaffs2 MTD @ RO重新***系统/系统
& && && && && && &&&setprop wifi.interface WLAN0
& && && && && && &&&使用wpa_supplicant服务/系统/斌/使用wpa_supplicant-DD-Dwext iwlan0 -c/system/etc/wifi/wpa_supplicant.conf
& && && && && && && && && & #组系统无线INET
& && && && && && && && && & 禁用
& && && && && && && && && & 单稳
& && && && && && &&&服务&&dhcpcd_wlan0&&/系统/ bin / dhcpcd程式的WLAN0的& &&&/ /这里的服务需要修改为dhcpcd_wlan0(的Android2.2和2.3有差异,我这里是2.3) ,而不是dhcpcd的!
& && && && && && && && && & 组系统的DHCP
& && && && && && && && && & 禁用
& && && && && && && && && & 单稳
& && && &&&5)修改外部/使用wpa_supplicant / driver_wext.c
& && && && && & 这是为了避免wpa_supplicant与下层驱动通讯时出现ioctl[SIOCSIWPRIV]错误,因为现在大部分wifi模块对SIOCSIWPRIV命令不处理,而这个命令要用于侦测wifi强度RSSI的,比较简单的方法是在wifi驱动中增加个空函数或者修改调用的返回值为0。由于大多数模块不支持SIOCSIWPRIV,所以目前采用修改调用的返回值的方法。修改:froyo\external\wpa_supplicant\driver_wext.c
& && && && && &wpa_driver_priv_driver_cmd()函数中:
& && && && && && & / /如果((RET =的ioctl(传动 - & ioctl_sock,SIOCSIWPRIV,与IWR))&0){
& && && && && && && && && & / / PERROR的(“的ioctl [SIOCSIWPRIV]”);
& && && && && && && & / /& && && && && && &&&}& &&&
/ /如果**系列,不注释掉,将导致系统不断报错,错误为&&IOCTL :: unknownIOCTL CMD = 0x00008b0c,我跟踪了下代码驱动中并没有这个IOCTL,
另外在wpa_supplicant的头文件中也显示未使用,但是在代码中却用了这个ioctl,所以必须把这段代码删除!
& && && &&&6) 修改的Android打开WIFI流程
& && && && && &经测试5370 模块在使用ifconfig WLAN0下来时配置
& && && && && &iwconfig wlan0模式
width:100%">
[J***A] 查看纯副本
01.公共 无效 resetConnections(布尔 disableInterface)&&
02.& && && & (disableInterface)&&
03.& && &/ /如果(LOCAL_LOGD)Log.d(TAG,“禁用接口”);&&
04.& && &/ / NetworkUtils.disableInterface(mInterfaceName);&&
05.& && && & }& &&&/ /此处若不修改将导致无线关闭后再次开启,扫描不到AP!&&
#netcfg的
罗UP 127.0.0.1 255.0.0.0 0x
eth0的UP 10.20.112.46 255.255.255.0 0x
WLAN0&&DOWN&&0.0.0.0 0.0.0.0 0x
#iwconfig wlan0模式管理
无线请求“设定模式”(8B06)的误差为:
SET失败的设备WLAN0网络已关闭。
#iwconfig的WLAN0的绰号“RobinYeung”
无线请求“设置昵称”(8B1C)的错误为:
SET失败的设备WLAN0网络已关闭。
& && &&&上面的java代码的调用函数为:
[CPP] 查看纯副本
01.静态 的JNIEnv * env设置,J Object中clazz,jstring IFNAME:jint android_net_utils_disableInterface()&&
03.& & 整数 的结果;&&
05.& & 常量 字符 * nameStr的=的env-& GetStringUTFChars(IFNAME,NULL);&&
06.& & 导致= :: ifc_disable(nameStr的);&&
07.& & ENV-& ReleaseStringUTFChars(上次,nameStr的);&&
08.& & 回报 (jint)的结果;&&
此JNI函数又调用了ifc_disable函数,如下:
[CPP] 查看纯副本
01.诠释 ifc_disable(常量 字符 * IFNAME)&&
03.& & 整数 的结果;&&
05.& & ifc_init();& &/ /调用套接字函数,得到FD&&
06.& & ifc_down(上次);& &/ /通过IOCTL设定到内核&&
07.& & ifc_set_addr(IFNAME,0);&&
08.& & ifc_close();&&/ /关闭FD&&
09.& & 返回 结果;&&
ifc_down函数
[CPP] 查看纯副本
01.诠释 ifc_down(常量 字符 *名)&&
03.& & 返回 ifc_set_flags(姓名,0,IFF_UP);&&
06.静态的 诠释 ifc_set_flags(常量 字符 *名,无符号集,未签名的CLR)&&
08.& & 结构 ifreq的IFR;&&
09.& & ifc_init_ifr(姓名,IFR);&&
11.& & (ifc_ctl_sock,SIOCGIFFLAGS,IFR的ioctl()&0)& &-1;&&
12.& & ifr.ifr_flags =(ifr.ifr_flags和(CLR))|设置;&&
13.& & 返回 的ioctl(ifc_ctl_sock,SIOCSIFFLAGS,与IFR);&&
下降时的标志和FFFFFFFE,然后通过IOCTL设定到内核中。
& && && && & 7)&&创建wpa_supplicant.conf来完成的文件
& && && && && && && &在你的board配置目录下MIPSAndroid_Phase2.1/bcm_mipsgingerbread/AppLibs/opensource/android/src/mips-gingerbread/vendor/broadcom/bcm_platform/prebuilt创建一个wpa_supplicant.conf文件,输入如下内容:
& && && && && && && && &ctrl_interface = DIR = /数据/系统/使用wpa_supplicant GROUP =无线上网
& && && && && && && && &update_config = 1
& && && && && && && && &ap_scan = 1
& && && && &&&8)修改board配置目录下的AndroidBoard.mk
& && && && && &或AndroidBoard.mk下增加如下代码:
& && && && && && && & $(CLEAR_VARS)
& && && && && && && & LOCAL_MODULE:= wpa_supplicant.conf来
& && && && && && && & LOCAL_MODULE_TAGS:=用户
& && && && && && && & LOCAL_MODULE_CLASS:= ETC
& && && && && && && & LOCAL_MODULE_PATH:=的$(TARGET_OUT_ETC)/ WIFI
& && && && && && && & LOCAL_SRC_FILES:= $(LOCAL_MODULE)
& && && && && && && & 包括$(BUILD_PREBUILT)
& && && && &&&9)少了一个步骤,就是拷贝RT2870STA.dat到等下
& && && && && && && & 包括$(CLEAR_VARS)
& && && && && && && & LOCAL_MODULE:= RT2870STA.dat下
& && && && && && && & LOCAL_MODULE_CLASS:= ETC
& && && && && && && & LOCAL_MODULE_PATH:=的$(TARGET_OUT_ETC)/ Wireless/RT2870STA
& && && && && && && & LOCAL_SRC_FILES:= $(LOCAL_MODULE)
& && && && && && && & 包括$(BUILD_PREBUILT)
& && && && &&&10)干净然后
& && && && && &&&根据您的脚本构建Android或全部
三,开发遇到的问题汇总
& & 1、如果发现wifi当前是开着的,而却发现关机再重启却没自动开启的话,很有可能是飞行模式揉的货!修改数据库即可正常,如下:
[SQL] 查看纯副本
01.sqlite3的/数据/数据​​/ com.android.providers.settings /数据库/ settings.db&&
02.删除&&名称 =&&'' ;&&
03.。退出&&
& &&&2,无线网络信号强度问题
& && &&&源码位置2.2和2.3不同,2.2在frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java
2.3在框架/**/包/ SystemUI / SRC / COM /机器人/ systemui /状态栏/ StatusBarPolicy.java
2.3中单独成为一个apk文件,叫SystemUI.apk,从源码位置也能看出来。更新WiFi状态栏部分代码如下:
[J***A] 查看纯副本
01.否则, 如果 (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)| |&&
02.& && &&&action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)| |&&
03.& && &&&action.equals(WifiManager.RSSI_CHANGED_ACTION)){&&
04.& & updateWifi(意向);}&&
[J***A] 查看纯副本
01.私人 最终的 无效 updateWifi(意向意图){&&
02.& & 最后的 字符串操作= intent.getAction();&&
03.& & 如果 (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)){&&
05.& && &&&最后 布尔 启用intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,&&
06.& && && && && & WifiManager.WIFI_STATE_UNKNOWN)== WifiManager.WIFI_STATE_ENABLED的;&&
08.& && && &(启用)&&
09.& && && && &/ /如果禁用,隐藏图标。(连接时显示图标)。&&
10.& && && && &mService.setIconVisibility(“WIFI” ,&&假);&&
11.& && &&&}&&
13.& & }&&否则, 如果 (action.equals(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION)){&&
14.& && &&&最后 布尔 启用intent.getBooleanExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED,&&
15.& && && && && && && && && && && && && && && && && && & 假);&&
16.& && && &(启用)&&
17.& && && && &mService.setIconVisibility(“WIFI” ,&&假);&&
18.& && &&&}&&
19.& & }&&否则, 如果 (action.equals(WifiManager.RSSI_CHANGED_ACTION)){&&
20.& && &&&INT&&iconId;&&
21.& && && &
22.& && &&&最后&&newRssi = intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI - 200 );&&
23.& && &&&诠释 newSignalLevel = WifiManager.calculateSignalLevel(newRssi&&
24.& && && && && && && && && && && && && && && && && && && && &&&sWifiSignalImages [ 0 ]的长度);&&
25.& && && &(newSignalLevel!mLastWifiSignalLevel)&&
26.& && && && &mLastWifiSignalLevel = newSignalL&&
27.& && && && &如果 (mIsWifiConnected的){&&
28.& && && && && & iconId = sWifiSignalImages [mInetCondition] [newSignalLevel];&&
29.& && && && &}&&其他 {&&
30.& && && && && & iconId = sWifiTemporarilyNotConnectedI&&
31.& && && && &}&&
32.& && && && &mService.setIcon(“WIFI” ,iconId,&&0 );&&
33.& && &&&}&&
34.& & }&&
35.} &跨度风格= “字体家庭:宋体,宋体,sans-serif字体,白色空间:正常;背景色:RGB(255,255,255)” & &/ SPAN&&&
[CPP] 查看纯副本
01.&前名“代码”&&= “java”的&& &&&/ **
02.& &&&*计算的信号电平。这应该是任何时候使用一个信号
03.& &&&*示出。
04.& &&&*&&
05.& &&&* @参数RSSI RSSI测量的信号的功率。
06.& &&&* @参数numLevels至于多个层面的考虑在计算
07.& &&&*水平。
08.& &&&* @返回A的信号电平,取值范围为0到numLevels-1中给出
09.& &&&*(包括首尾两项)。
10.& &&&* /&&
11.& & 公共 静态 诠释 calculateSignalLevel的( RSSI的,的&&诠释 numLevels)&&
12.& && && &(RSSI &= MIN_RSSI的){&&
13.& && && && &返回 0;&&
14.& && &&&}&&否则 ,如果 (RSSI& = MAX_RSSI)的{&&
15.& && && && &返回 numLevels - 1;&&
16.& && &&&}&&其他 {&&
17.& && && && &诠释 partitionSize =(MAX_RSSI - MIN_RSSI)/(numLevels - 1);&&
18.& && && && &回报率“&&(RSSI - MIN_RSSI)/ partitionS&&
19.& && &&&}&&
20.& & }&&
21.&/ pre&&&
22.&PRE& &/ pre&&&
23.&前名称= “代码”&&= “HTML” & I / WifiStateTracker(1799):────getRssiApprox ------------ WifiNative。getRssiCommand(): - 20&&
24.我/ WifiStateTracker的(1799年):----------------------& newRssi:-20&&
25.我/ WifiStateTracker的(1799):--​​--------------------& newSignalLevel:3&&
26.&/ pre&参考&&
27.&跨度风格= “字体大小:18像素,颜色:#330099” &根据日志可发现电平为-20,而根据计算公式算为(-55 - (-100))/ 3 = 15; &/ SPAN&&&
若RSSI电平= -20,那么结果为(-20 - (-100))/ 15 = 5。
后来发现自己忽略了前面一个,如果语句,-20明显& -55,将不进入计算分支,而直接计算4 - 1 = 3;
所以问题就解决了​​!
width:100%">
& && &&&3,USB类型的的Wi-Fi设备插拔导致的资源分类界面死掉的问题解决方案
& &&&首先对于的Wi-Fi调起后将在/ SYS /类/净目录下创建&AE&AE相关的文件,如下所示:
[javascript的 视图普通副本
01./ SYS / 类/净#LS&&
03.为eth0&&
04.WLAN0&&
05./ SYS / 类/净#ls-l的&&
06.lrwxrwxrwx根日16:59 LO - & .. /。。/设备/虚拟/ NET / LO&&
07.lrwxrwxrwx根日16点为eth0 - & .. / ../devices/platform/bcmgenet.0/net/eth0&&
08.lrwxrwxrwx根日16时59 WLAN0 - & .. / ../devices/platform/ehci-brcm.1/usb2/2-1/net/wlan0&&
& & 通过在硬件抽象层添加下面的函数,来确认的Wi-Fi是否连接?如下图:
[CPP] 查看纯副本
01.静态 常量和 字符 DRIVER_FILE [] =&&“/ sys/class/net/wlan0” ;&&
[CPP] 查看纯副本
01.诠释 check_device(){&&
02.& &&&devfd = 0;&&
03.& & devfd开放(DRIVER_FILE,O_RDONLY);&&
04.& & 如果 (devfd &0){&&
05.& && &&&关闭(devfd);&&
06.& && &&&LOGE( “ 无法打开\”%s \“:%S” ,DRIVER_FILE,于strerror(errno的));&&
07.& && &&&返回 -1;&&
08.& & }&&
09.& & 关闭(devfd);&&
10.& & 返回 0;&&
& & 下面通过jni将此函数传递给java层调用,来不断的确认wi-fi是否已经连接!同时我在此处又增加了查看usb总线上设备的product、manu、idProduct、idVendor等来再次确认wi-fi设备已经连接,这个函数不再贴出,要求也很简单,只需要读/sys/class/目录下usb的相关内容即可!
老外写的文档,相当有参考价值!
0。了解Android的无线网络是如何工作的。
1。使建筑物的使用wpa_supplicant在你的BoardConfig.mk
2。(可选)启用调试使用wpa_supplicant。
3。提供一个适当的wpa_supplicant.conf来为您的设备&&
4。有正确的路径和权限创建init.rc
5。确保您使用wpa_supplicant的dhcpcd(可选)从init.rc&&
6。提供你的驱动程序作为一个模块的内核和适当的内核支持Android的源代码进行相应的修改。
7。如果你的模块需要提供一个固件
8。你的驱动程序与Android自定义使用wpa_supplicant命令和SIOCSIWPRIV的IOCTL的工作
二,有关详情
0。了解Android的无线网络的工作原理。,
& & Android使用修改后的&&使用wpa_supplicant&&(外部/使用wpa_supplicant)守护程序支持wifi的控制是通过一个套接字&&硬件/ libhardware_legacy / WIFI / wifi.c的的(WiFiHW)会控制Android的UI通过 android.net。&&从框架/**/ WIFI / J***A /机器人/网络/ WIFI / WIFI包&&和它相对应的JNI实施&&框架/基/核心/ JNI / android_net_wifi_Wifi.cpp的更高级别的网络管理 框架/基/核心/ J***A / Android的/净
1。使建筑物的使用wpa_supplicant在你的BoardConfig.mk
& & 这是通过简单地增加:&&BOARD_WPA_SUPPLICANT_DRIVER:WEXT
你的&&BoardConfig.mk。这将设置WPA_BUILD_SUPPLICANT到真正的在外部/使用wpa_supplicant来/ Android.mk使建设&&driver_wext.c,, 如果你有一个自定义的使用wpa_supplicant驱动程序(如MadWifi或定制的Android私有命令仿真-见最后一段),你可以与AWEXT或更换WEXT你的驱动程序的名称(madwifi的,PRISM等)。
2。(可选)启用调试使用wpa_supplicant
& & 默认情况下,使用wpa_supplicant被设置为的MSG_INFO并没有告诉很多。为了让更多的消息:
2.1修改&&common.c和和集&&wpa_debug_level = MSG_DEBUG
2.2修改&&common.h中和改变&&的wpa_printf,从if((水平)& = MSG_INFO)的如果((水平)& = MSG_DEBUG)
3。提供一个适当的wpa_supplicant.conf来为您的设备
& & 提供 的wpa_supplicant.conf是很重要的,因为对Android平台的该文件中指定的控制插座(ctrl_interface =)。这个文件应该被复制,您的&&AndroidBoard.mk(TARGET_OUT_ETC)/ WIFI(通常是&&/系统/ etc / WIFI / wpa_supplicant.conf来完成的)。此位置将被用于从init.rc使用wpa_supplicant服务。&&
& & 中,可以配置使用wpa_supplicant有两种不同的方式,一种是使用一个“私人”Android的命名空间中的socket创建&&socket_local_client_connect()功能在&&wpa_ctrl.c ,另一是通过使用标准的Unix套接字。
所需的最小配置选项的wpa_supplicant.conf:
- Android私人插槽的
ctrl_interface
驱动程序,你可能还需要添加:
& && &&&ap_scan = 1,
如果你有AP关联的问题应该改变= 0 ap_scan,让驾驶者的关联,而不是使用wpa_supplicant。
如果你想wpa_supplicant来连接到非WPA或开启无线网络的(默认情况下,它会跳过这几样)地址:
& && && && & key_mgmt这= NONE / WPA-PSK
& && && && & SSID =名称
& && && && & PSK =密码
& && && && & 优先数
4。有从init.rc创建正确的权限和路径
& & 会导致在使用wpa_supplicant不能够创建/打开控制插座libhardware_legacy / WiFi / wifi.c的的将无法连接。
& & 由于谷歌改进的使用wpa_supplicant运行&&/组的目录结构和文件的所有权应属于无线用户/组(见的 os_program_init() 函数&&使用wpa_supplicant / os_unix.c)。
否则这样的错误:
E / WifiHW():无法打开连接“/数据/系统请求者/ wpa_supplicant/wlan0“:没有这样的文件或目录 就会出现。
& & 的wpa_supplicant.conf应该属于无线用户/用户组,因为使用wpa_supplicant将要修改这个文件。如果您的系统/系统为只读的位置,如/数据/ MISC / WIFI / wpa_supplicant.conf来和修改init.rc使用wpa_supplicant服务与新的位置。
& & 请确保路径正确地创建init.rc:
& && && &MKDIR /系统的/ etc /无线0770无线WIFI
& && && &搭配chmod 0770 /系统/等/ WIFI
& && && &搭配chmod 0660 /系统/ etc / WIFI / wpa_supplicant.conf来完成的
& && && &乔恩WIFI WIFI /系统的/ etc / WIFI / wpa_supplicant.conf来完成
& && && &#使用wpa_supplicant控制插座为Android wifi.c (机器人专用插座)
& && && &MKDIR /数据/ MISC /无线0770无线WIFI
& && && &MKDIR /数据/ MISC / WIFI /插座0770 WIFI WIFI
& && && &搭配chmod 0770 /数据/ MISC / WIFI
& && && &搭配chmod 0660 /数据/ MISC /无线/ wpa_supplicant.conf来
& && && &CHOWN的WIFI WIFI /数据/ MISC / WIFI
& && && &乔恩WIFI WIFI /数据/ MISC / WIFI / wpa_supplicant.conf来完成的,
如果你使用一个 Unix标准插座 的wpa_supplicant.conf(见上文)加:
& && &&&#使用wpa_supplicant插座(Unix套接字模式)
& && &&&MKDIR /数据/系统/使用wpa_supplicant 0771 WIFI WIFI
& && &&&chmod 0771 /系统/数据/使用wpa_supplicant
& && &&&乔恩WIFI WIFI /数据/系统/使用wpa_supplicant里
& & 不要添加这些,如果你使用Android私人插座,因为它会使用wpa_supplicant非功能性的,因为&&硬件/ libhardware_legacy / WIFI / wifi.c的的检查的/数据/系统/使用wpa_supplicant 文件夹的存在&&,将传递一个错误的接口名称towpa_ctrl_open()函数。&&
5。请确保您的使用wpa_supplicant和dhcpcd在init.rc从
init.rc启动,如应取决于你选择哪条路径:
- Android的私人插座:
使用wpa_supplicant /系统服务/ BIN /使用wpa_supplicant-DD-Dwext iwlan0-C /系统/ etc / WIFI / wpa_supplicant.conf来完成的
& && &&&插座wpa_wlan0 dgram 660 WIFI无线
& && &&&集群系统无线INET
& && &&&禁用
& && &&&单稳&&
- Unix标准插座:
使用wpa_supplicant服务/系统/斌/使用wpa_supplicant-DD-Dwext iwlan0-C /系统的/ etc / WIFI /的wpa_supplicant.conf
& && &&&组系统无线INET的
& && &&&单稳,
& & 如果你的无线驱动程序创建一个WiFi接口与其他名称,而不是WLAN0,你将不得不修改上述行。
& & 您还应该从init.rc dhcpcd程式
& && &&&组系统的DHCP
& && &&&禁用
& && &&&单稳
。它提供你的驱动程序作为一个模块或内置的内核和适当的内核支持
& & 。驱动程序可以在内置模块(默认情况下,Android的方式),或建在内核(如果你想依靠在内核自动探测,以支持多个驱动器,例如USB WIFI),但需要修改源代码(见下文)。
-由于内核模块:
& &1。WIFI_DRIVER_MODULE_PATH:=要加载的模块,路径
,通常看起来应该像/系统/库/模块/ wlan.ko
& &2。WIFI_DRIVER_MODULE_NAME:=的名称的网络接口驱动程序创建,例如WLAN0&&
& &3。WIFI_DRIVER_MODULE_ARG:任何参数,你想传递给insmod的驱动程序,例如nohwcrypt
& &确保构建Android的正确位置时,您将您的内核模块。
-建于内核:
-第一init.rc的需要进行修改,以通知硬件/ libhardware_legacy / WIFI / wifi.c的的的接口的名称,该驱动程序已加载并使用wpa_supplicant运行的状态设置为:&&
setprop wifi.interface的的“WLAN0”
setprop wlan.driver.status“OK”
做&&不 添加setprop init.svc.wpa_supplicant“运行”正如我前面提到的,因为它会阻止使用wpa_supplicant由init启动。
-其次硬件/ libhardware_legacy / WIFI / wifi.c需要进行修改,这样的函数的insmod命令()和rmmod()返回0(只需添加返回0;第一线的功能,因为它们不需要驱动程序是建立在内核时),检查/ proc / modules中check_driver_loaded()函数返回前,
& & 您可能会遇到问题,WifiHW模块不能够使用wpa_supplicant插座连接到甚至用正确permisions。尝试关闭/打开WiFi的GUI。
7。如果你的驱动需要提供一个固件,
& & 如果你的驱动需要一个固件,你将不得不复制固件文件到/ etc /固件的Android编译。Android不使用标准的热插拔二进制(虽然是一个实现&&的android-x86的 系统/代码/工具箱/ hotplug.c的),而不是init进程需要照顾的固件事件,并加载固件文件从/ etc /固件(看到:系统/核心/的初始化/ devices.c中handle_firmware_event的()函数)。
固件文件名 ​​是由驱动程序定义,可能还包含一个文件夹,如:RTL8192SU/rtl8192sfw.bin,整个文件路径应该可以在/ etc /固件
8。与Android定制使用wpa_supplicant命令和SIOCSIWPRIV的ioctl。让您的驱动程序工作
的ioctl通常不实施任何已知的除了​​BCM4329,这是在谷歌的无线驱动程序&&
的错误没有实现这个ioctl的样子:
E /使用wpa_supplicant():wpa_driver_priv_driver_cmd失败wpa_driver_priv_driver_cmd和RSSI长度= 4096&&
E /使用wpa_supplicant():wpa_driver_priv_driver_cmd失败的&&
D /使用wpa_supplicant() :wpa_driver_priv_driver_cmd LINKSPEED LEN = 4096
E /使用wpa_supplicant():wpa_driver_priv_driver_cmd失败的&&
I /使用wpa_supplicant():CTRL-EVENT-DRIVER-STATE忌用
4后,WEXT_NUMBER_SEQUENTIAL_ERRORS错误,机器人将中止使用设备。
禁用错误,检查在外部/使用wpa_supplicant / driver_wext.c的只是RET = 0; inwpa_driver_priv_driver_cmd()功能后的SIOCSIWPRIV的ioctl调用。这将使所有的接入点信号或MAC地址没有出现在Android UI。
& & 要正确贯彻落实的IOCTL,你需要修改你的内核驱动程序,回复SIOCSIWPRIV的ioctl信号强度(RSSI)和MACADDR命令是最重要的。
& & 一个更好的方法是添加一个自定义的driver_xxx.c谷歌外部/使用wpa_supplicant来/实施wpa_driver_priv_driver_cmd的()函数,将照顾的RSSI,的MACADDR和他人,通过调用到SIOCGIWSTATS,SIOCGIFHWADDR的ioctl,与其他的功能被称为driver_wext。 &C。
& & 下面是一个链接到一个修补程序,使用wpa_supplicant,我所做的&&迷你 picoPC&&Android编译。它创建了一个新的的驱动程序awext“模仿”的Android驱动程序使用无线扩展的ioctl命令。
width:100%">
不明觉厉~~
width:100%">
我想问一下,楼主贴了这么多,你看的懂吗?:Q
width:100%">
台电微信服务号
All Contents Copyright @2003 - 2016 Teclast Electronics Co., Ltd. 粤ICP备号 

参考资料

 

随机推荐