WLAN直连总体结构和相关流程概览(一)

终于决定要离开***,倒计时一个月。现在基本上不给我安排活了,主要写写文档,进行工作交接的事情。想想确实有很久没写博客了,虽然以前写的也不咋地,但至少在以后能给自己一个参考。需要好好把这一年的东西好好整理一下了。

WiFi模块主要包括三部分:WLAN Station, WLAN Direct, Mobileap(Hotspot) ,应用主要涉及上网、打印、文件传输、热点共享、远程控制、局域网等方面。

前段时间总结了WLAN直连的部分流程,由于boss要求用英文写,在这里单纯的翻译出来。

注: 下面图中有些代码和文件可能和Google提供的有所不同,***在google基础上进行了一些改动。

首先附上一张WLAN直连从UI层到Supplicant层的大致框图:

几乎所有较新的***手机都支持WLAN直连功能,UI层主要有两个入口,一个直接进入(WifiP2pSettings),一个由外部模块调用进入(WifiP2pDevicePicker)。

下面分层详细介绍。

1. UI层

有些信息不便在这里细写,用一张图简单概括一下它们之间的关系:


需要说一下的是,还有一个文件WifiP2pDummyPickerActivity,从它名字也能略窥其作用了-dummy(虚拟的)。实际上,它的确就是UI Layer(WifiP2pDevicePicker)和其他模块的一个中间层。

从上图可以看出,外部模块发一个隐式intent,android系统根据这个intent,就能找到相应的需要启动的Activity。

从上图可以看出,搜索显示出的每一个设备,实际上都被封装成了一个个Preference对象。

2. Framework层

在说这一层详细信息之前,不得不先了解一下Android系统里的状态机(StateMachine)。状态机的实现还是Handler机制,google对它进行了很好的封装扩展,就成了一个功能比较强大的状态机。首先来看看它的类结构图。(此图引用自http://www.cnblogs.com/bastard/archive/2012/06/05/2536258.html

这是一个树形层次状态机,按层级顺序来处理消息。状态机内部有一个活动状态栈,用于存储当前所有处于活动的State,并且在状态转换后,在处理下一个消息时,会更新这个栈。例如

                      mP0

                       /    \

                 mP1   mS0

                  /    \

           mS2  mS1

             /    \         \

       mS3  mS4  mS5  ---> initial state

在初始状态下,活动状态栈中保存的状态为mP0,mP1, mS1, mS5,所以当收到消息时,处理顺序为(假设每个状态都不能处理这个消息,即返回false或NOT_HANDLED) mS5,mS1, mP1, mP0

如果mS5能够处理这个消息(返回true),并且状态转到mS4,那么活动状态栈会更新为mP0,mP1, mS2, mS4。各状态调用顺序为mS5.processMessage() > transitionTo(mS4) > mS5.exit() > mS1.exit() > mS2.enter() > mS4.enter()。当收到下个消息时,首先会调用mS4.processMessage()处理消息。

下面附一张P2pStateMachine的树形层次结构图




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值