精华内容
下载资源
问答
  • WIFI工作原理

    千次阅读 2018-01-20 13:20:29
    Wi-Fi工作原理 第一部分 Android概述  在介绍Wi-Fi之前,先简要介绍一下Android系统,主要分析一下Android的按层实现的原理。Android层次结构是整个Android体系中所有应用实现的基础框架,而Android源代码结构则...

    Wi-Fi工作原理

    第一部分  Android概述

           在介绍Wi-Fi之前,先简要介绍一下Android系统,主要分析一下Android的按层实现的原理。Android层次结构是整个Android体系中所有应用实现的基础框架,而Android源代码结构则与Wi-Fi的实现细节有关。

    1.1  基础知识

           Android是一款当前最为流行的手机操作系统,它本身的开放性加上Google公司的大力推广,使其获得了大量手机生产厂商、科研院校、软件公司以及个人开发者的青睐,它属于一个全开放的平台,因此开发者可以得到整个系统的源代码,并能对其进行修改,修改的结果可以通过互联网上传到Android官方网站,倘若被审核通过,就能加入到Android的源代码中,这绝对是一件令人兴奋的事情。

    1.2  Android层次结构

    Android系统是在Linux系统的基础上,经过了层层封装,最终提供给开发者的是大量的Java API,在这里被叫做Android API,于是,开发者就可以像开发一般的Java程序那样开发Android应用程序,这样的设计不仅降低了开发Android应用程序的难度,还增加了Android系统的界面友好度。

           和一般的操作系统一样,Android也是对硬件进行了多层的封装,使得应用程序的开发者和用户能轻松地操作硬件,完成他们所希望完成的事情。Android所针对的硬件就是手机,这里主要指智能手机,这种智能手机与传统的手机相比电话功能被弱化,而更偏向于一台笔记本电脑,因此它的CPU、内存等硬件配置要比传统的手机高。它需要提供给用户一些电脑所拥有的功能,比如说Wi-Fi上网、鼠标或触屏控制的界面、收发电子邮件、玩大型游戏等,但同时又必须拥有传统手机所支持的电话、摄像头、蓝牙等功,这些挑战都增加了Android的设计难度。

           Android从下至上可以分为这样几个层次:

    (1)Linux内核及驱动层(C实现);

           (2)本地库(C库和C++库)和Java运行时环境层(主要由C、C++实现);

           (3)Java框架层(主要由Java实现);

           (4)Java应用程序层(Java实现)。

    第3层和第4层之间就是上文所说的AndroidAPI,这也是Android提供给应用程序开发人员的接口,我们只要熟悉了这些API,就可以进行Android应用程序的开发工作了。

    Android手机中所有的额应用程序,包括核心应用程序和用户开发的应用程序,它们都属于第4层次,用户可以得到系统自带的所有程序的源代码,比如初始界面管理程序、短信程序、日历、联系人管理程序等,并能随意修改这些程序,甚至还可以删除其中的一两个,然后重新编译源代码,这样便生成了自己定制的Android系统。

    1.3  Android源代码结构

    虽然只看API就可以编写Android的应用程序了,但是无论对Android系统的研究人员还是应用程序的开发者来说,Android的源代码都是一笔值得好好研究的财富。

    Android的源代码可以从其官方网站上下载到,在此之前,本机上需要装Linux系统,然后根据官网上的步骤逐步执行,包括初始化系统环境、下载源码、编译源码,就可以在本机上下载并编译整个Android系统的源代码。讲述如何下载并编译Android源代码的官网地址如下:http://source.android.com/source/initializing.html

    纵观整个Android源码的结构,在其根目录下有大约10多个文件夹,其中可以大致分为以下三部分:

    (1)   关键部分

    这部分的实现代码位于根目录下除了external和package之外的所有文件夹中,这些代码实现了Linux内核 (kernel文件夹)、核心驱动、Android驱动、Android系统的建立 (build文件夹)、Dalvik虚拟机 (dalvik文件夹)、C和C++本地库 (bionic文件夹)、硬件抽象、无线硬件接口 (hardware/ril文件夹)、Java运行环境的支持等功能,是整个Android系统的启动和运行所必须的。

    (2)   扩展部分

    这部分的实现代码位于external文件夹中,这里边存放着许多其他开源项目,这些项目都已经过修改而融入到Android系统中。

    (3)   应用程序包

    这部分代码位于package文件夹中,由应用程序(apps)、提供器(providers)、输入法(inputmethods)三部分组成。

    Android手机自带的应用程序就位于./package/apps中,这里有Browser(浏览器),  AlarmClock(闹钟), Camera(照相机),Contacts(联系人), Settings(设置), Launcher(初始界面)等,还有一些,在此不再一一罗列。

    第二部分  Wi-Fi层次结构

           Android中Wi-Fi驱动程序被编译成内核的模块,通过应用程序设置开关进行加载和卸载,具体来说就是Settings –> Wireless & networks –> Wi-Fi。同时,要使Wi-Fi正常工作,驱动中还需要实现烧写固件程序和配置信息到Wi-Fi的芯片中。

    2.1  Wi-Fi程序模块

           在Android的源代码中,有多处地方涉及到Wi-Fi,跨越了前文中所说的1、2、3、4层。下面介绍几个与实现Wi-Fi功能密切相关的程序模块。

    2.1.1  开源库wpa_supplicant

    它是一个开源的库,加入到Android源码中,经过修改后成为Android实现Wi-Fi功能的基础。它的代码位于./external/wpa_supplicant文件夹中,主要用C和C++写成,实现了从上层接到命令后,发送给硬件驱动程序,接着操作硬件完成需要的操作,这里是通过socket来与硬件驱动进行通信的。下图2-1是wpa_supplicant的框架图。


    图2-1  wpa_supplicant开源项目框架图

     

    2.1.2  硬件驱动程序

    前文所说的wpa_supplicant与之通信的硬件驱动的代码位于./hardware/libhardware_legacy/wifi/wifi.c中。

    2.1.3  JNI部分

    首先简要介绍一下JNI,JNI是Java NativeInterface的缩写,它实现了Java代码与其他代码进行交互,使得在Java虚拟机中运行的Java代码能够与用其他语言编写的应用程序和库进行交互。在Android中,JNI可以让Java程序调用C程序。

    与Wi-Fi相关的JNI代码位于./frameworks/base/core/jni/android_net_wifi_Wifi.cpp中。

    2.1.4  Wi-Fi API部分

    这部分源代码使用Java完成了对Wi-Fi API的封装,使应用程序可以使用Wi-Fi功能,它们位于frameworks/base/services/java/com/android/server/和frameworks/base/wifi/java/android/net/wifi/中。

    2.1.5  Wi-FiSettings应用程序部分

    这是Android中自带的一个应用程序,在手机的Settings中,它可以让用户手动打开或关闭Wi-Fi功能。当用户打开Wi-Fi功能后,它会自动搜索周围的无线网络,并以列表的形式显示,供用户选择,默认会连接用户上一次成功连接的无线网络。这部分代码位于./packages/apps/Settings/src/com/android/settings/wifi中。

    2.2  Wi-Fi层次结构关系

           下图2-2就是Android中Wi-Fi的各模块在整个Android层次结构中的位置,以及它们之间的关系。


    图2-2    Android中Wi-Fi的层次结构图

     

    第三部分  Wi-Fi执行过程

           Android中Wi-Fi是使用层次结构设计的,因此执行过程基本上是在接到用户命令后,先从上到下,再从下到上,完成用户与Wi-Fi设备的交互。下图3-1就是Wi-Fi功能的详细执行过程示意图。

    图3-1    Wi-Fi执行过程示意图

     

           如上图3-1所示,Wi-Fi的执行过程主要有4个,下文将对这几个过程进行详细介绍。

    3.1  从Settings中启动Wi-Fi

    当用户按下Wi-Fi 按钮后,Android 会调用WifiEnabler 的onPreferenceChange,再由WifiEnabler调用WifiManager 的setWifiEnabled 接口函数,通过AIDL,实际调用的是WifiService的setWifiEnabled 函数,WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI 消息,在处理该消息的代码中做真正的使能工作:首先装载WIFI 内核模块(该模块的位置硬编码为”/system/lib/modules/wlan.ko” ), 然后启动wpa_supplicant ( 配置文件硬编码为”/data/misc/wifi/wpa_supplicant.conf”),再通过WifiStateTracker 来启动WifiMonitor 中的监视线程。

    当使能成功后,会广播发送WIFI_STATE_CHANGED_ACTION 这个Intent 通知外界Wi-Fi已经成功使能了。WifiEnabler 创建的时候就会向Android 注册接收

    WIFI_STATE_CHANGED_ACTION,因此它会收到该Intent,从而开始扫描。

    3.2  查找AccessPoint (AP)

    扫描的入口函数是WifiService 的startScan,它其实也就是往wpa_supplicant 发送SCAN 命令。当wpa_supplicant 处理完SCAN 命令后,它会向控制通道发送事件通知扫描完成,从而wifi_wait_for_event 函数会接收到该事件,由此WifiMonitor 中的MonitorThread 会被执行来出来这个事件,WifiStateTracker 则接着广播发SCAN_RESULTS_AVAILABLE_ACTION 这个Intent ,WifiLayer 注册了接收SCAN_RESULTS_AVAILABLE_ACTION 这个Intent,所以它的相关处理函数handleScanResultsAvailable 会被调用,在该函数中,先会去拿到SCAN 的结果(最终是往wpa_supplicant 发送SCAN_RESULT 命令并读取返回值来实现的)。

    对每一个扫描返回的AP,WifiLayer 会调用WifiSettings 的onAccessPointSetChanged 函数,从而最终把该AP 加到GUI 显示列表中。

    3.3  连接AP

    当用户在 AcessPointDialog 中选择好加密方式和输入密钥之后,再点击连接按钮,Android就会去连接这个AP。

    WifiLayer 会先检测这个AP是不是之前被配置过,这个是通过向wpa_supplicant 发送LIST_NETWORK命令并且比较返回值来实现的,如果wpa_supplicant 没有这个AP 的配置信息,则会向wpa_supplicant 发送ADD_NETWORK命令来添加该AP,ADD_NETWORK 命令会返回一个ID ,WifiLayer再用这个返回的ID 作为参数向wpa_supplicant 发送ENABLE_NETWORK命令,从而让wpa_supplicant 去连接该AP。

    3.4  配置IP地址

    当 wpa_supplicant 成功连接上AP 之后,它会向控制通道发送事件通知连接上AP 了,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor 中的MonitorThread 会被执行来处理这个事件,WifiMonitor 再调用WifiStateTracker 的notifyStateChange,WifiStateTracker 则接着会往自身发送EVENT_DHCP_START 消息来启动DHCP 去获取IP 地址,然后再广播发送NETWORK_STATE_CHANGED_ACTION这个Intent。

    WifiLayer 注册了接收NETWORK_STATE_CHANGED_ACTION 这个Intent,所以它的相关处理函数handleNetworkStateChanged 会被调用,当 DHCP 拿到IP 地址之后,会再发送EVENT_DHCP_SUCCEEDED消息,WifiLayer 处理EVENT_DHCP_SUCCEEDED 消息, 会再次广播发送NETWORK_STATE_CHANGED_ACTION 这个Intent,这次带上完整的IP 地址信息。至此为止,整个连接过程完成。


    展开全文
  • android wifi 工作原理

    2012-11-24 18:41:59
    android wifi 工作原理,请有意者参考
  • WiFi工作原理、测试及生产注意事项.ppt
  • Android_WiFi工作原理

    2012-10-31 14:01:46
    Android中Wi-Fi驱动程序被编译成内核的模块,通过应用程序设置开关进行加载和卸载,具体来说就是Settings -->...同时,要使Wi-Fi正常工作,驱动中还需要实现烧写固件程序和配置信息到Wi-Fi的芯片中
  • 无线wifi 工作原理

    2014-06-06 11:45:15
    成功后,就可以让其他电脑、手机、ipad等具有wifi功能的终端设备搜索该无线网,...wifi工作的频段在2.4GHZ,有线和无线应该是无不干扰。可是想问:多个终端设备连接到同一无线网时,上网质量会不会受到影响?我那个直接
  • wifi网络工作原理

    千次阅读 2019-05-22 13:53:21
    通过将2.4G wifi射频降频后在cable中传输。  IEEE802.11只是定义了分配系统应该提供Service。整个无线局域网定义了9种服务:  A、分配系统:Association、Diassociation、Distribution、Integration、...

    至少需要一个ap和一个或一个以上的hi。AP每100ms将SSID经由信号台分组广播一次,信号台分组的传输速率是1 Mbit/s,并且长度相当的短,所以这个广播动作对网络性能的影响不大。因为Wi-Fi规定的最低传输速率是1 Mbit/s,所以确保所有的Wi-Fi hi端都能收到这个SSID广播分组,hi可以借此决定是否要和这一个SSID的AP连接。
      用户可以设置要连接到哪一个SSID。Wi-Fi总是对客户端开放其连接标准,并支持漫游。但亦意味着,一个无线适配器有可能在性能上优于其他的适配器。由于它是通过空气传送信号,所以和非交换以太网有相同的特点。
      还有一种Wi-Fi over cable的新方案,属于EOC中的一种技术。通过将2.4G wifi射频降频后在cable中传输。
      IEEE802.11只是定义了分配系统应该提供Service。整个无线局域网定义了9种服务:
      A、分配系统:Association、Diassociation、Distribution、Integration、Reassociation;
      B、站点:Authentication、Deauthentication、Privacy、MSDU delivery。
      当然,Wi-Fi网络可以运作,必须是有这门技术的支撑,有了这些协议和标准后才可以建立这样的一个无线通信的网络供大家来使用。

    展开全文
  • wifi探针是什么 WiFi探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启WiFi的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFiWiFi探针就能够识别用户的信息。 当我们走进探针...
  • Wifi模块的工作原理

    千次阅读 2013-12-24 10:03:00
    ...   在无线网络领域里面,无线wifi是最火的名词...今天wifi方案设计开发商给大家讲解有关串口wifi模块的基础:串口wifi模块的工作原理,以及有哪些功能?  串口wifi模块的简介:采用UART接口,支持串口透明数据...

     

    http://www.wifitop1.com/news/content-98.html

     

    在无线网络领域里面,无线wifi是最火的名词。对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能呢?今天wifi方案设计开发商给大家讲解有关串口wifi模块的基础:串口wifi模块的工作原理,以及有哪些功能?

          串口wifi模块的简介:采用UART接口,支持串口透明数据传输模式,并且具有多模安全能力。内置TCP/IP协议栈和IEEE802.11 协议栈,能够实现用户串口到无线网络之间的转换。

          讲解到串口wifi模块的工作原理,先给大家讲解一下我们生活中常遇到的几种无线wifi网络结构。

          无线wifi网络拓扑结构有2种,分别是基础网(Infra)和自组网(Adhoc)。这里要了解两个概念,AP,好比我们家中的路由器,无线wifi网络的创建者,网络的中心节点。STA,又叫做站点,是无线wifi网络的终端,不如我们家里用的笔记本,ipad等等都可以叫做站点。  

          基础网(Infra):由很多AP组成的无线网络,整个网络的中心就是由AP,网络中所有的通讯都是由ap进行数据的转换。

          自组网(Adhoc): 网络中不存在AP,由两个或者两个以上的STA组成的无线网络。无线网络中所有的STA直接进行数据交换,这种无线网络结构不严谨。

          串口Wifi模块的工作方式

           1.主动型串口设备联网:在每次数据交换之前,都是由串口wifi模块设备主动发起连接,然后在进行数据交换。典型例子(无线pos机)在每次刷卡完成之后,无线pos机即开始连接后台的服务器进行数据交换。

           2.被动型串口设备联网:在每次数据交换之前,所有的串口wifi模块设备都是处于等待的状态,然后服务器发起连接邀请。最后进行数据交换。


           Wifi模块的主要功能 

          第一.地址绑定:本模块支持在联网过程中绑定目的网络BSSID地址的功能。根据802.11协议规定,不同的无线网络可以具有相同的网络名称(也就是SSID/ESSID),但是必须对应一个唯一的BSSID 地址。非法入侵者可以通过建立具有相同的SSID/ESSID的无线网络的方法,使得网络中的STA联接到非法的AP上,从而造成网络的泄密。通过BSSID地址绑定的方式,可以防止STA 接入到非法的网络,从而提高无线网络的安全性。

          第二.无线漫游:本模块支持基于802.11协议的无线漫游功能。无线漫游指的是为了扩大一个无线网络的覆盖范围,由多个AP共同创建一个具有相同的SSID/ESSID的无线网络,每个AP用来覆盖不同的区域,接入到该网络的STA可以根据所处位置的不同选择一个最近(即信号最强)的AP来接入,而且随着STA的移动自动的在不同的AP之间切换。

          第三. 灵活的参数配置: 基于串口连接,使用配置管理程序 ;基于串口连接,使用Windows下的超级终端程序 ;基于网络连接,使用IE浏览器程序; 基于无线连接,使用配置管理程序。

          第四.基础网,是由AP创建,众多STA加入所组成的无线网络,这种类型的网络的特点是AP是整个网络的中心,网络中所有的通信都通过AP来转发完成

          第五.自组网,是仅由两个及以上STA自己组成,网络中不存在AP,这种类型的网络是一种松散的结构,网络中所有的STA都可以直接通信。

          第六. 安全机制,支持不同的安全模式,包括:WEP64/WEP128/ TKIP/CCMP(AES) WEP/WPA-PSK/WPA2-PSK。

          第七.快速联网:本模块支持通过指定信道号的方式来进行快速联网。在通常的无线联网过程中,会首先对当前的所有信道自动进行一次扫描,来搜索准备连接的目的AP创建的(或Adhoc)网络。串口wifi模块提供了设置工作信道的参数,在已知目的网络所在信道的条件下,可以直接指定模块的工作信道,从而达到加快联网速度的目的.

    展开全文
  • wifi状态机工作原理

    千次阅读 2018-09-07 14:19:52
    WifiController 是高级别的wifi状态机,它管理的状态是wifi开关,wifi热点开关等状态。只有在wifi开关等具体状态下,判断wifi处于启动扫描附近热点状态等才是有意义的。 1.1 WifiController状态机的创建 ...

    版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/82494498
    1. WifiController状态机
    WifiController 是高级别的wifi状态机,它管理的状态是wifi开关,wifi热点开关等状态。只有在wifi开关等具体状态下,判断wifi处于启动扫描附近热点状态等才是有意义的。

    1.1 WifiController状态机的创建

    mWifiController = new WifiController(mContext, mWifiStateMachine, mSettingsStore,
                    mLockManager, mWifiServiceHandlerThread.getLooper(), mFrameworkFacade); 

    状态机初始化三部曲:

    addState
    setInitialState
    start

    状态机无非就是一个定义了很多状态的机器,它收到消息后,会根据消息来切换这个机器的状态。WifiController 的状态构造在它的构造方法中。当我们创建一个状态机时,需要使用addState方法给状态机添加状态
    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiController.java

        WifiController(Context context, WifiStateMachine wsm, WifiSettingsStore wss,
                WifiLockManager wifiLockManager, Looper looper, FrameworkFacade f) {
        ...
    
            addState(mDefaultState);
                addState(mApStaDisabledState, mDefaultState);
                addState(mStaEnabledState, mDefaultState);
                    addState(mDeviceActiveState, mStaEnabledState);
                    addState(mDeviceInactiveState, mStaEnabledState);
                        addState(mScanOnlyLockHeldState, mDeviceInactiveState);
                        addState(mFullLockHeldState, mDeviceInactiveState);
                        addState(mFullHighPerfLockHeldState, mDeviceInactiveState);
                        addState(mNoLockHeldState, mDeviceInactiveState);
                addState(mStaDisabledWithScanState, mDefaultState);
                addState(mApEnabledState, mDefaultState);
                addState(mEcmState, mDefaultState);
    
            boolean isAirplaneModeOn = mSettingsStore.isAirplaneModeOn();
            boolean isWifiEnabled = mSettingsStore.isWifiToggleEnabled();
            boolean isScanningAlwaysAvailable = mSettingsStore.isScanAlwaysAvailable();
    
            log("isAirplaneModeOn = " + isAirplaneModeOn +
                    ", isWifiEnabled = " + isWifiEnabled +
                    ", isScanningAvailable = " + isScanningAlwaysAvailable);
    
            if (isScanningAlwaysAvailable) {
                setInitialState(mStaDisabledWithScanState);
            } else {
                setInitialState(mApStaDisabledState);
            }

    从WifiController的构造函数中,我们可以看到使用addState方法给状态机添加了状态,用setInitialState给状态机设置了初始状态mApStaDisabledState

    而WifiController的start方法是由WifiService的onBootPhase方法调用WifiServiceImpl的checkAndStartWifi调用的:

        /**
         * Check if we are ready to start wifi.
         *
         * First check if we will be restarting system services to decrypt the device. If the device is
         * not encrypted, check if Wi-Fi needs to be enabled and start if needed
         *
         * This function is used only at boot time.
         */
        public void checkAndStartWifi() {
            ...
            mWifiController.start();
            ...
        }

    WifiController状态机的状态结构图如下
    这里写图片描述

    2 mWifiStateMachine状态机
    WifiStateMachine状态机的创建

            mWifiStateMachine = new WifiStateMachine(mContext, mFrameworkFacade,
                    wifiStateMachineLooper, UserManager.get(mContext),
                    this, mBackupManagerProxy, mCountryCode, mWifiNative,
                    new WrongPasswordNotifier(mContext, mFrameworkFacade));

    mWifiStateMachine 则表述wifi更加细致的状态,它的状态构建也是在构造函数中:
    frameworks/opt/net/wifi/service/java/com/android/server/wifi/WifiStateMachine.java

    public WifiStateMachine(Context context, FrameworkFacade facade, Looper looper,
                            UserManager userManager, WifiInjector wifiInjector,
                            BackupManagerProxy backupManagerProxy, WifiCountryCode countryCode,
                            WifiNative wifiNative,
                            WrongPasswordNotifier wrongPasswordNotifier) {
      ...
        // CHECKSTYLE:OFF IndentationCheck
        addState(mDefaultState);
            addState(mInitialState, mDefaultState);
            addState(mSupplicantStartingState, mDefaultState);
            addState(mSupplicantStartedState, mDefaultState);
                    addState(mScanModeState, mSupplicantStartedState);
                    addState(mConnectModeState, mSupplicantStartedState);
                        addState(mL2ConnectedState, mConnectModeState);
                            addState(mObtainingIpState, mL2ConnectedState);
                            addState(mConnectedState, mL2ConnectedState);
                            addState(mRoamingState, mL2ConnectedState);
                        addState(mDisconnectingState, mConnectModeState);
                        addState(mDisconnectedState, mConnectModeState);
                        addState(mWpsRunningState, mConnectModeState);
                addState(mWaitForP2pDisableState, mSupplicantStartedState);
            addState(mSupplicantStoppingState, mDefaultState);
            addState(mSoftApState, mDefaultState);
        // CHECKSTYLE:ON IndentationCheck
    
        setInitialState(mInitialState);
    
        setLogRecSize(NUM_LOG_RECS_NORMAL);
        setLogOnlyTransitions(false);
    
        //start the state machine
        start();
    

    从WifiStateMachine的构造函数中,我们可以看到使用addState方法给状态机添加了状态,用setInitialState给状态机设置了初始状态mInitialState,用start()启动状态机
    WifiStateMachine状态机的状态结构图如下
    这里写图片描述

    以上Android wifi框架中两个重要的状态机,那么状态机的工作机制是怎么样的呢?

    3 状态机工作原理简介:
    状态机中会有多种状态,状态机中的每一个状态是由State类的实例表示,State实例必须实现processMessage方法用来处理消息。并且可选的实现enter/exit/getName三个方法,enter/exit 等价于类的构造方法和销毁方法,本例用于初始化和清理一个状态。getName方法返回State的名字,默认的实现是返回类名。
    当我们创建一个状态机时,需要使用addState方法给状态机添加状态,正如前面所展示的那样。 用于初始化一个状态机的初始状态。构建好一个状态机以后,我们需要调用start方法启动这个状态机,它就像一个机器,造好以后,加油或者充电,然后发动它,它就进入工作状态了。这个过程会调用初始化状态的enter方法初始化初始状态,如果初始状态由父状态,就会递归调用父状态,直到所有父状态的enter方法被调用。这样才算是完全初始化好了一个状态机,start方法还会使状态机进入已经构造结束阶段,这个时候,当有消息到来时,状态机就可以处理消息了。
    处理消息的过程和初始化类似。当消息到来以后,当前状态就会调用processMessage来处理消息,如果当前消息能够处理消息,那么消息处理过程就结束了,此时会根据具体情况选择切换或者不切换状态机的状态。如果当前State不能处理消息,那么就会递交父State的processMessage来处理,父状态如果还不能处理就继续往上递交。如果一个消息从未被处理,unhandledMessage方法会被调用,这是最后处理这个消息的机会了。
    如果我们期望停止状态机,可以调用quitNow或者quit方法。
    当我们切换状态时,旧State的exit方法会被调用而新State的enter方法会被调用,同时他们父State也会做相同的事情。但是如果两个状态由相同的父状态,那么这个时候他们父状态就没有必要做任何操作了,因为它的状态其实并没有变。
    以上就是一个状态机的工作原理的简要概述。下面我举个例子,当应用程序需要扫描附近的热点时,如果wifi状态机正处于开启状态,那么上层的操作会导致wifi状态机接收到一个消息,开启的状态对它处理后,发现需要把wifi状态机切换到scan状态,(在processMessage中调用transitionTo切换状态)于是开启状态的exit方法被调用,scan状态的enter方法被调用。切换不应该只是wifi状态机状态的切换,这个过程应该会调用底层的代码真正的把wifi的状态切换到对应的状态。切换过去以后底层kernel会返回响应的事件,这又会导致响应的消息被wifi状态机接受,从而又促使wifi状态机状态的切换。

    start()方法用于启动状态机,transitionTo()方法用于设置新状态performTransitions()是去切换新状态,sendMessage()方法用于向mSmHandler发送消息,mSmHandler的handleMessage方法会把消息抛个当前状态的proccessMessage()方法处理。

    展开全文
  • 对于串口wifi模块的工作原理是什么呢?串口wifi模块又有什么功能呢?wifi方案设计远嘉科技给大家讲解有关串口wifi模块的工作原理,以及详细功能介绍。串口wifi模块的简介:采用UART接口,支持串口透明数据传输模式,...
  • WIFI 探针原理

    千次阅读 2015-09-22 16:25:11
    WIFI 探针原理WIFI 是基于IEEE802.11a/b/g/n 协议,在标准协议中,定义了AP(无线接入点)和STA(站或客户端)的两种工作模式;协议中规定了BEACON、ACK、DATA、PROBE 等多种无线数据帧类型,在站连接到无线接入点...
  • WiFi探针的工作原理及采集的数据?

    万次阅读 2017-06-21 12:17:26
    WiFi探针的工作原理? 要深入了解WiFi探针技术,首先先认识WiFi使用的网络协议,WiFi采用的是IEEE802.11协议集,此协议集包含许多子协议。其中按照时间顺序发展,主要有:(1)802.11a,(2)802.11b, (3)802.11g...
  •  WiFi探针技术是指基于WiFi探测技术来识别AP(无线访问接入点)附近已开启WiFi的智能手机或者WiFi终端(笔记本,平板电脑等),无需用户接入WiFiWiFi探针就能够识别用户的信息。  当我们走进探针信号覆盖区域内...
  • 越来越多的 WiFi 工程师开始更多的关注 UART 串口 WiFi 模块,为让新手工程师更快的将 UART 串口 WiFi 模块应用于各类智能家居应用中,本篇简单为大家介绍 UART 串口 WiFi模块的工作原理及应用。 UART 串口 WiFi ...
  • 现在已经有了新的Wi-Fi标准,新标准会把网速提升到新的档次。802.11ad Wi-Fi的数据吞吐量最高为4600Mbps,比当前的802.11ac快四倍。这比标准的千兆以太网和大多数家庭宽带速度要快得多,但所有的Wi- Fi用户都知道,...
  • wince之WiFi漫游的工作原理

    千次阅读 2013-08-06 22:04:08
    各型号的射频卡在漫游过程中的工作方式各异,这缘于专有机制,而且,一些卡比其它卡要好些。只要记住漫游所需时间可能比预想的要长得多,所以在部署无线局域网应用的时候,尤其是无线语音,它对超过100毫秒的漫游...
  • WIFI 探针原理WIFI 是基于IEEE802.11a/b/g/n 协议,在标准协议中,定义了AP(无线接入点)和STA(站或客户端)的两种工作模式;协议中规定了BEACON、ACK、DATA、PROBE 等多种无线数据帧类型,在站连接到无线接入点时...
  • WiFi接入原理

    千次阅读 2019-05-08 17:40:21
    WiFi接入原理 工作站(STA,即无线客户端)首先需要通过主动/被动扫描发现周围的无线服务,再通过认证和关联两个过程后,才能和接入点(AP,Access Point)建立连接,最终接入无线局域网。 参考: Kelvel2012 ...
  • wifi打印服务器又称网络打印服务器、USB共享打印机、网线局域网络打印服务器、网络打印机共享器、无线打印服务器等,它是基于MT7688或MT7628芯片组实现,支持WiFi ap模式sta模式、10/100M自适应网口连接路由器,实现...
  • idea6410WIFI原理

    2012-09-12 20:42:36
    表述了idea6410 无线网卡的工作原理
  • WIFI与蓝牙共用原理

    千次阅读 2017-06-27 17:52:08
    这是因为蓝牙与wifi芯片有些IO会连接在一起,wifi工作与蓝牙工作时哪些IO的状态是不一样的,这就是共存。 进行处理的话bt和WiFi进行快速的切换,即分时复用,由于切换很快,用户感觉是是同时使用WiFi和蓝牙。这和...
  • 空调中的wifi模块工作在监听模式(也有人加混杂模式、也有人叫sniffer模式),手机wifi发送组播包; wifi模块监听MAC层的组播包,从组播包中提取出有效信息; 原理的关键点:手机发送的组播包对应的是TCP协议层中的...
  • NanoPC-T2上的WiFi芯片是AP6212,在BoardConfig.mk中的配置如下: # wifi BOARD_WIFI_VENDOR := ap6212 # Wi-Fi related defines ifeq ($(BOARD_WIFI_VENDOR),ap6212) WPA_SUPPLICANT_VERSION := VER_0_8_X BOARD_...
  • 前一篇文章有网友评论系统不支持wifi共享按钮无法通过二维码查看wifi密码,本文将深度探秘当前wifi密码查看器工作原理。通过此方式可以查看手机在上次恢复出厂设置到现在所连接所有wifi密码,前提是手机需要root。...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 375
精华内容 150
关键字:

wifi工作原理